Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Числа с плавающей точой, зависимые от платформы / 17 сообщений из 17, страница 1 из 1
13.05.2020, 12:40
    #39956763
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа с плавающей точой, зависимые от платформы
Есть такие? В старом компонетне олап подложили свинью и у бухов на виндовс хп x86 не идут копейки везде, где сумма около 100к (т.е. 7-8 знаков). На x64 всё работает нормально. Как собрать проект так, чтобы все флоаты были двойной точности по дефолту?
...
Рейтинг: 0 / 0
13.05.2020, 14:04
    #39956841
_Den_Z_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа с плавающей точой, зависимые от платформы
crutchmaster,
Посмотреть в сторону Currency. Или вводить соответствующие правила округления, т.к. вещественные типы хранят ближайшее представление числа и есть шанс получить вместо целого (X).0 - иррациональное (X-1).(9). Касаемо отличий вещественных типов на платформах, то знаю только про extended который на x64 просто double.
...
Рейтинг: 0 / 0
13.05.2020, 18:09
    #39957038
bk0010
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа с плавающей точой, зависимые от платформы
1) Копейки могли и не пропасть, а просто не отображаются из-за длины числа, проверяйте настройки отображения типа ширины ячеек.
2) Проблемы могут быть из-за математики: x86 считает на "математическом сопроцессоре" (который со времен 486DX интегрирован в процессор, но особенности остались) считает с большей точностью, чем x64 на векторной встройке (но на буховских алгоритмах это вряд ли проявится).
...
Рейтинг: 0 / 0
13.05.2020, 20:18
    #39957112
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа с плавающей точой, зависимые от платформы
crutchmaster,

если можете локализовать код расчётов, то сами выставляйте точность - классика вечна
...
Рейтинг: 0 / 0
13.05.2020, 20:30
    #39957114
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа с плавающей точой, зависимые от платформы
crutchmaster
На x64 всё работает нормально. Как собрать проект так, чтобы все флоаты были двойной точности по дефолту?

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

Используй Double везде, где нужно, и все.
...
Рейтинг: 0 / 0
13.05.2020, 21:00
    #39957125
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа с плавающей точой, зависимые от платформы
Для математического округления в delphi следует использовать модуль DecimalRounding_JH1
...
Рейтинг: 0 / 0
13.05.2020, 22:07
    #39957139
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа с плавающей точой, зависимые от платформы
_Den_Z_
Посмотреть в сторону Currency

Не могу, всё вшито в pivot cube (zcube.dll) еще в конце нулевых.
...
Рейтинг: 0 / 0
13.05.2020, 22:12
    #39957140
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа с плавающей точой, зависимые от платформы
bk0010,

1) Настройки везде одинаковые, есть ошибки в сумме.
2) Там видимо дело даже не в сопроцессоре. Все похоже на то, что один и тот же бинарник работает то с Single, то с Double в зависимости от платформы.
...
Рейтинг: 0 / 0
13.05.2020, 22:45
    #39957151
misha mike
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа с плавающей точой, зависимые от платформы
crutchmasterВсе похоже на то, что один и тот же бинарник работает то с Single, то с Double в зависимости от платформы.
Как вы себе такое представляете? Если DLL скомпилирована под x86, то она и на 64-битной платформе будет работать в точности так же, как на x86. От разрядности платформы точность расчетов внутри DLL не зависит. Ищите причину в разнице настроек ОС или дайте больше информации.

P.S. Вероятность того, что внутри DLL идет проверка версии ОС и в зависимости от нее меняется логика работы, считаю ничтожной.
...
Рейтинг: 0 / 0
13.05.2020, 22:50
    #39957152
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа с плавающей точой, зависимые от платформы
Было уже что-то похожее:
https://www.sql.ru/forum/251174/sos-problema-s-okrugleniem
...
Рейтинг: 0 / 0
14.05.2020, 08:10
    #39957229
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа с плавающей точой, зависимые от платформы
misha mike
Как вы себе такое представляете?

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

На x86 fpu и все double 80 бит, так что не в точности также, как минимум из-за этого.
...
Рейтинг: 0 / 0
14.05.2020, 08:15
    #39957231
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа с плавающей точой, зависимые от платформы
misha mike
Ищите причину в разнице настроек ОС или дайте больше информации.

На венде 10-ке такая же петрушка. Как в венде посмотреть какие либы линкует бинарник?
...
Рейтинг: 0 / 0
14.05.2020, 08:33
    #39957238
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа с плавающей точой, зависимые от платформы
crutchmaster,

22132405 , 22132474 - читать не умеете?
дело обычно в каких ни будь косых драйверах или библиотеках, которые сбивают флаг точности расчётов
...
Рейтинг: 0 / 0
14.05.2020, 10:19
    #39957269
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа с плавающей точой, зависимые от платформы
kealon(Ruslan),

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

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

Я хз как так можно написать, чтобы на разных системах получилась разная точность. Спецом не сделаешь.
...
Рейтинг: 0 / 0
14.05.2020, 13:05
    #39957375
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 отказываются, не предназначался он для многозадачного применения.
...
Рейтинг: 0 / 0
14.05.2020, 17:33
    #39957614
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа с плавающей точой, зависимые от платформы
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 сохраняется для потока
просто некоторые процедуры из косых либ его меняют, а назад не восстанавливают
...
Рейтинг: 0 / 0
15.05.2020, 10:57
    #39957895
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Числа с плавающей точой, зависимые от платформы
misha mike
crutchmaster, но про зависимость от ОС там ни слова.

Да это у нас две либы перепутали. В одной там single, но потом автор одумался и сделал double. Старая версия где-то осталась и за 10 лет все благополучно забыли что зачем.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Числа с плавающей точой, зависимые от платформы / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]