【发布时间】:2013-10-23 06:51:13
【问题描述】:
目前我只是在学习 Python 的基础知识,我想,作为一个学习练习,我会尝试编写一些近似于数字“e”的东西。无论如何,它总是给出 11 位小数的答案,我希望它给出更像 1000 位小数的答案。我该怎么做?
【问题讨论】:
目前我只是在学习 Python 的基础知识,我想,作为一个学习练习,我会尝试编写一些近似于数字“e”的东西。无论如何,它总是给出 11 位小数的答案,我希望它给出更像 1000 位小数的答案。我该怎么做?
【问题讨论】:
您确定需要让它们“更精确”吗?还是只需要看到比 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 位之后不会归零 :-)
【讨论】:
如今几乎所有机器都使用 IEEE-754 浮点运算,并且几乎所有平台都将 Python 浮点数映射到 IEEE-754 “双精度”。
IEEE-754 double 有 64 位(8 字节),小数有效数的 52 位出现在内存格式中,总精度约为 16 位小数。
所以要表示一个浮点数比它更精确,你应该使用Decimal。
import decimal
decimal.getcontext().prec = 100
【讨论】:
如果您希望它是一个数字,精度为一千位数,简短的回答是您不能......
一种解决方法是,您可以使用decimal 模块。这是一个例子:
import decimal
a = decimal.Decimal('2387324895172987120570935712093570921579217509185712093')
但是,在这种情况下,a 不再是数字。它只是decimal.Decimal 类的一个实例。好吧,你仍然可以用它做一些数学运算。
【讨论】:
float 类的一个实例。 Decimal 对象与float 对象一样多。就计算机科学而言,两者都没有什么特别之处。