обработка ошибок — C ++ Возвращаемое значение в FPE

Фон

У меня есть программа, которая иногда выдает исключения с плавающей точкой из-за (в первую очередь) деления на ноль, несмотря на наличие проверок для деления на ноль значений. Это может быть связано с спекуляция с плавающей точкой но я не уверен.

Я реализовал обработчик для FPE, используя feenableexcept/SIGFPE но это просто останавливает мою программу, что лучше, чем распространение NaNс на протяжении данных.

я нашел это старая страница который говорит о ловушках с плавающей запятой, и, кажется, предполагает, что такая ловушка ответственна за поведение возврата по умолчанию NaN,Inf или же -Inf на деление на ноль. Это заставило меня задуматься.

Вопрос

Можно ли как-то делить на ноль всегда возвращать значение 0.0? (Можно подумать о достоверности этого, но в моем случае это желательно)

подробности

Я использую компиляторы Intel версии 13.0.0 (совместимость с gcc версии 4.4.7) в Linux.

1

Решение

Как насчет того, чтобы реализовать собственную функцию для удовлетворения ваших необычных требований к разделению?

template <typename T> T mydiv(T lhs, T rhs)
{
return (0 == rhs ? lhs : lhs/rhs);
}
2

Другие решения

Помимо путаницы правил использования вселенной

float b = a == 0 ? 3 : 3 + (5 / a);
0

По вопросам рекламы [email protected]