Как проверить бесконечные и неопределенные значения в C ++?

В моих программах бесконечность обычно возникает, когда значение делится на ноль. Я получаю неопределенность, когда делю ноль на ноль. Как проверить бесконечные и неопределенные значения в C ++?

В C ++ бесконечность представлена ​​1. # INF. Индетерминант представлен -1. # IND. Проблема в том, как проверить, является ли переменная бесконечной или неопределенной. Проверка бесконечности относительно проста: вы найдете определение бесконечности в вашем конкретном C ++. Для моего случая (VS2003) это std :: numeric_limits :: infinity (). Вы должны включить «пределы», чтобы использовать его. Вы можете присвоить это бесконечное значение переменной и сравнить его с некоторым значением, чтобы проверить, является ли это значение бесконечным.

Indeterminate немного сложнее, потому что вы не можете сравнить неопределенное значение с некоторым другим значением. Любое сравнение возвращает ложь. Вы можете использовать это свойство для обнаружения неопределенного значения, сравнивая его с самим собой. Допустим, у вас есть двойная переменная с именем aVal. В нормальных условиях aVal! = AVal возвращает false. Но если значение не определено, aIndVal! = AIndVal возвращает true. Эта странная ситуация не существует для бесконечных значений, то есть aInfVal! = AInfVal всегда возвращает false.

Вот две функции, которые можно использовать для проверки неопределенных и бесконечных значений:

#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())
}

Есть ли лучшие способы для этих проверок, я что-то упустил?

Ответы на вопрос(1)

Ваш ответ на вопрос