В моих программах бесконечность обычно возникает, когда значение делится на ноль. Я становлюсь неопределенным, когда я делю нуль на ноль. Как вы проверяете бесконечные и неопределенные значения в С++?
В С++ бесконечность представлена как 1. # INF. Неопределенный - -1. # IND. Проблема заключается в том, как проверить, является ли переменная бесконечной или неопределенной. Проверка бесконечности относительно проста: вы найдете определение бесконечности в вашем конкретном С++. Для моего случая (VS2003) это std:: numeric_limits:: infinity(). Вы должны включить "ограничения", чтобы использовать его. Вы можете назначить это бесконечное значение переменной, и вы можете сравнить ее с некоторым значением, чтобы проверить, является ли это значение бесконечным.
Неопределенный немного сложнее, потому что вы не можете сравнивать неопределенное значение с каким-либо другим значением. Любое сравнение возвращает false. Вы можете использовать это свойство для определения неопределенного значения, сравнивая его с самим собой. Скажем, у вас есть двойная переменная, называемая 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())
}
Есть ли лучшие способы для этих проверок, я что-то пропустил?