LINUX.ORG.RU

Округление вещественных чисел


0

0

Кто подскажет как на c/c++ округлить вещественное число с заданной точность. функции trunc и round округляют до целой части, а мне необходимо дробную округлять. Может кто знает Что-нибудь поэффективнее чем выделить дробную часть, округлить как целое, а потом вернуть обратно.


Использую такую:

double Round(double Argument, int Precision,unsigned int Amendment)
{
double div = 1.0;
if(Precision >= 0)
{
while(Precision--)
div *= 10.0;
return floor(Argument * div + 0.5 + (Amendment>1?pow
(0.1,Amendment):0.0)) / div;
}
else
{
while(Precision++)
div /= 10.0;
return floor(Argument * div + 0.5) / div;
}
}

OlegY
()

чтоб было поэффективнее надо все деления повыкинуть. в смысле умножать на обратное, а с таким количеством ветвлений и вызовов типа pow скорость рядом не лежала.

кстати, посему не подходит что-нить типа round(Argument*10^Amendment)*10^(-Amendment) ну и есстественно 10^(+/- Amendment) брать из таблицы. по-моему дешево и сердито :)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.