Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.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++ 不正确的浮点数学?_C++_Floating Point - Fatal编程技术网

C++ 不正确的浮点数学?

C++ 不正确的浮点数学?,c++,floating-point,C++,Floating Point,这是一个在过去几个小时里让我完全困惑的问题 我的程序中硬编码了一个等式: double s2; s2 = -(0*13)/84+6/42-0/84+24/12+(6*13)/42; 每次我运行这个程序,计算机都会给出3作为答案,但是手工计算,我得到4。更进一步,在将方程输入Matlab之后,我也得到了答案4。这是怎么回事 我能想到的唯一一件事就是这里出错了,那就是四舍五入的错误。然而,由于最多有5个舍入误差,再加上使用双精度数学,我的最大误差将非常小,因此我怀疑这是问题所在 有人能提供任何解

这是一个在过去几个小时里让我完全困惑的问题

我的程序中硬编码了一个等式:

double s2;

s2 = -(0*13)/84+6/42-0/84+24/12+(6*13)/42;
每次我运行这个程序,计算机都会给出3作为答案,但是手工计算,我得到4。更进一步,在将方程输入Matlab之后,我也得到了答案4。这是怎么回事

我能想到的唯一一件事就是这里出错了,那就是四舍五入的错误。然而,由于最多有5个舍入误差,再加上使用双精度数学,我的最大误差将非常小,因此我怀疑这是问题所在

有人能提供任何解决方案吗

提前感谢,


-法肯

你把整数除法和浮点除法搞混了。3是整数除法的正确答案。如果你把这些值转换成浮点数,你会得到4。

你实际上不是在做浮点数数学,而是在做整数数学,这将降低除法的结果

在C++中,5/4=1,而不是1.25——因为5和4都是整数,所以结果是整数,因此结果的小数部分被丢弃。
另一方面,5.0/4.0将等于约1.25,因为5.0和4.0中至少有一个是浮点数,因此结果也将是浮点数。

其中一些是使用整数算法计算的。尝试在数字中添加一个小数位,例如
6.0
而不是
6
,告诉编译器您不需要整数算术

s2 = -(0*13)/84+6/42-0/84+24/12+(6*13)/42;
收益率3

s2 = -(0.*13.)/84.+6./42.-0./84.+24./12.+(6.*13.)/42.;

做你想做的。

事实上,那将是一个
.f
,而不仅仅是
f
。嗯,谢谢你的帮助。应该早点到这里,哦,1.25和4.0以及5.0一样,都可以用base 2表示。应该是准确的。因为这是一个武断的例子dmckee,我决定使用更安全的说法。:)