我需要将双精度取整为最接近的有效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;
该回合应与uint64_t等效,而不是带符号的整数
auto Round(double d){
std::fesetround(FE_TONEAREST);
return llrint(d);
}
std && boost中是否有任何功能可以启用此功能?
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);
}