Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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
使用'读取cpp中的双数据;e';签名 我在C++程序中读双数据有奇怪的问题,为什么C++加上NNIN,我怎么能让他不去?_C++_Double - Fatal编程技术网

使用'读取cpp中的双数据;e';签名 我在C++程序中读双数据有奇怪的问题,为什么C++加上NNIN,我怎么能让他不去?

使用'读取cpp中的双数据;e';签名 我在C++程序中读双数据有奇怪的问题,为什么C++加上NNIN,我怎么能让他不去?,c++,double,C++,Double,当我给他8.62400e+02时,他将其保存为862.399999997726,而不是862.4 谢谢你的帮助 您无法在floats或doubles中精确表示所有值,这就是整数的区别。如果您想在打印值时去掉9,请在printf()格式字符串中使用适当的精度说明符,这很可能会奏效,但在内部,它永远不会精确地=862.4。因此我无法修复它,必须是这样吗?为什么java没有这个问题?java也有同样的问题是的,但这在TSP问题上有很大的不同,在java中,我贪婪的路线是59941.237972941

当我给他8.62400e+02时,他将其保存为862.399999997726,而不是862.4


谢谢你的帮助

您无法在
float
s或
double
s中精确表示所有值,这就是整数的区别。如果您想在打印值时去掉9,请在
printf()
格式字符串中使用适当的精度说明符,这很可能会奏效,但在内部,它永远不会精确地=862.4。

因此我无法修复它,必须是这样吗?为什么java没有这个问题?java也有同样的问题是的,但这在TSP问题上有很大的不同,在java中,我贪婪的路线是59941.23797294148,而cpp给了我59892.044729864501278:/如此巨大的差异不能用songle舍入错误来解释。但取决于你用双打的结果,舍入误差可能会累积起来,你可能会得到如此大的差异。带浮点值的数学实际上是为成年人编程的:-)在最终结果中,您看到的最大差异可能是累积舍入误差,特别是当您添加数量级非常不同的数字时,或者是程序中的逻辑错误。很难分辨是哪一种。