2013-01-02 41 views
0

默认情况下,我获得4位精度,当我使用setprecision(6)时,变量的最后几位随机出现,如1/3=0.333369如何在C++中打印6位精度的float值?

+1

它看起来像你被'float'类型本身所限制,为什么不使用'double'?但即使这种类型也有局限性。 – fge

+2

给出一个完整的例子 –

+0

@Potatoswatter IEEE 754浮动不能像那样工作;) – fge

回答

4

float由于使用了24位二进制数字来存储数字的位数,所以其精度约为7个十进制数字。就产量而言,setprecision(6)可以满足您的所有需求。

这很可能是您正在失去精确度,例如通过减去两个具有相似值的数字并打印结果。快速解决方案是将计算更改为使用doublelong double。但是要对浮点结果的精度做出任何保证,您需要了解FP如何工作并分析公式计算方式。

参见What Every Computer Scientist Should Know About Floating-Point Arithmetic