我刚才利用你的代码试了一下第二个数据点。结果发现正确答案是7.39,你的答案是7.00。一般这种精度错误基本上是在中途运算的时候出现了计算机自己把double转成了int的错误。你可以留意一下你的代码中的
```cpp
int sum = 0;
```
这个sum是int型的,进行除法运算时,左侧是int,右侧是int, **计算机在你还没有乘0.1的时候,就已经把小数点后的部分全部省略转换成int了。** 再乘1.0也没有什么用。顶多只是把类型装换成double罢了,不会对数值产生任何影响。小数点后该没值还是没有值。
我已经试过了,把sum的类型装换成double后是可以通过的,希望你能采纳。
至于为什么double除int不会省略小数点后的值具体是为什么,本人还不太了解,您可以自行上网搜索
by lyxleo @ 2020-10-05 09:57:29
如果你不想改变sum的类型的话,还有一个简单的办法:
把
```cpp
p[i] = sum / (m - 2) * 1.0;
```
中的1.0往前成,改为:
```cpp
p[i] = 1.0 * sum / (m - 2);
```
即可。
这样的话,~~其实也~~相当于修改了sum的类型,怎么看出来的呢?如果你在后面加上一个括号,让后面的先运算,变成:
```cpp
p[i] = 1.0 * (sum / (m - 2));
```
发现结果又被打回原形了。
于是我**猜测**是因为乘1.0改变了sum的类型。~~本人才疏学浅,有错望指出~~
by lyxleo @ 2020-10-05 10:15:36