Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么(1UL<;<;53)加1.0不等于它本身?_C++_Floating Point - Fatal编程技术网

C++ 为什么(1UL<;<;53)加1.0不等于它本身?

C++ 为什么(1UL<;<;53)加1.0不等于它本身?,c++,floating-point,C++,Floating Point,说 int64\u t x=(1UL) 表达式x+1.0使用浮点运算完成 假设使用了,则最多可以精确表示253个整数 表达式x+1.0使用浮点运算完成 假设使用了,则最多可以精确表示253个整数。行x+=1.0的计算结果为 x+= 1.0; 数字2^53+1=9007199254740993不能准确地表示为IEEEdouble,因此它被四舍五入为2^53=9007199254740992(实际上这取决于当前的四舍五入模式),然后(无损地)转换为int64\t行x+=1.0 x+= 1.0;

int64\u t x=(1UL)
表达式
x+1.0
使用浮点运算完成

假设使用了,则最多可以精确表示253个整数

表达式
x+1.0
使用浮点运算完成


假设使用了,则最多可以精确表示253个整数。

x+=1.0
的计算结果为

x+= 1.0;

数字
2^53+1=9007199254740993
不能准确地表示为IEEE
double
,因此它被四舍五入为
2^53=9007199254740992
(实际上这取决于当前的四舍五入模式),然后(无损地)转换为
int64\t
x+=1.0

x+= 1.0;
数字
2^53+1=9007199254740993
不能准确表示为IEEE
double
,因此它被四舍五入为
2^53=9007199254740992
(实际上这取决于当前的四舍五入模式),然后(无损地)转换为
int64\t

x = (int64_t)((double)x + (double)1.0);