es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿La función isnan() de C++ no funcionará en una declaración if?

Estoy intentando verificar si una variable no es un número. Intenté usar std::isnan() para eso.

Aquí está el código que pensé que funcionaría:

#include <iostream>
#include <cstddef>
#include <cmath>

int main()
{
    int num = 1;
    if (std::isnan(num))
    {
        std::cout << num << " es un número" << std::endl;
    }
    else
    {
        std::cout << num << " no es un número" << std::endl;
    }
}

El error que se muestra es el siguiente:

“fpclassify”: Llamada ambigua de una función sobrecargada

No entiendo por qué eso no funciona como se esperaba, ya que lo he visto en muchos sitios web como ejemplos.

Aquí también hay una captura de pantalla de todo:

Captura de pantalla

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    La función std::isnan() se utiliza para verificar si una variable es NaN (no es un número) en C++. Sin embargo, solo funciona para tipos de punto flotante (float, double). Estás intentando usarla en una variable entera num, lo cual está causando el error.

    Para verificar si una variable entera es NaN, puedes utilizar la biblioteca std::numeric_limits. Aquí está el código actualizado:

    “`c++
    #include
    #include
    #include
    #include

    int main()
    {
    double num = 1; // Usando double en lugar de int como ejemplo
    if (std::isnan(num))
    {
    std::cout << num << ” es NaN” << std::endl;
    }
    else if (std::numeric_limits<decltype(num)>::has_quiet_NaN && std::isnan(num))
    {
    std::cout << num << ” es quiet NaN” << std::endl;
    }
    else if (std::numeric_limits<decltype(num)>::has_signaling_NaN && std::isnan(num))
    {
    std::cout << num << ” es signaling NaN” << std::endl;
    }
    else
    {
    std::cout << num << ” no es NaN” << std::endl;
    }
    return 0;
    }
    “`

    Este código verifica si la variable es NaN (tanto quiet NaN como signaling NaN) y muestra el mensaje correspondiente. Si no es NaN, muestra "no es NaN".

    ¡Espero que esto ayude!</decltype(num)></decltype(num)>

Comments are closed.