python数学日志更大整数时输出不准确?

2024-06-26 04:53:52 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的代码,我正在尝试使用数学日志找到整数的对数。 我尝试了大部分方法来解决不准确的日志,但似乎没有什么能解决我的代码:

num = 810333333333333333253432343224234
print(num)
getcontext().prec = 100 # set the precision  (no. of digits)
getcontext().rounding = ROUND_DOWN  # this will effectively truncate
logA = Decimal(math.log(num,2))

print(logA)
#find num using component of logs
seedfrac = Decimal(logA - int(logA))
nonfrac = 2**int(logA)
frac = Decimal(2**seedfrac)
print(Decimal(frac*nonfrac))
#find num directly 
print(Decimal(2**logA ))

输出检查值:

^{pr2}$

请回复,如果你知道任何解决办法,谢谢。在


Tags: of代码对数数学整数findnumint
1条回答
网友
1楼 · 发布于 2024-06-26 04:53:52

math.log只对float起作用,所以当你使用Decimal(math.log(num,2))时,你只是对将{}转换为一个浮点的结果调用Decimal,然后获取其浮点精度日志。在

首先将数字转换为十进制实例,保持精度,然后使用其对数方法之一(为便于阅读,在下面插入新行):

In [22]: Decimal(num)
Out[22]: Decimal('810333333333333333253432343224234')

In [23]: Decimal(num).ln()
Out[23]: Decimal('75.77499847546938418941086142055648421904630259496362044
                  157156139031463040418047508186428539214239394')

In [24]: Decimal(num).ln().exp()
Out[24]: Decimal('810333333333333333253432343224234.0000000000000000000000
                  000000000000000000000000000000000000000000020')

In [25]: Decimal(num).ln() / Decimal(2).ln()
Out[25]: Decimal('109.32021452392844307936383214097698765413874994582696830
                  23528366628242511675596034347551786781907708')

In [26]: 2**(Decimal(num).ln() / Decimal(2).ln())
Out[26]: Decimal('810333333333333333253432343224233.999999999999999999999
                  9999999999999999999999999999999999999999999548')

相关问题 更多 >