Чтобы найти причину того, что переменные с плавающей запятой были установлены в NaN в моей программе на C++, я включил такие исключения с плавающей запятой:
#include <fenv.h>
feenableexcept(FE_INVALID | FE_OVERFLOW);
Я знаю, что это работает, потому что когда я пишу:
int val = 0.0/0.0;
в моей программе возникает исключение с плавающей запятой. Но NaN «распространяются» через вычисления с плавающей запятой моей программы, и я понятия не имею, какая переменная сначала устанавливается в NaN.
Какие существуют причины для установки переменной в NaN, которые не вызовут исключения с плавающей запятой?
isNaN
и начать засорять свой кодassert(!isNaN(x))
- person Erik   schedule 22.03.2011inf
s и0
s, которые могут быстро привести кNaN
s. - person Mike   schedule 23.06.2014