Pregunta

Estoy tratando de comprobar si un std::complex número que es el resultado de una transformación de Fourier (usando http://fftw.org/) contiene una NaN En la parte real o de imagen.

Estoy usando Borland C ++, así que no tengo acceso a std::isnan. He intentado verificar si el número es NaN comparándolo con sí mismo:

(n.imag() != n.imag())

Sin embargo, tan pronto como llamo al n.imag() o std::imag(n), Obtengo una "operación no válida de punto flotante".

¿Hay alguna forma de validar si un std::complex es bueno; Si contiene un NaN?

¿Fue útil?

Solución 4

Descubrí que Borland tiene su propia biblioteca de matemáticas. Entonces, si desea evitar errores de punto flotante, use Isnan de Borlands Math.

http://docs.embarcadero.com/products/rad_studio/delphiandcpp2009/helpupdate2/en/html/delphivclwin32/math_isnan@double.html

Otros consejos

Esto funciona en G ++:

#include<iostream>
#include<cmath>
#include<complex>

int main(){

  double x=sqrt(-1.);
  std::complex<double> c(sqrt(-1.), 2.);

  std::cout<<x<<"\n";
  std::cout<<c<<"\n";

  std::cout<< ( (c!=c) ? "yup" : "nope" )<<"\n";
}

Desde el float.h encabezamiento

int _isnan(double d);

Devuelve un nonzero valor (TRUE) si el valor pasado es un nan; de lo contrario regresa 0 (FALSE).

int _fpclass(double __d);

Devuelve un valor entero que indica la clase de punto flotante de su argumento. Los valores posibles se definen en float.h (nan, inf, etc.)

Esta ahí fpclassify() en math.h? Debería regresar FP_NAN para nans. O mejor aún usar isnan(). Si no hay tales funciones/macros, puede ver la representación binaria de sus flotadores o dobles y verificar manualmente para NANS. Vea los formatos de precisión único y doble IEEE-754 para más detalles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top