Может ли слишком много добавлений с плавающей точкой вызвать «недопустимую операцию с плавающей точкой»?

Учитывая, что числа относительно малы (от ~ -1 до ~ 1) и являются числами с плавающей запятой и генерируются случайным образом, вы можете получить «недопустимую операцию с плавающей запятой», добавив слишком много из них? Я спрашиваю, потому что это то, что, очевидно, происходит в моей программе прямо сейчас и очень редко тоже. Кроме того, как можно отключить (или избежать) это исключение?

На всякий случай мой компилятор — gcc (i686-posix-dwarf-rev0, созданный проектом MinGW-W64) 5.1.0.

РЕДАКТИРОВАТЬ В соответствии с просьбой я предоставляю код. Тем не менее, добавление поплавков, вызывающих ошибку, является только моей догадкой, вот почему я пришел сюда, чтобы выяснить, может ли это быть моей проблемой. Если я запускаю код ниже, разумно ли, чтобы я мог получить ошибку?

#include <iostream>

int main()
{
float sum = 0, add = 0;
while (true)
{
add = static_cast <float> (rand()) / static_cast <float> (RAND_MAX);
if (rand() % 2) add *= -1;
sum += add;
}
}

РЕДАКТИРОВАТЬ 2: я не получаю ошибку с кодом выше, мне просто нужно знать, если это может произойти.

-1

Решение

IEEE 754 Стандарт определяет следующие ситуации, в которых возникает исключение «недопустимая операция» с плавающей точкой:

  • работает на сигнальной NaN
  • умножение 0 × ∞ или ∞ × 0
  • сложение / вычитание бесконечностей, таких как ∞ − ∞, −∞ + ∞ и т. д.
  • деление 0/0 или ∞ / ∞
  • вычисление остатка от x / y, когда y = 0 или x = ∞ и ни один из них не является NaN
  • принимая квадратный корень из отрицательного числа
  • квантовать, когда результат не соответствует формату назначения или когда один операнд конечен, а другой бесконечен
  • преобразование NaN, ∞ или с плавающей точкой вне целевого диапазона в целое число
  • сравнение неупорядоченных значений с плавающей точкой с сигнализацией
  • вычисление целочисленного логарифма NaN, ∞ или 0

Ваш пример кода не вызовет ни одного из этих случаев, поэтому проблема будет в другом месте вашего кода.

1

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

Других решений пока нет …

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