У меня есть простой фрагмент кода, который извлекает число с плавающей точкой из сгенерированного FORTRAN массива REAL, а затем вставляет его в поток для регистрации. Хотя это работает для первых 30 случаев, 31-го происходит сбой с «Недопустимой операцией с плавающей запятой».
Код:
int FunctionDeclaration(float* mrSwap)
{
...
float swap_float;
stringstream message_stream;
...
swap_float = *(mrSwap+30-1);
...
message_stream.clear();
message_stream << 30 << "\t" << swap_float << "\tblah blah blah \t";
При отладке значение swap_float экземпляра перед сбоем (в последней строке выше) равно 1711696,3, кроме того, что оно намного больше, чем большинство значений до этого момента, в этом нет ничего особенного.
Я также попытался заменить message_stream на cerr и получил ту же проблему. До сих пор я считал, что cerr практически неразрушим — как простой поплавок может его уничтожить?
Изменить:
Спасибо за комментарии: я добавил объявление mrSwap. mrSwap имеет длину около 200, так что я далеко от конца. Он заполняется вне моего контроля, и отдельные записи могут не заполняться, но, насколько я понимаю, это просто означает, что swap_float будет установлен на случайное число с плавающей запятой?
mrSwap
и как он заполняется? - person hmjd   schedule 09.05.2012mrSwap
, но не показываете, что это такое. - person Sebastian Mach   schedule 09.05.2012printf()
вместоcout
? - person zvrba   schedule 09.05.2012int
, тогда как на некоторых наиболее распространенных проблемах сfloat
платформы: Intel, Sparc...) - person James Kanze   schedule 09.05.2012