Фон
У меня есть программа, которая иногда выдает исключения с плавающей точкой из-за (в первую очередь) деления на ноль, несмотря на наличие проверок для деления на ноль значений. Это может быть связано с спекуляция с плавающей точкой но я не уверен.
Я реализовал обработчик для FPE, используя feenableexcept
/SIGFPE
но это просто останавливает мою программу, что лучше, чем распространение NaN
с на протяжении данных.
я нашел это старая страница который говорит о ловушках с плавающей запятой, и, кажется, предполагает, что такая ловушка ответственна за поведение возврата по умолчанию NaN
,Inf
или же -Inf
на деление на ноль. Это заставило меня задуматься.
Вопрос
Можно ли как-то делить на ноль всегда возвращать значение 0.0
? (Можно подумать о достоверности этого, но в моем случае это желательно)
подробности
Я использую компиляторы Intel версии 13.0.0 (совместимость с gcc версии 4.4.7) в Linux.
Как насчет того, чтобы реализовать собственную функцию для удовлетворения ваших необычных требований к разделению?
template <typename T> T mydiv(T lhs, T rhs)
{
return (0 == rhs ? lhs : lhs/rhs);
}
Помимо путаницы правил использования вселенной
float b = a == 0 ? 3 : 3 + (5 / a);