Если x
является двойным, то одна проблема с этим подходом состоит в том, что вы не можете различить x
, являющийся законно равным нулю, и x
, являющийся положительным значением, меньшим, чем DBL_MIN
.Так что это сработает, если вы знаете, что x
никогда не может быть законно равным нулю, и вы хотите увидеть, когда происходит переполнение.
Вы также можете попробовать перехватить сигнал SIGFPE
, который сработает на POSIX-совместимомСистема в любое время, когда есть математическая ошибка, включая смещение с плавающей точкой.См .: http://en.wikipedia.org/wiki/SIGFPE
РЕДАКТИРОВАТЬ : Для ясности, DBL_MIN
НЕ является наибольшим отрицательным значением, которое может содержать двойник, это наименьшее положительное значение нормализовано значение, которое может содержать двойник.Таким образом, ваш подход хорош, пока значение не может быть равно нулю.
Еще одна полезная константа - DBL_EPSILON
, которая является наименьшим двойным значением, которое можно добавить к 1,0, не возвращая 1.0.Обратите внимание, что это намного большее значение, чем DBL_MIN
.Но это может быть полезно для вас, поскольку вы выполняете тригонометрические функции, которые могут стремиться к 1, а не к 0.