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

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

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
22.09.2003, 19:07
    #32272144
Как работает Sum с Double и Single
Double для здоровенных целых чисел (более 15 разрядов) тоже барахлит.
Вот пример:
?cdec(2^49)
562949953421312
?cdec(562949953421312 * 2)
1125899906842620
?cdec(562949953421312) * 2
1125899906842624

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


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