Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.04;
Скачать: 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 вся ветка

Текущий архив: 2005.12.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
2-1132012066
vasek
2005-11-15 02:47
2005.12.04
interbase.


10-1108373934
Homa_Programer
2005-02-14 12:38
2005.12.04
поиск в Ворде


2-1131952549
alexus
2005-11-14 10:15
2005.12.04
Проблемы с установкой


14-1131786030
lookin
2005-11-12 12:00
2005.12.04
Общая проблема - отсутствие реального опыта


14-1131813056
palva
2005-11-12 19:30
2005.12.04
Ломают RSA