Фон
У меня есть программа, которая иногда выдает исключения с плавающей запятой из-за (в первую очередь) деления на ноль, несмотря на наличие проверок для деления на нулевые значения. Это может быть связано с спекуляция с плавающей запятой, но я не уверен.
Я реализовал обработчик для FPE, используя feenableexcept
/SIGFPE
но это просто останавливает мою программу, что лучше, чем распространение NaN
по данным.
Я нашел эту старую страницу, на которой говорится о ловушках с плавающей запятой, и, кажется, предполагается, что такие ловушка отвечает за поведение по умолчанию, возвращающее NaN
,Inf
или -Inf
при делении на ноль. Это заставило меня задуматься.
Вопрос
Можно ли как-то сделать так, чтобы деление на ноль всегда возвращало значение 0.0
? (Можно задаться вопросом о справедливости этого, но в моем случае это желательно)
Подробнее
Я использую компиляторы Intel версии 13.0.0 (совместимость с gcc версии 4.4.7) в Linux.
if(r<epsilon) r=epsilon
, гдеepsilon
— небольшое значение (не машинное эпсилон), затемsomething/r
. - person Dan   schedule 14.02.2014SIGFPE
также сигнализируется о целочисленном делении. Вы должны отловить неисправную инструкцию в отладчике и определить, что произошло. Вы также должны свести проблему к короткому автономному компилируемому примеру. - person Eric Postpischil   schedule 14.02.2014