Ребят, как в С++ округлить число (double) с заданной точность? Причём точность задана не в количестве знаков после запятой, а как вещественное число.
т.е. точность может быть:
0.1
0.25
0.5
0.01
и др.
Ребят, как в С++ округлить число (double) с заданной точность? Причём точность задана не в количестве знаков после запятой, а как вещественное число.
т.е. точность может быть:
0.1
0.25
0.5
0.01
и др.
Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.
10 ноября 2009 в 21:01
Пасибо.
10 ноября 2009 в 21:00
В первой два лишних умножения, и одно преобразование int->double. Т.е. вторая быстрее, и скорее всего заинлайнится к тому же. А результат одинаковый у них.
10 ноября 2009 в 20:04
Даже лучше так:
inline
double round( double val, double prec)
{
return ((long long)((val/prec) + ((val > 0) ? 0.5 : -0.5)))*prec;
}
10 ноября 2009 в 20:04
Пашка ت Джиоев, спасибо большое.
10 ноября 2009 в 20:04
а чем эти две функции отличаются?
10 ноября 2009 в 20:03
Что-то вроде:
double round( double val, double prec)
{
int sign = (val > 0) ? 1 : -1;
val *= sign;
return ((long long)((val/prec) + 0.5))*prec*sign;
}