Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Invalid Floating Point Operation

16K
01 апреля 2006 года
Пётр ...ович
7 / / 01.04.2006
Чем можно объяснить тот факт, что выполняя один и тот же код, программа без объяснения причин то работает нормально, то выдаёт ошибку "Invalid Floating Point Operation"?

В результате программа периодически остаётся без одного параметра double, что приводит к её некоректной работе.

Как с этим бороться?
247
01 апреля 2006 года
wanja
1.2K / / 03.02.2003
Код в студию! телепаты в отпуске.
16K
01 апреля 2006 года
Пётр ...ович
7 / / 01.04.2006
Цитата:
Originally posted by wanja
Код в студию! телепаты в отпуске.



Код - это, конечно, хорошо. С кодом, оно, конечно, проще. Только код разбросан по файлам.

Ошибку выкидывало тут:

 
Код:
double TEcology::GetFunctionSignificance (int i)  
{      
     return (FunctionSignificance );  
}


Сейчас немного поправил код (методом Н.Тыка). Пока ошибка не выскакивает. Поглядим на процесс обкатки...
1
02 апреля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Пётр ...ович
Код - это, конечно, хорошо. С кодом, оно, конечно, проще. Только код разбросан по файлам.

Ошибку выкидывало тут:
 
Код:
double TEcology::GetFunctionSignificance (int i)  
{      
     return (FunctionSignificance );  
}


Сейчас немного поправил код (методом Н.Тыка). Пока ошибка не выскакивает. Поглядим на процесс обкатки...


У тебя, в твоем разбросанном коде гдето или выполняется конвертация строки в число или присвоение значения, и при этом не выполняется проверка на региональные установки. Т.е. вместо точки стоит запятая, или наоборот. Например, если региональные установки русские, этот код скорее всего сгенерит исключение:

Код:
double test = StrToFloat("3.14");
//примерно тоже будет
test = 3.14;
//примерно так правильно
//Если выбивают ошибки - смотри в хелпы - код пишу по памяти.
char buffer[2]
if(!GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_SDECIMAL,buffer,sizeof(buffer))){
 DWORD result = GetLastError();
 ...
}
if(strcmp(buffer,",")){
double test = StrToFloat("3,14");
test = 3,14;
}
else if(strcmp(buffer,".")){
 ...
}

З.Ы. Только без обид - для вопросов на подобные темы есть форум "Сообщества чайников", если актуально - начать стоит с него.
16K
02 апреля 2006 года
Пётр ...ович
7 / / 01.04.2006
Цитата:
У тебя, в твоем разбросанном коде гдето или выполняется конвертация строки в число или присвоение значения, и при этом не выполняется проверка на региональные установки. Т.е. вместо точки стоит запятая, или наоборот.



Забавно, когда региональные настрйки в течении нескольких секунд меняются... Хотя за код спасибо...
Самое интересное в том, что в разбросанном коде ошибка выскакивает в цикле. То есть, два раза цикл проходит нормально, а на третий лепит ошибку.

Впрочем, машина не может ошибаться. Ошибается всегда человек.

З.Ы. "Чайником" быть не постыдно. Постыдно быть "чайником" и корчить из себя профи.

1
02 апреля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Пётр ...ович
Забавно, когда региональные настрйки в течении нескольких секунд меняются... Хотя за код спасибо...
Самое интересное в том, что в разбросанном коде ошибка выскакивает в цикле. То есть, два раза цикл проходит нормально, а на третий лепит ошибку.

Впрочем, машина не может ошибаться. Ошибается всегда человек.

З.Ы. "Чайником" быть не постыдно. Постыдно быть "чайником" и корчить из себя профи.


глубокая мысль. Жаль поистягалась и поистерлась от употребления к месту и не к месту. В данном случае не к месту. Сообщения об ошибках надо читать. Они для того и пишутся.

А насчет цикла - проще всего установить точку останова и проверить - какое именно действие и в какой момент генерирует исключение. Зачастую это гораздо быстрее чем рассуждать о том чем не стыдно быть.

16K
15 апреля 2006 года
Пётр ...ович
7 / / 01.04.2006
Цитата:
Originally posted by kot_
глубокая мысль. Жаль поистягалась и поистерлась от употребления к месту и не к месту. В данном случае не к месту. Сообщения об ошибках надо читать. Они для того и пишутся.

А насчет цикла - проще всего установить точку останова и проверить - какое именно действие и в какой момент генерирует исключение. Зачастую это гораздо быстрее чем рассуждать о том чем не стыдно быть.



Я хоть и чайник, но не идиот. Обнаружение момента исключения ничем мне не помогло...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог