[Comm] g++ и неточности с плавающей точкой

Michael Pozhidaev =?iso-8859-1?q?msp_=CE=C1_altlinux=2Eru?=
Вт Апр 8 17:43:19 MSD 2008


Здравствуйте, Sergey Vlasov!

> В архитектуре x86 регистры сопроцессора i387, используемые при
> операциях с плавающей точкой, имеют разрядность 80 бит (что
> соответствует типу long double).  Если производятся вычисления с типом
> double, компилятор в зависимости от опций оптимизации может не
> сохранять промежуточные значения в памяти (что привело бы к их
> округлению до точности, обеспечиваемой 64-разрядным типом double), а
> брать их из регистров сопроцессора (с сохранением 80-разрядной
> точности); возможно, как раз это и является причиной изменения
> результатов при смене флагов оптимизации.  У gcc есть опция
> -ffloat-store, включение которой заставляет gcc сохранять все
О, просто блестящий совет! :)
Да, включение -ffloat-store выровняло вычисления. Сейчас это важнее,
чем экстремальная скорость. 
Уже собирался предпринимать поиски ошибок, 
но теперь порядок. По крайней мере понятно, что происходит, и насколько адекватные результаты получаются.
Большое спасибо.
-- 
С уважением и наилучшими пожеланиями, Михаил Пожидаев. E-mail: msp на altlinux.ru.
Томский государственный университет. Факультет информатики. http://www.csd.tsu.ru
AltLinux Team. http://www.altlinux.ru



Подробная информация о списке рассылки community