Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Floating point overflow в 64-bit OC


Автор: dmitry8 16.1.2024, 09:27
Добрый день!

Пишу на Delphi 11 64-bit для Android 64-bit.
Код

var x: Extended80;
begin
  x:= power(2,-1022);
end;

При выполнении этой команды возникает ошибка:
“Floating point overflow.”

Устраняющая ошибку директива:
Код

SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, exOverflow, exUnderflow, exPrecision]);

не устраивает, так как при её использовании получается x = 0 (но это не так).

Мне нужно, чтобы это выполнялось без SetExceptionMask (как в 32-битной ОС).
Перерыл русско- и англоязычный интернет, но не нашёл решение.
Как пофиксить?

Автор: Oldshelf 16.1.2024, 11:35
А возведение в положительную степень работает?

Код

var x: Extended80;
begin
  x:= power(2,1022);
end;

Автор: dmitry8 16.1.2024, 11:49
Цитата(Oldshelf @ 16.1.2024,  11:35)
А возведение в положительную степень работает?

Код

var x: Extended80;
begin
  x:= power(2,1022);
end;

Проверил, возникает та же самая ошибка:
"Floating point overflow"

Автор: Oldshelf 16.1.2024, 13:01
А что получается с маской исключений?

Автор: dmitry8 16.1.2024, 13:31
Цитата(Oldshelf @ 16.1.2024,  13:01)
А что получается с маской исключений?

При использовании маски исключений во втором случае получается:
x = INF

В 32-битных системах (без использования маски исключений):
x = 2.2250738585072E-308 ( где x:= power(2,-1022))
x = 4.49423283715579E307 (где x:= power(2,1022)) 

Автор: Oldshelf 16.1.2024, 14:03
INF - означает, что значение больше допустимого. Вроде, есть исправление этой недоработки:

https://blog.synopse.info/?post/2011/09/13/Using-Extended-in-Delphi-XE2-64-bit
https://blog.grijjy.com/2021/05/05/high-precision/

Автор: Seenkao 9.2.2024, 00:58
1. Попробуйте отключить флаги переполнения при отладке.
2. Попробуйте режим Release (там должны быть уже отключены эти флаги).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)