powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как работает Sum с Double и Single
7 сообщений из 7, страница 1 из 1
Как работает Sum с Double и Single
    #32271949
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слышал что-то нехорошее про статист. Sum, но что уже не помню, Просветите меня почему она складывает числа типа: Double и Single добавляя им длинные хвосты после запятой. Можно конечно округлять обратно после такого суммирования, НО:
1. интересно почему она так делает?
2. как там с точностью, если например надо точняк просуммировать до сотых - округление Round(Sum([Поле1]);2) не будет хронически ошибаться...?

ну и как лучше в итоге сделать, если надо точно просуммировать?
...
Рейтинг: 0 / 0
Как работает Sum с Double и Single
    #32271956
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cовсем недавно был топик про неправильное округление у сингла. Попробуй поиском. Из него видно, что лучше пользоваться только double.
...
Рейтинг: 0 / 0
Как работает Sum с Double и Single
    #32271964
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поиском уже все перелопатил, ничего интересного не нашел... поищем еще
но помойму с Double такая же фигня, ща проверю...
...
Рейтинг: 0 / 0
Как работает Sum с Double и Single
    #32271996
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мдаа, нашел переписку за 17 мая 03 про округление, гружусь...
...
Рейтинг: 0 / 0
Как работает Sum с Double и Single
    #32272066
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем, вот что там было по существу:

Q1: Почему ошибочно считаются большие числа типа Currency в SQL?
Q2: Почему SELECT SUM (Single) выдает 27.2900012135506 вместо 27.29?
Q3: Почему Int & Fix для некоторых чисел неверно производят усечение?
Q4: Почему у меня получается 418.4 - 408.8 равным 9.59999999999997?
A: Все эти ошибки связаны с неверной (или вообще не проводимой)
нормализацией чисел и преобразования типов в VB[A] и SQL.
Следует учесть, что с Jet3.0 SQL реально использует лишь типы Long,
Double и String. Byte, Boolean, Integer правильно преобразуются в Long.
Date, Single, Currency преобразуются в Double.
Последнее преобразование - грубейшее нарушение стандарта,
так как Currency перестает быть целочисленным типом, используемым
в бухгалтерии для точных расчетов (целочисленный {с фиксир.точкой}
тип не обязательно целое). При этом возникают потери точности при
больших числах. В ранних версиях Currency работает верно.
Преобразование целочисленных значений (или Single) в Double
(и, что важнее, обратно) делается криво (и в VB[A] и в SQL), хотя,
в отличие от заблуждения (связанного с большОй распространенностью
продуктов MS с таким багом), число меньшей значащей разрядности можно
(и нужно) представить как число не меньшей значащей разрядности без
потери точности.
Интеpесно, что пpедставление целого числа как Double не вызывает
потеpи точности ни в VBA ни в SQL, сбой пpоисходит только для
выpажений, пpичем даже для типа: (Val+0) (!!).
Обработка чисел с плавающей точкой по идее (из институтского курса:)
должна заканчиваться округлением до пределов точности вычислений
(с учетом того, что операции с плавающей точкой выполняются
в расширенном формате). Увы, эта операция не производится (почему?).
Отсюда 4/2=1.99...97



- невесело однако, вернее, жопа это

Делаю пока так: Round(Sum([Поле1]);2) тип поля Поле1-Double и тогда конечный результат соответствует действительному
...
Рейтинг: 0 / 0
Как работает Sum с Double и Single
    #32272144
Double для здоровенных целых чисел (более 15 разрядов) тоже барахлит.
Вот пример:
?cdec(2^49)
562949953421312
?cdec(562949953421312 * 2)
1125899906842620
?cdec(562949953421312) * 2
1125899906842624

Jet3.0 - это было давно. Jet3.5 и Jet4.0 Currency считают правильно, а в
последнем есть еще и Decimal.
Для точности вычислений желательно и храненить числа в поляхь указанных типов.
...
Рейтинг: 0 / 0
Как работает Sum с Double и Single
    #32272678
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я это и имел ввиду (а также автор, которого я цитировал), что хранит Access Double нормально, а как любую матем. операцию сделает над этими числами получает число с БОЛЬШИМ периодом и без округления обратно нормальный вид не получишь.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как работает Sum с Double и Single
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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