1 / 1 / 1
Регистрация: 31.03.2014
Сообщений: 62
|
|
1 | |
Invalid floating point operation14.07.2014, 21:05. Показов 3636. Ответов 5
Метки нет Все метки)
(
Как отладить такую ошибку? В функции достаточно много различных вычислений, на ее вход каждый такт подаются разные данные. И ~ раз в 500 работы функции вылетает такая ошибка, но работа программы не останавливается и такты идут дальше. Как в такой ситуации поработать с отладчиком?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
14.07.2014, 21:05 | |
Ответы с готовыми решениями:
5
Invalid floating point operation Invalid floating point operation в Builder 6.0 Float - Invalid floating point operation Ошибка 'invalid floating point operation' |
Почетный модератор
![]() 5848 / 2859 / 392
Регистрация: 01.11.2011
Сообщений: 6,905
|
||||||
15.07.2014, 09:11 | 2 | |||||
Представьте, что у вас подались данные с плавающей точкой и глазками пройдитесь по телу функции, посмотрев, что нельзя делать с этим типом данных, но делается.
Лучше всего использовать в таком случае какое-либо логирование. Ведите лог:
Задействовать механизм исключений. В try блоке обрабатывать данные, а точку остановки поставить соответственно в catch.
1
|
1280 / 1186 / 175
Регистрация: 02.12.2013
Сообщений: 4,884
|
|
15.07.2014, 10:22 | 3 |
Добавить код проверки корректности входных параметров, особенно на нулевые значения.
1
|
1 / 1 / 1
Регистрация: 31.03.2014
Сообщений: 62
|
|
15.07.2014, 20:29 [ТС] | 4 |
Спасибо, совет с логом очень хороший!)
Однако методом тыка нашел сейчас в Tools-Options-Debugger options-Native OS Exceptions настройки по ошибкам, и можно задать чтоб определенные ошибки скидывали в дебаггер.
0
|
![]() ![]() |
|
15.07.2014, 22:29 | 5 |
Думается, сие происходит из-за того, что выполняется кривая плавающая операция типа деления на ноль или извлечения корня из отрицательного числа. Плавающее деление на ноль, в отличие от целочисленного, по стандарту допустимо. В этом случае процессор вырабатывает исключение, которое может быть программно обработано, и продолжает работать дальше. Вероятнее всего в стандартных борландовских библиотеках уже присутствует обработчик исключений, который и выдаёт окошко с сообщением "Invalid floating point operation". В юниксовых системах свой обработчик настраивается как обработчик сигнала SIGFPE, как оно в винде - я не знаю, но возможно, что как-то похожим образом. Т.е. можно попробовать зарегистрировать свой обработчик и если туда попадём, значит действительно проблема в этом
Добавлено через 24 минуты Что-то под линуксом не получилось выработать сигнал SIGFPE, хотя использовал операции над кривыми величинами ![]() Добавлено через 12 минут Однако не учёл, что по умолчанию генерация исключения отключена и её надо включить C #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <fenv.h> void handler (int p) { printf ("caught!\n"); exit (1); } double a = 1.0, b = 0.0, c; int main (void) { /* Такая настройка может по умолчанию взводиться * в борландовских библиотеках. Там же функция handler */ feenableexcept (FE_ALL_EXCEPT); signal (SIGFPE, handler); /* Выполняем деление на ноль */ c = a / b; return 0; } Код
$ gcc t.c -lm $ ./a.out caught!
0
|
1280 / 1186 / 175
Регистрация: 02.12.2013
Сообщений: 4,884
|
|
15.07.2014, 22:47 | 6 |
Есть у меня один
0
|
15.07.2014, 22:47 | |
Помогаю со студенческими работами здесь
6
Объясните ошибку - Invalid floating point operation Ошибка invalid floating point operation в cppWebBrowser Invalid Floating Point Operation при выводе графика Invalid floating point operation при попытке нарисовать график Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |