<分区>
我知道浮点精度只有这么多位。毫不奇怪,以下代码认为 (float)(UINT64_MAX)
和 (float)(UINT64_MAX - 1)
相等。我正在尝试编写一个函数来检测这种类型的(由于缺少适当的术语)“转换溢出”。我以为我可以以某种方式使用 FLT_MAX
但这是不正确的。执行此操作的正确方法是什么?
#include <iostream>
#include <cstdint>
int main()
{
uint64_t x1(UINT64_MAX);
uint64_t x2(UINT64_MAX - 1);
float f1(static_cast<float>(x1));
float f2(static_cast<float>(x2));
std::cout << f1 << " == " << f2 << " = " << (f1 == f2) << std::endl;
return 0;
}