【问题标题】:How can I make numbers more precise in Python? [duplicate]如何在 Python 中使数字更精确? [复制]
【发布时间】:2013-10-23 06:51:13
【问题描述】:

目前我只是在学习 Python 的基础知识,我想,作为一个学习练习,我会尝试编写一些近似于数字“e”的东西。无论如何,它总是给出 11 位小数的答案,我希望它给出更像 1000 位小数的答案。我该怎么做?

【问题讨论】:

    标签: python rounding precision


    【解决方案1】:

    您确定需要让它们“更精确”吗?还是只需要看到比 Python 默认显示的更多的数字?

    >>> import math
    >>> math.pi
    3.141592653589793
    >>>
    >>> '{0:0.2f}'.format(math.pi)
    '3.14'
    >>>
    >>> '{0:0.30f}'.format(math.pi)
    '3.141592653589793115997963468544'
    >>>
    >>> '{0:0.60f}'.format(math.pi)
    '3.141592653589793115997963468544185161590576171875000000000000'
    

    但是,请注意

    浮点数在 C 中通常使用 double 来实现; sys.float_info

    中提供了有关运行程序的机器的浮点数的精度和内部表示的信息

    我向你保证 pi 在 48 位之后不会归零 :-)

    【讨论】:

      【解决方案2】:

      如今几乎所有机器都使用 IEEE-754 浮点运算,并且几乎所有平台都将 Python 浮点数映射到 IEEE-754 “双精度”。

      IEEE-754 double 有 64 位(8 字节),小数有效数的 52 位出现在内存格式中,总精度约为 16 位小数。

      所以要表示一个浮点数比它更精确,你应该使用Decimal

      import decimal
      decimal.getcontext().prec = 100
      

      【讨论】:

        【解决方案3】:

        如果您希望它是一个数字,精度为一千位数,简短的回答是您不能......

        一种解决方法是,您可以使用decimal 模块。这是一个例子:

        import decimal
        a = decimal.Decimal('2387324895172987120570935712093570921579217509185712093')
        

        但是,在这种情况下,a 不再是数字。它只是decimal.Decimal 类的一个实例。好吧,你仍然可以用它做一些数学运算。

        【讨论】:

        • 计算机可以存储您可以编码的任何内容,只要计算机可以存储的比特数就尽可能少(您可能还记得,这些天在数十亿到数万亿的数量级) .您所说的“数字”只是一种特定的编码(IEEE 754 双精度浮点数)。在 Python 中,浮点数只是 float 类的一个实例。 Decimal 对象与float 对象一样多。就计算机科学而言,两者都没有什么特别之处。
        • 感谢您的解释。
        猜你喜欢
        • 2016-04-30
        • 1970-01-01
        • 2013-10-24
        • 1970-01-01
        • 2012-11-13
        • 1970-01-01
        • 2021-11-11
        • 2012-08-23
        • 1970-01-01
        相关资源
        最近更新 更多