|
|
|
ошибка вычисления
|
|||
|---|---|---|---|
|
#18+
Здравствуйте 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 Сталкивался ли кто с таким багом . Как его обойти я уже придумал. А вот где еще можно наступить на такие грабли Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2005, 07:14 |
|
||
|
ошибка вычисления
|
|||
|---|---|---|---|
|
#18+
Никакого бага нет Есть фича 2006 * 5 / 6 рассматривается как 2006 * 5 и далее все это делится на 6 Во втором случае 5 / 6 получаем 0,83 так как никахи указаний по точности нет а уже потом умножается на 2006 - получаем другой результат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2005, 08:17 |
|
||
|
ошибка вычисления
|
|||
|---|---|---|---|
|
#18+
В первом 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 значащих десятичных цифр. . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2005, 13:23 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=32866977&tid=2013968]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 398ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...