точность вычислений....
точность вычислений....
FB CS 1.53 linux, windows
такой вот запрос
select 4.5*0.95, 4.5*(1-0.05) from rdb$database
дает такой вот результат результат:
(если в эксперте поставить большую точность при выводе float полей)
F_1 F_2
4.275000000000000360000 4,274999999999999470000
конечно, формат double имеет ограничение, но почему число разное???
если я его дальше передаю в UDF, которая его округляет до 2 знаков, получаю 2 разных числа: 4,28 и 4,27.
вот такая бяка.... кто нибудь сталкивался? как победить?
такой вот запрос
select 4.5*0.95, 4.5*(1-0.05) from rdb$database
дает такой вот результат результат:
(если в эксперте поставить большую точность при выводе float полей)
F_1 F_2
4.275000000000000360000 4,274999999999999470000
конечно, формат double имеет ограничение, но почему число разное???
если я его дальше передаю в UDF, которая его округляет до 2 знаков, получаю 2 разных числа: 4,28 и 4,27.
вот такая бяка.... кто нибудь сталкивался? как победить?
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Выполни этот же запрос в isql заодно
Похоже, ИБЕ тебе даёт несколько больше, чем 15 знаков после запятой (вас обманули - вам дали больше (с) )
PS на будущее - почему ты решил, что 1-0.05 == 0.95 ?
Код: Выделить всё
SQL> SELECT 4.5*0.95, 4.5*(1-0.05) FROM RDB$DATABASE ;
MULTIPLY MULTIPLY
======================= =======================
4.275000000000000 4.275000000000000
PS на будущее - почему ты решил, что 1-0.05 == 0.95 ?
было такое подозрение, довольно сильное.PS на будущее - почему ты решил, что 1-0.05 == 0.95 ?
удфку переписывать неохота...
вот так нифига себе блин.... ну и засада
select 4.5*0.95*1E5, 4.5*(1-0.05)*1E5, 0.95*1e5, (1-0.05)*1e5 from rdb$database
результат
427500.000000000058 427499.999999999942 95000 95000