Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Числа с плавающей точой, зависимые от платформы  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1103
Есть такие? В старом компонетне олап подложили свинью и у бухов на виндовс хп x86 не идут копейки везде, где сумма около 100к (т.е. 7-8 знаков). На x64 всё работает нормально. Как собрать проект так, чтобы все флоаты были двойной точности по дефолту?
13 май 20, 12:40    [22131951]     Ответить | Цитировать Сообщить модератору
 Re: Числа с плавающей точой, зависимые от платформы  [new]
_Den_Z_
Member

Откуда:
Сообщений: 102
crutchmaster,
Посмотреть в сторону Currency. Или вводить соответствующие правила округления, т.к. вещественные типы хранят ближайшее представление числа и есть шанс получить вместо целого (X).0 - иррациональное (X-1).(9). Касаемо отличий вещественных типов на платформах, то знаю только про extended который на x64 просто double.
13 май 20, 14:04    [22132062]     Ответить | Цитировать Сообщить модератору
 Re: Числа с плавающей точой, зависимые от платформы  [new]
bk0010
Member

Откуда:
Сообщений: 4935
1) Копейки могли и не пропасть, а просто не отображаются из-за длины числа, проверяйте настройки отображения типа ширины ячеек.
2) Проблемы могут быть из-за математики: x86 считает на "математическом сопроцессоре" (который со времен 486DX интегрирован в процессор, но особенности остались) считает с большей точностью, чем x64 на векторной встройке (но на буховских алгоритмах это вряд ли проявится).
13 май 20, 18:09    [22132314]     Ответить | Цитировать Сообщить модератору
 Re: Числа с плавающей точой, зависимые от платформы  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5919
crutchmaster,

если можете локализовать код расчётов, то сами выставляйте точность - классика вечна
13 май 20, 20:18    [22132405]     Ответить | Цитировать Сообщить модератору
 Re: Числа с плавающей точой, зависимые от платформы  [new]
ъъъъъ
Member

Откуда:
Сообщений: 666
crutchmaster
На x64 всё работает нормально. Как собрать проект так, чтобы все флоаты были двойной точности по дефолту?

Никак. Ещё спроси, как сделать, чтобы все целые были одной разрядности, а то одни 8 бит, другие - 64.

Используй Double везде, где нужно, и все.
13 май 20, 20:30    [22132407]     Ответить | Цитировать Сообщить модератору
 Re: Числа с плавающей точой, зависимые от платформы  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1075
Для математического округления в delphi следует использовать модуль DecimalRounding_JH1
13 май 20, 21:00    [22132421]     Ответить | Цитировать Сообщить модератору
 Re: Числа с плавающей точой, зависимые от платформы  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1103
_Den_Z_
Посмотреть в сторону Currency

Не могу, всё вшито в pivot cube (zcube.dll) еще в конце нулевых.
13 май 20, 22:07    [22132453]     Ответить | Цитировать Сообщить модератору
 Re: Числа с плавающей точой, зависимые от платформы  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1103
bk0010,

1) Настройки везде одинаковые, есть ошибки в сумме.
2) Там видимо дело даже не в сопроцессоре. Все похоже на то, что один и тот же бинарник работает то с Single, то с Double в зависимости от платформы.
13 май 20, 22:12    [22132455]     Ответить | Цитировать Сообщить модератору
 Re: Числа с плавающей точой, зависимые от платформы  [new]
misha mike
Member

Откуда:
Сообщений: 687
crutchmaster
Все похоже на то, что один и тот же бинарник работает то с Single, то с Double в зависимости от платформы.

Как вы себе такое представляете? Если DLL скомпилирована под x86, то она и на 64-битной платформе будет работать в точности так же, как на x86. От разрядности платформы точность расчетов внутри DLL не зависит. Ищите причину в разнице настроек ОС или дайте больше информации.

P.S. Вероятность того, что внутри DLL идет проверка версии ОС и в зависимости от нее меняется логика работы, считаю ничтожной.

Сообщение было отредактировано: 13 май 20, 22:44
13 май 20, 22:45    [22132472]     Ответить | Цитировать Сообщить модератору
 Re: Числа с плавающей точой, зависимые от платформы  [new]
miksoft
Member

Откуда:
Сообщений: 38306
Было уже что-то похожее:
https://www.sql.ru/forum/251174/sos-problema-s-okrugleniem
13 май 20, 22:50    [22132474]     Ответить | Цитировать Сообщить модератору
 Re: Числа с плавающей точой, зависимые от платформы  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1103
misha mike
Как вы себе такое представляете?

