如何通过在Python中将无理数除以另一个数来获得非常长的十进制数字?

时间:2018-08-30 03:15:20

标签: python numbers

import math
from decimal import *
getcontext().prec = 10000
phi = str(Decimal(1+math.sqrt(5))/Decimal (2) )
print(phi)
print(len(phi))

#output >> phi - 1.6180339887498949025257388711906969547271728515625
#output >> len(phi) - 51

我想得到一个1000位长的数字,但是在Python中,限制似乎是51。所以我该怎么做才能在Python中得到一个很长的数字?

1 个答案:

答案 0 :(得分:2)

math模块与本机二进制浮点算法一起使用。因此至关重要

1+math.sqrt(5)

part与您设置的小数精度无关。该部分完全在本机二进制浮点中完成。

为使输出保持合理的长度,请尝试使用80个有效的十进制数字代替。所以

getcontext().prec = 80

然后

phi = str((1 + Decimal(5).sqrt()) / 2)

相反。明确?现在,改用小数对象的sqrt方法 ,这将尊重您设置的小数精度。您也可以将12强制设置为Decimal,但实际上并不需要-它们会自动转换为Decimal,因为它们的另一个操作数是Decimal 。以上输出:

1.6180339887498948482045868343656381177203091798057628621354486227052604628189024
81