我正在编写使用float类型进行求和的C ++ / C代码。我知道我可以使用double或long double但是现在我正在测试float。我比较了两个实现,一个单线程,其中整个总和一次执行,另一个线程实现,其中部分总和,然后在所有线程完成时在末尾求和。即使测试系列非常小,我也会得到0.0001数量级的差异(总共20个数字,只是为了测试)。这让我感到惊讶。获得差异是可以理解的,但我希望它们更小。人们可能会怀疑一个错误,但是,这两个实现提供了一致的结果,最多3位小数。你怎么想,这是合理的,还是我应该找一个bug?哪种实现更准确?
答案 0 :(得分:2)
答案 1 :(得分:0)
我知道您想使用float进行测试。但是为了确认你是否有bug,我只是将你的变量改为double,试一试并检查结果。如果double的结果是OK,则表示您没有错误。如果double的结果也差异很大,那你就有一个bug。
然后做完测试后你可以回去漂浮。
顺便说一句,我认为即使只有20个数字也可以得到这样的差异。