2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2
 
 Re: Деление на 0
Сообщение24.07.2014, 15:19 
Аватара пользователя
Да подождите вы со своими кучами. Начал строить логику на SEH. В Debug конфигурации все работает норм, а вот в Release - проблемы с отлавливанием исключения при переполнении. При выполнении 1E+300 / 1E-300 приложение с треском вылетает и выкидывает message типа: "Исключение unknown software exception (0x91) в приложении по адресу...". Методом тыка и сравнения опций конфигураций Debug и Release обнаружилась опция Fast Floating Point (-ff). При её сбрасывании всё работает. Ассемблерный код деления с выключенной опцией:
Используется синтаксис ASM
fld   qword ptr [ebp-$2c]
fdv   qword ptr [ebp-$34]
fstep qword ptr [ebp-$3c]
wait
 

А с включенной опцией всё тоже самое, только без wait. В самой справке говориться, что эта опция управляет приведением типа:
Цитата:
Floating-point operations are optimized without regard to explicit or implicit type conversions. Calculations can be faster than under ANSI operating mode.

The purpose of the fast floating-point option is to allow certain optimizations that are technically contrary to correct C semantics.

double x; x = (float) (3.5*x);
To execute this correctly, x is multiplied by 3.5 to give a double that is truncated to float precision, then stores as a double in x. Under fast floating-point operation, the long double product is converted directly to a double. Since very few programs depend on the loss of precision on passing to a narrower floating-point type, fast floating point is on by default.

When this option is disabled (-ff-), the compiler follows strict ANSI rules regarding floating-point conversions.
The default is True.

Хотя в ассемблерном варианте ничего такого не наблюдается. Проблема решена. Однако, не понятно почему это решение работает. У кого-то есть объяснения?

 
 
 [ Сообщений: 16 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group