我有一个值为的文本文件:
133.25 129.40 41.69 2.915
当我读到它时:
fscanf(File, "%f", &floatNumber[i]);
我得到了这些值:
1.3325000000000000e+002, 1.2939999389648437e+002, 4.1689998626708984e+001 2.9149999618530273e+000
第一个值是可以的,但其他三个值为什么不同?
答案 0 :(得分:2)
值相同,您需要更改printf中的格式说明符。
此外,浮点数具有离散精度,因此无法表示 任意浮点数到无限精度。
这是IEEE规范中众所周知的问题。
答案 1 :(得分:1)
他们并没有什么不同。浮点仅精确到点 [sic] 。这些是这些值的最接近的表示。 Floating-point is a special beast
答案 2 :(得分:1)
值不同的原因是除了第一个之外的所有数字都不能完全表示为二进制浮点值。如果您需要精确表示小数,you need to use a non-standard library。
答案 3 :(得分:0)
虽然大多数输入无法以任何一种格式准确表示,但使用double而不是float会有更多匹配的数字。
我认为浮动是一种非常专业的类型。如果你有一个非常大的低精度浮点数据数组,并且只对其进行非常好的计算,你可以通过使用float获得一些性能。你得到的浮子数量增加了一倍。缓存行。对于其他任何事情,更喜欢双重浮动。