Como você verifica valores infinitos e indeterminados em C ++?

Nos meus programas, o infinito geralmente surge quando um valor é dividido por zero. Fico indeterminado quando divido zero por zero. Como você verifica valores infinitos e indeterminados em C ++?

Em C ++, o infinito é representado por 1. # INF. Indeterminado é representado por -1. # IND. O problema é como testar se uma variável é infinita ou indeterminada. A verificação do infinito é relativamente direta: você encontra a definição de infinito no seu C ++ específico. Para o meu caso (VS2003), é std :: numeric_limits :: infinity (). Você precisa incluir "limites" para usá-lo. Você pode atribuir esse valor infinito a uma variável e compará-lo com algum valor para verificar se esse valor é infinito.

Indeterminado é um pouco complicado, porque você não pode comparar um valor indeterminado com outro valor. Qualquer comparação retorna false. Você pode usar essa propriedade para detectar um valor indeterminado, comparando-o a si mesmo. Digamos que você tenha uma variável dupla chamada aVal. Sob condições normais, aVal! = AVal retorna false. Mas se o valor for indeterminado, aIndVal! = AIndVal retornará true. Essa situação estranha não está presente para valores infinitos, ou seja, aInfVal! = AInfVal sempre retorna false.

Aqui estão duas funções que podem ser usadas para verificar valores indeterminados e infinitos:

#include "limits.h"
#include "math.h"

bool isIndeterminate(const double pV)
{
    return (pV != pV);
} 

bool isInfinite(const double pV)
{
    return (fabs(pV) == std::numeric_limits::infinity())
}

Existem maneiras melhores para essas verificações, estou faltando alguma coisa?

questionAnswers(6)

yourAnswerToTheQuestion