【问题标题】:why %f in C adds me 3 more random numbers in the output? [duplicate]为什么 C 中的 %f 在输出中增加了 3 个随机数? [复制]
【发布时间】:2015-10-24 12:20:17
【问题描述】:
#include <stdio.h>
void main() {
    float num = 546.327;
    printf("the number is %f\n",num);
    enter code here

}

输出是 546.327026。 当我尝试不同的数字时,它总是在点后打印 6 个数字,而最后 3 个数字是随机的。

【问题讨论】:

  • 嗯...重复以将其标记为....

标签: c


【解决方案1】:

浮点数存储在 1/2^N 的分数之和中

第一个小数位是 0.5,第二个是 0.25,第三个是 0.125,等等

所以它们的表示不准确...如果 546.327 不能表示为 1/2^N 的总和,它将近似为接近的值... 这就是你得到“随机数字”的原因,它们根本不是随机的,只是四舍五入的不准确。

如果您尝试打印另一个可以用 1/2^N 的总和准确表示的数字,您将得到准确的数字。即 546.5、546.75 等

【讨论】:

    【解决方案2】:

    这是精度问题。

    单精度浮点数有一个 24 位尾数,大约是 7.2 个十进制数字。该术语大致暗示十进制和二进制表示之间的转换可能是不精确的。下表显示了此转换问题。第一列给出一个十进制值,第二列包含该数字最接近的单精度浮点表示。

    Here is the full Article

    【讨论】:

      猜你喜欢
      • 2015-10-23
      • 2021-08-12
      • 2023-04-10
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 2021-04-09
      • 2023-03-08
      相关资源
      最近更新 更多