Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ошибка вычисления / 4 сообщений из 4, страница 1 из 1
17.01.2005, 07:14
    #32866936
pand
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка вычисления
Здравствуйте

ASA 9.0.2.2542

Вот такой вот запрос

select cast( 2006 * 5.0/6.0 as numeric(12,2) ),
2006 * cast( case 1 when 1 then 5.0/6.0 when 0 then 1 end as numeric(15,6) )
from dummy ;

возвращает такой результат

1671,67 1664,980000

Сталкивался ли кто с таким багом . Как его обойти я уже придумал. А вот где еще можно наступить на такие грабли
Спасибо
...
Рейтинг: 0 / 0
17.01.2005, 08:17
    #32866977
Высоцкий
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка вычисления
Никакого бага нет
Есть фича

2006 * 5 / 6 рассматривается как
2006 * 5 и далее все это делится на 6

Во втором случае 5 / 6 получаем 0,83 так как никахи указаний по точности нет а уже потом умножается на 2006 - получаем другой результат
...
Рейтинг: 0 / 0
17.01.2005, 13:23
    #32867671
golsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка вычисления
В первом
2006*5.0/6.0 = 2006 * 0.8333333333333333 = 1671.66666666666666 ~ 1671.67
Во втором
2006*(5.0/6.0) ~ 2006 * 0.83 = 1664.98
здесь ~ - опереция округления до сотых

Т.к. ошибка округления A/B в 3-ем знаке может достигать 0.005, то при умножении на 2006 разница между вычислениями может быть до 10.03 (по абсолютному модулю).
А для очень больших и очень маленьких значений может стать важным даже порядок следования сомножителей (делителей). Здесь можно наткнуться на то, что промежуточный результат выпадает из диапазона допустимых значений для double или исказиться из-за того в числе что не может быть более 15-16 значащих десятичных цифр. .
...
Рейтинг: 0 / 0
17.01.2005, 15:40
    #32868170
pand
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ошибка вычисления
Спасибо за ответы.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ошибка вычисления / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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