Текущий архив: 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