Verificar si un número complejo tiene nan
-
28-10-2019 - |
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
?
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.
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.