Вниз
Скачать: CL | DM;

дробные числа в Interbase   Найти похожие ветки 

← →
July   (2005-10-19 12:41) [0]

Господа, кто-нибудь знает, почему, если вставлять обычным insert
число 0,01
в поле типа float записывается 0.0099999998
в поле типа DOUBLE PRECISION - 0.009999999776482582
Числа большие 1, во float выглядят такими же, как задавалось в запросе, а в DOUBLE PRECISION - тоже "преобразованными" - например из 1.000001 получается 1.000000953674316 и т.п.
Это связано с погрешностью вычислений при работе с вещественными числами? Но ведь я ничего не заставляю его вычислять, просто сохраняю число.
Сразу оговорюсь - я знаю, что можно использовать тип Numeric и указать, сколько я хочу видеть знаков после запятой.
Гораздо больше меня интересует вопрос - ПОЧЕМУ Interbase так хранит дробные числа? Чисто теоретицки.. :)
И можно ли каким-то образом принудительно заставить его вписать в поле именно типа float число 0.0100000000, а не 0.0099999998?
(или соответственно в DOUBLE PRECISION - 0.010000000000000000)
Другие СУБД себя так же ведут?


← →
isasa ©   (2005-10-19 12:49) [1]

в поле типа float записывается 0.0099999998
в поле типа DOUBLE PRECISION - 0.009999999776482582

А не пробовал?
single(Delphi) -> float (IB)
double(Delphi) ->  DOUBLE PRECISION (IB)
:)))
Хранение и отображение разные вещи


← →
Johnmen ©   (2005-10-19 13:00) [2]

Весьма полезно
http://www.delphikingdom.com/asp/viewitem.asp?UrlItem=/helloworld/reals.htm


← →
Desdechado ©   (2005-10-19 13:51) [3]

все упирается в способы представления дробных чисел в памяти или регистрах процессора
для них точных НИКОГДА не будет


← →
isasa ©   (2005-10-19 15:16) [4]

все упирается в способы представления дробных чисел в памяти или регистрах процессора

Вещественные числа всегда задаются(пишутся) с определенной точностью(количеством знаков)

0,1 = 0,094..0,14
0,10 = 0,994..0,104
...


← →
isasa ©   (2005-10-19 15:17) [5]

Сорри, надо
0,1 = 0,095..0,14
0,10 = 0,995..0,104
...


← →
isasa ©   (2005-10-19 15:19) [6]

Да что такое :)
0,1 = 0,05..0,14  +-0,05
0,10 = 0,095..0,104  +-0,005
...


← →
July   (2005-10-19 16:25) [7]

isasa> Хранение и отображение разные вещи
Это я понимаю

to Johnmen - спасибо за линк, почитаю
А пока в общем понятно, что насильно хранить 0,0100000000000 комп не заставишь, придется выкручиваться с отображением,
в частности для IB - с numeric

Спасибо за подсказки.


← →
Zacho ©   (2005-10-20 00:25) [8]

July   (19.10.05 16:25) [7]

Если тебе нужно хранит числа с фиксированной запятой, то, если есть возможность стоит перейти на более свежие версии IB/FB и на диалект 3. В диалекте 3 NUMERIC и DECIMAL  хранятся без погрешностей.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.025 c
2-1130844404
Moningstar
2005-11-01 14:26
2005.12.04
Из DLL не в DLL


2-1131959285
zsergey
2005-11-14 12:08
2005.12.04
Как правильно прописать относительный путь...


2-1132221469
IAMDANIL
2005-11-17 12:57
2005.12.04
DEBUG


2-1132038926
Silvestr
2005-11-15 10:15
2005.12.04
Как в RishEdit поменять цвет определёной строки ?


1-1131299363
Aldor
2005-11-06 20:49
2005.12.04
Корректно ли, если контейнер ответственен за уничтожение




   Наверх