将浮点基数 2 转换为基数 10 至 100+ 小数位 [已关闭]

问题描述 投票:0回答:2

我正在尝试为“素数常数”找到更多的小数位。使用

getcontext().prec=100

后输出最大为小数点后 51 位
from decimal import *
getcontext().prec = 100
base = 2
s = "0.0110101000101000101000100000101000001000101000100000100000101000001000101000001000100000100000001000101000101000100000000000001000100000101000000000101000001000001000100000100000101000000000101000101000000000001000000000001000101000100000101000000000100000100000100000101000001000101000000000100000000000001000101000100000000000001000001000000000101000100000100000001000001000001000100000100000001000100000001000000000101000000000101000001000100000100000001000101000100000000000100000001000100000001000100000100000000000101000000000000000001000001000000000100000100000101000001000000000100000100000101000001000001000101000000000001000000000101000100000100000101000000000001000100000100000001000000000100000001000000000100000001000001000001000100000001000001000100000001000100000000000001000000000100000000000101000000000101000101000000000100000000000001000101000100000000000001000101000100000000000000000001000100000001000000000100000001000100000100000100000000000001000100000100000100000001000001000000000001000100000101000"
split = s.split(".")
joinsplit = "".join(split)
position = len(split[1]) if len(split) > 1 else 0
divisor = base ** position
base10 = Decimal(int(joinsplit, base=base) / divisor)
print(base10)
python math binary decimal radix
2个回答
1
投票

尝试

base10 = Decimal(int(joinsplit, base=base)) / Decimal(divisor)

您需要使用

Decimal
包来进行划分。


1
投票

或者,只使用整数。处理“.”后的k位作为 int 就像将它们移到“.”前面,所以你得到的值乘以 2^k。将其乘以 5^k 就等于乘以 10^k。打印出 k 个十进制数字并在前面加上“0”。你就得到了 s 的完整且精确的十进制值:

s = "0.0110101000101000101000100000101000001000101000100000100000101000001000101000001000100000100000001000101000101000100000000000001000100000101000000000101000001000001000100000100000101000000000101000101000000000001000000000001000101000100000101000000000100000100000100000101000001000101000000000100000000000001000101000100000000000001000001000000000101000100000100000001000001000001000100000100000001000100000001000000000101000000000101000001000100000100000001000101000100000000000100000001000100000001000100000100000000000101000000000000000001000001000000000100000100000101000001000000000100000100000101000001000001000101000000000001000000000101000100000100000101000000000001000100000100000001000000000100000001000000000100000001000001000001000100000001000001000100000001000100000000000001000000000100000000000101000000000101000101000000000100000000000001000101000100000000000001000101000100000000000000000001000100000001000000000100000001000100000100000100000000000001000100000100000100000001000001000000000001000100000101000"

s = s[2:]
k = len(s)
print(f'0.{int(s, 2) * 5**k :0{k}}')

输出(在线尝试!):

0.4146825098511116602481096221543077083657742381379169778682454144886409606193573341962900484284757779396161593520829859578357499784530220099041208146500339589937019741191862856155792371916372514881610710734284324802180169798568151342467947492439027788203115377831806629878700354471810730031528229365865717011958298527013917947575814542670688598836845005741967909097059012651346935948713174882002338651383968278639060580547694400606775567007462220308218404725893980244051813387031256338228470186575179444181158712845432952206569239552056223657281232230948558722153467802070765239806635595635256623658097764956981835991775930729107487361716646010010587982471669760872525696926694804362426551071075418172042158356715710211009002446239549475692248093519589690216864505247790045313739565691930382391014893277786456455001924946926654421862064185906002093179166469799727236169453540031938273217425197819335947742929218937243069819532429021211529270114967553537797300556385950007153595752752706093957613120437599718570709228515625000
© www.soinside.com 2019 - 2024. All rights reserved.