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

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

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

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

Сообщение 7bit » 02.04.2025 23:43:29

Например, есть такое округление:
Код: Выделить всё
RoundTo(2.0000000000000004, -2)

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

Lazarus 3.2 (rev lazarus_3_2) FPC 3.2.2 i386-win32-win32/win64
У вас нет необходимых прав для просмотра вложений в этом сообщении.
7bit
новенький
 
Сообщения: 41
Зарегистрирован: 01.10.2011 12:35:52

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

Сообщение wavebvg » 03.04.2025 00:24:24

Вам необходимо настроить режим FPU для потока
wavebvg
постоялец
 
Сообщения: 355
Зарегистрирован: 28.02.2008 04:57:35

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

Сообщение xchgeaxeax » 03.04.2025 00:30:14

А вы уверены, что при использовании простой константы вы вызываете в обоих случаях вариант для 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
У вас нет необходимых прав для просмотра вложений в этом сообщении.
xchgeaxeax
постоялец
 
Сообщения: 173
Зарегистрирован: 11.05.2023 03:51:40

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

Сообщение 7bit » 03.04.2025 22:42:40

Нашел. Добавил в поток вызов Math.SetPrecisionMode(pmExtended). В линуксе 64-bit такой проблемы нет. Спасибо за подсказки.
7bit
новенький
 
Сообщения: 41
Зарегистрирован: 01.10.2011 12:35:52


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

Рейтинг@Mail.ru