四舍五入到最接近的 uint64_t
Round double to nearest uint64_t
我需要将双精度四舍五入到最接近的有效值 uint64_t
。
所以
uint64_t Round(double);
Round(std::numeric_limits<double>::max())==std::numeric_limits<uint64_t>::max();
Round(std::numeric_limits<double>::lowest())==std::numeric_limits<uint64_t>::min();
Round(1.1)==1;
Round 应该等同于此,但对于 uint64_t 而不是带符号的积分
auto Round(double d){
std::fesetround(FE_TONEAREST);
return llrint(d);
}
std && boost 中是否有任何函数可以启用此功能?
A double
无法保存 uint64_t
的所有值,因为两者通常都是 64 位,而 double
需要为指数预留位。
然而,获得最接近的值并不难:
uint64_t Round(double x){
double rounded=round(x);
if(rounded<0)
return 0;
if(rounded>=pow(2,64))
return std::numeric_limits<uint64_t>::max();
return static_cast<uint64_t>(rounded);
}
我需要将双精度四舍五入到最接近的有效值 uint64_t
。
所以
uint64_t Round(double);
Round(std::numeric_limits<double>::max())==std::numeric_limits<uint64_t>::max();
Round(std::numeric_limits<double>::lowest())==std::numeric_limits<uint64_t>::min();
Round(1.1)==1;
Round 应该等同于此,但对于 uint64_t 而不是带符号的积分
auto Round(double d){
std::fesetround(FE_TONEAREST);
return llrint(d);
}
std && boost 中是否有任何函数可以启用此功能?
A double
无法保存 uint64_t
的所有值,因为两者通常都是 64 位,而 double
需要为指数预留位。
然而,获得最接近的值并不难:
uint64_t Round(double x){
double rounded=round(x);
if(rounded<0)
return 0;
if(rounded>=pow(2,64))
return std::numeric_limits<uint64_t>::max();
return static_cast<uint64_t>(rounded);
}