Да никак. Есть факт, на хп появляются характерные ошибки округления.
misha mike
Если DLL скомпилирована под x86, то она и на 64-битной платформе будет работать в точности так же, как на x86.

На x86 fpu и все double 80 бит, так что не в точности также, как минимум из-за этого.
14 май 20, 08:10    [22132584]     Ответить | Цитировать Сообщить модератору
 Re: Числа с плавающей точой, зависимые от платформы  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1103
misha mike
Ищите причину в разнице настроек ОС или дайте больше информации.

На венде 10-ке такая же петрушка. Как в венде посмотреть какие либы линкует бинарник?
14 май 20, 08:15    [22132586]     Ответить | Цитировать Сообщить модератору
 Re: Числа с плавающей точой, зависимые от платформы  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5919
crutchmaster,

22132405, 22132474 - читать не умеете?
дело обычно в каких ни будь косых драйверах или библиотеках, которые сбивают флаг точности расчётов
14 май 20, 08:33    [22132594]     Ответить | Цитировать Сообщить модератору
 Re: Числа с плавающей точой, зависимые от платформы  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1103
kealon(Ruslan),

Нет. Невероятно, но это факт, дело в кривом pivotcube

http://www.pivotcube.com/forum/viewtopic.php?f=8&t=354

Я хз как так можно написать, чтобы на разных системах получилась разная точность. Спецом не сделаешь.
14 май 20, 10:19    [22132636]     Ответить | Цитировать Сообщить модератору
 Re: Числа с плавающей точой, зависимые от платформы  [new]
misha mike
Member

Откуда:
Сообщений: 687
crutchmaster, но про зависимость от ОС там ни слова.

crutchmaster
На x86 fpu и все double 80 бит

У 32-битных программ даже на 64-битной платформе fpu ровно такой же, как на чистом x86. Это для 64-битного кода fpu уже deprecated и вещественные числа обрабатываются в sse, а 32-битный бинарник, если он претендует на совместимость, будет использовать f-интрукции, которые выполняются модулем x87 точно так же, как и 30 лет назад.

Не, были в эпоху всеобщих 32 бит программы (плеера, кодеки, игры), которые при наличии какого-нибудь mmx или 3dnow, начинали использовать его для ускорения работы. Но это, во-первых, был критичный ко времени исполнения код, а во-вторых, реализовано это обычно было как раз при помощи отдельных dll для обычного и "продвинутого" процессора.

Ваша проблема, как уже написали, скорее всего в том, что в XP каким-то образом изменяется контекст сопроцессора. Этот контекст имеет глобальный характер и один драйвер может изменить его так, что все программы начнут работать по-другому. Это, кстати, одна из причин, почему от fpu отказываются, не предназначался он для многозадачного применения.
14 май 20, 13:05    [22132800]     Ответить | Цитировать Сообщить модератору
 Re: Числа с плавающей точой, зависимые от платформы  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 5919
misha mike
crutchmaster, но про зависимость от ОС там ни слова.

crutchmaster
На x86 fpu и все double 80 бит

У 32-битных программ даже на 64-битной платформе fpu ровно такой же, как на чистом x86. Это для 64-битного кода fpu уже deprecated и вещественные числа обрабатываются в sse, а 32-битный бинарник, если он претендует на совместимость, будет использовать f-интрукции, которые выполняются модулем x87 точно так же, как и 30 лет назад.

Не, были в эпоху всеобщих 32 бит программы (плеера, кодеки, игры), которые при наличии какого-нибудь mmx или 3dnow, начинали использовать его для ускорения работы. Но это, во-первых, был критичный ко времени исполнения код, а во-вторых, реализовано это обычно было как раз при помощи отдельных dll для обычного и "продвинутого" процессора.

Ваша проблема, как уже написали, скорее всего в том, что в XP каким-то образом изменяется контекст сопроцессора. Этот контекст имеет глобальный характер и один драйвер может изменить его так, что все программы начнут работать по-другому. Это, кстати, одна из причин, почему от fpu отказываются, не предназначался он для многозадачного применения.
состояние fpu сохраняется для потока
просто некоторые процедуры из косых либ его меняют, а назад не восстанавливают

Сообщение было отредактировано: 14 май 20, 17:32
14 май 20, 17:33    [22133122]     Ответить | Цитировать Сообщить модератору
 Re: Числа с плавающей точой, зависимые от платформы  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1103
misha mike
crutchmaster, но про зависимость от ОС там ни слова.

Да это у нас две либы перепутали. В одной там single, но потом автор одумался и сделал double. Старая версия где-то осталась и за 10 лет все благополучно забыли что зачем.

Сообщение было отредактировано: 15 май 20, 10:56
15 май 20, 10:57    [22133523]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить