【问题标题】:Why does my float of 999999999 become 10000000000? [duplicate]为什么我的 999999999 的浮点数变成 10000000000? [复制]
【发布时间】:2016-12-28 16:51:18
【问题描述】:

当我执行以下代码时,出现了问题:

float number = 999999999;
printf("%lf", number);

结果是10000000000 而不是999999999

为什么不是999999999

【问题讨论】:

  • 您将需要与它等效的 bignums 库和适当的类型。
  • 如果你使用decimal,它将是999999999。

标签: c floating-point


【解决方案1】:

Typical float 可以精确地表示大约 232 个不同的数字,例如 1234.0 和 -0.125。 999999999 不是其中之一。 10000000000.0f 是最接近的 float 替代方案。

在赋值过程中发生了近似

float number = 999999999;  // Really assigned 10000000000.0f

【讨论】:

  • 感谢您的回答,但我不知道“典型的浮点数可以准确地表示大约 232 个不同的数字,例如 1234.0 和 -0.125。999999999 不是其中之一。”,你能显示更多关于它的信息?
  • @zhaoguangliang float 通常是 4 个字节,最多是 4,294,967,296 个不同的浮点数。然而你可以编码float number = endless_different_decimal_values_in_text;。有时代码会使用一个无法表示为这 40 亿个中的 1 个的数字。你认为那会发生什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
  • 2011-03-03
  • 2022-06-14
  • 2011-11-23
  • 2019-05-17
  • 1970-01-01
相关资源
最近更新 更多