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

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 значений из 10000 возможных получаем, что 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

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

Ответить