我有一个值的文本文件:
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
第一个值没问题,但其他三个值为什么不同?
我有一个值的文本文件:
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
第一个值没问题,但其他三个值为什么不同?
值是相同的,您需要更改 printf 中的特定格式。
此外,浮点数具有离散精度,因此不可能将任意浮点数表示为无限精度。
这是 IEEE 规范的众所周知的问题。
值不同的原因是除了第一个数字之外的所有数字都不能完全表示为二进制浮点值。如果您需要精确的小数表示,则需要使用非标准库。
他们没有什么不同。浮点数仅精确到一个点[原文如此]。这些是这些值的最接近的表示。浮点是一种特殊的野兽。
尽管您的大多数输入无法以任何一种格式精确表示,但使用 double 而不是 float,您将获得更多匹配的数字。
我认为 float 是一种非常专业的类型。如果你有一个非常大的低精度浮点数据数组,并且只对它进行性能非常好的计算,你可以通过使用浮点数来获得一些性能。您在例如高速缓存行中获得两倍的浮点数。对于其他任何事情,更喜欢双浮动。