从下面哪个数转换成整数->双→整数无效
From what number the following conversion integer -> double -> integer is not valid?
假设我的计算机使用IEEE 754浮点编码,我想知道以下函数返回false的最小数字是多少:
constexpr bool test(const unsigned long long int x)
{
return static_cast<unsigned long long int>(static_cast<double>(x)) == x;
}
IEEE-754中double
上的尾数是53位(52位和一个隐藏的,非常技术性)。这意味着如果x
中的最高位高于52位,并且一些较低位不为零,则比较将失败。
你可以通过写一段代码来找出这个问题:
unsigned long long x = 0x1;
while(x > 0)
{
x <<= 1ULL;
if (!test(x+1))
{
cout << "x=" << hex << x << endl;
break;
}
}
编辑:在实际测试后修复了一些代码。打印x=20000000000000
与预测一致。
或者,如果您想使用<limits>
,可以使用以下命令获得相同的结果:
numeric_limits<double> n;
cout << "digits=" << dec << n.digits << " -> " << hex << (1ULL << n.digits) << endl;
相关文章:
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- C++使用整数的压缩数组初始化对象
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 如何实现容纳整数和无效指针的双向链表?
- 无效* 地址的整数* 值
- 如何避免字符串到整数转换情况下的无效参数异常
- 从"char"到"const char*"的转换无效 [-fpermissive] str::atoi (字符串到整数)
- 整数常量的 1024f 后缀无效"F"
- 整数和无效操作数中的小数*已更新
- 错误:整数常量的后缀Ui64无效
- 错误:整数常量上的后缀"i64"无效
- 错误:整数常量上的后缀"b11111111111111111111111111111111"无效
- 当用户输入无效整数时,c++菜单卡住了
- 从下面哪个数转换成整数->双→整数无效
- 错误:整数常量上的后缀"x"无效