Re: Разность дат в 3-м диалекте

2007-05-06 Пенетрантность Кузнецов Евгений


Доброго времени суток!

Dmitry Yemanov wrote:


Разность дат в 1-м диалекте есть double, а в третьем это NUMERIC(18,9). 
Именно из-за отбрасывания цифр после 9-го знака и получается такой 
результат.




Спасибо за объяснение. Что-то меня совсем заклинило - подумал, что уж 
NUMERIC должен давать точную разность.


В вышеприведенных примерах достаточно округлить до десятитысячных 
секунд, чтобы получить точную разность. Всегда ли это так?

Оценим погрешность вычислений. Поскольку даты представляются точно,
а разность - до 9 знака после запятой, то искомая величина в секундах 
составит


d = дробная 
часть(разность_в_десятитысячных_секунд/86400/10^4*10^9)*86400/10^9

=дробная часть(разность_в_десятитысячных_секунд/0.864)*0.864*10^(-4)

Для 4167 значений из 1 возможных получаем, что d  0.5*10^-4 секунды
и не может быть ликвидирована округлением.

Пример
Дата1=28.04.2007 22:59:59
Дата2=28.04.2007 22:59:59.0019
Разница в десятитысячных секунд=18,144

Получаем ошибку в 1 десятитысячную секунды. Т.е. для вычисления точной 
разности между датами в 3-м диалекте все же нужна самописная UDF


С уважением, Евгений.



Re: Разность дат в 3-м диалекте

2007-05-06 Пенетрантность Кузнецов Евгений



Для 4167 значений из 1 возможных получаем, что d  0.5*10^-4 секунды
и не может быть ликвидирована округлением.


Все, в отпуск пора :( Достаточно округлять вверх до ближайшего целого.

С уважением, Евгений



Re: Разность дат в 3-м диалекте

2007-04-18 Пенетрантность Dmitry Yemanov


Кузнецов Евгений wrote:


Вроде бы дата хранится как 2 INTEGER или
я что-нибудь не понимаю? Смотрел на 1.5.4 и 2.0.1


Разность дат в 1-м диалекте есть double, а в третьем это NUMERIC(18,9). 
Именно из-за отбрасывания цифр после 9-го знака и получается такой 
результат.



--
Дмитрий Еманов