c ++,无法获得float的准确值

时间:2018-06-14 09:00:41

标签: c++

操作:-f1-80000 f2-79999.9

我希望输出为79999.95。我知道上面评论的setprecision如果使用将打印值为79999.95,但我想稍后使用该值...为了准确...哪些没有完成。

  • Plz帮我解决了这个问题。我希望结果是79999.95 .... 我使用long double来存储使用stold()的字符串值。

2 个答案:

答案 0 :(得分:1)

浮子的ULP(最后位置的单位)是2 ^ -23~1.2 x 10 ^ -7。因此,您无法保证最后一位数。

答案 1 :(得分:0)

IEEE754单精度float无法存储79999.95。如果float需要32位存储且范围大于2的32次方,并且一些非整数包含在可能值的集合中,那就不足为奇了。

最接近的IEEE754 float实际上是79999.953125。很多打印功能足够聪明,可以自动为这个号码丢弃最后的4位数字。

真的没有惊喜。就像最接近的long80000

如果您想要更密集的实数,请使用double