【问题标题】:Large number store in float type in C [closed]C中浮点型的大数存储[关闭]
【发布时间】:2012-01-19 01:41:20
【问题描述】:

我遇到的问题是如果我为浮点类型分配一个大数字,例如float f = 1.0e20,然后我将其打印到屏幕上使用printf("f = %f\n",f),然后在屏幕上它将是f = 100000002004087730000.000000。谁能告诉我为什么数字显示不是100000000000000000000.000000。提前致谢。

【问题讨论】:

标签: c


【解决方案1】:

您使用的数字在您存储它的类型中没有确切的表示。因此,答案永远不会完全正确。

以此类推,考虑一台使用 6 位十进制数字的计算机。你可以为1/3 做的最好的事情是.333333 但然后是3 * (1/3) != 1。哦,好吧。

那么2/3 呢?如果你使用.666667,那么2/3 != 2 * (1/3)。如果你使用.666666,那么1/3 + 2/3 != 1。哦,好吧。

浮点数就是这样。

【讨论】:

    【解决方案2】:

    总而言之,浮点变量表示为一个固定数字的近似值,该数字随后用指数进行缩放。在您的情况下,该数字太大而无法以准确的方式存储。尝试改用double 并使用%lf 打印出来。它会更准确,尽管不要指望真正的平等。

    【讨论】:

    • 当然,在提问之前尝试自己搜索答案。
    • 要打印doubles,请使用%fl 修饰符在f 转换说明符之前无效。
    猜你喜欢
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2011-04-17
    相关资源
    最近更新 更多