Учитывая, что числа относительно малы (от ~ -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: я не получаю ошибку с кодом выше, мне просто нужно знать, если это может произойти.
IEEE 754 Стандарт определяет следующие ситуации, в которых возникает исключение «недопустимая операция» с плавающей точкой:
Ваш пример кода не вызовет ни одного из этих случаев, поэтому проблема будет в другом месте вашего кода.
Других решений пока нет …