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?