"Konstantin R. Beliaev" ...
>
> select cast((2674.615-300) as decimal(2,2)),
>         cast(2674.615 as decimal(2,2)) from rdb$database
> получается 2374.61 и 2674.62
>
> Куда девалась копейка?
>
> FB 1.5.3, Win2003

    Как раз в 1.5.3 я с округлением уже боролся. Алгоритм примерно такой

static const double eps_double = 1e-14;
static const double eps_float  = 1e-5;

(long) d + 0.5 + eps, где

d - double (или float) и
eps = eps_double (или eps_float )

    Вот этот eps я и ввёл в алгоритм, раньше его не было

    В данном же примере d + eps_double меньше чем 237462, на
2.9103830456734 e-011

    Увеличивать eps_double рискованно, т.к. идея была в том, чтобы
добавить 1 самый младший разряд в двоичном представлении double.
Оно, собственно, и так несколько завышенно т.к. точность double 15 цифр

--
Хорсун Влад


Reply via email to