Re: округление дробной части

From
Alex Kozhushko ()
To
Yuri Muhitov
Date
2002-11-12T10:02:10Z
Area
RU.ALGORITHMS
From: "Alex Kozhushko" <alxrie@sibmail.ru>

Добрый день, Юрий!

"Yuri Muhitov" <muhitov@bercut.ru> wrote in message
news:aqq7rh$30u7$1@ddt.demos.su...

YM> У кого найдется более ( интересная | эффективная | простая ) реализация
YM> округления дробной части  до n знаков после десятичной точки ?

YM> #include <math.h>
YM> /* округляет val до fract знаков после запятой */
YM> double round ( double val, int fract )
YM> {
YM>  double fact = pow ( 10.0, fract );
YM>  return ( double )( int )( val * fact + 0.5 ) / fact;
YM> }

Функция pow смущает. Реализована она через экспоненту - а это не слишком
быстро.
fract вряд ли больше 20 (для 64-битного вещественного). Возвести 10 в целую
степень можно за O(log fract) умножений - то есть в данном случае не более
чем за 5 умножений (причем целочисленных).

С уважением,
Алексей



--- ifmail v.2.15dev5
 * Origin: Demos online service (2:5020/400)