我想确定给定的64位整数是否可以无损地存储在double中.现在我有这个代码:
static_cast<int64_t>(static_cast<double>(value)) == value
Run Code Online (Sandbox Code Playgroud)
但是,我认为由于某些平台上的精度过高,这并不总是准确的.
请注意,我不是要求最大的整数,以便所有较小的整数可以无损存储,即2 ^ 53.我需要知道给定的整数N是否无损存储,即使N + 1和N-1不是.
标准库中有什么东西,可能类似std::numeric_limits,会告诉我这个吗?
只要低位为0,就可以设置更多的高位(因为你可以增加双指数).我减少了对无符号的要求,使得位移不必担心符号位,但我相信它应该是适应性的.
bool fits_in_double_losslessly (uint64_t v)
{
const uint64_t largest_int = 1ULL << 53;
while ((v > largest_int) && !(v & 1))
{
v >>= 1;
}
return v <= largest_int;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |