蒟蒻求助,WA了两个点。

P5738 【深基7.例4】歌唱比赛

我刚才利用你的代码试了一下第二个数据点。结果发现正确答案是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


上一页 |