Округление в потоке

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
7bit
новенький
Сообщения: 43
Зарегистрирован: 01.10.2011 12:35:52

Округление в потоке

Сообщение 7bit »

Например, есть такое округление:

Код: Выделить всё

RoundTo(2.0000000000000004, -2)
В основном потоке результат будет 2, в дочерних потоках - 2.0000000000000004. Почему так? Как сделать, чтобы результат округления был как в основном потоке?

Lazarus 3.2 (rev lazarus_3_2) FPC 3.2.2 i386-win32-win32/win64
У вас нет необходимых прав для просмотра вложений в этом сообщении.
wavebvg
постоялец
Сообщения: 355
Зарегистрирован: 28.02.2008 03:57:35

Сообщение wavebvg »

Вам необходимо настроить режим FPU для потока
xchgeaxeax
постоялец
Сообщения: 198
Зарегистрирован: 11.05.2023 02:51:40

Сообщение xchgeaxeax »

А вы уверены, что при использовании простой константы вы вызываете в обоих случаях вариант для Double (т.к. используете -2)?
Попробуйте const aValue: Double = 2.0000000000000004; RoundTo(aValue, -2);
У меня вот результат не отличается.
Снимок экрана_20250403_002229.png
Снимок экрана_20250403_002607.png
Calculate Linux - Lazarus 3.8 (FPC 3.2.2) x86_64
У вас нет необходимых прав для просмотра вложений в этом сообщении.
7bit
новенький
Сообщения: 43
Зарегистрирован: 01.10.2011 12:35:52

Сообщение 7bit »

Нашел. Добавил в поток вызов Math.SetPrecisionMode(pmExtended). В линуксе 64-bit такой проблемы нет. Спасибо за подсказки.
Ответить