1を9801で割った計算結果 with Python

Pythonロゴ

この計算結果はミラクルな数が出るんですね〜、凄いですね。

1 / 9801 = ??

循環小数ということで、とりあえず小数以下250位までで設定した計算結果は以下のとおりです。

0.0001020304050607080910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697990001020304050607080910111213141516171819202122232425263

綺麗に並んでますね〜。しかも98という数値は出てこないという・・・

見やすくするために2桁ずつに分けて並べてみました。小数以下の数値で、後ろのカッコは通番になります。

00 [1]
01 [2]
02 [3]
03 [4]
04 [5]
05 [6]
06 [7]
07 [8]
08 [9]
09 [10]
10 [11]
11 [12]
12 [13]
13 [14]
14 [15]
15 [16]
16 [17]
17 [18]
18 [19]
19 [20]
20 [21]
21 [22]
22 [23]
23 [24]
24 [25]
25 [26]
26 [27]
27 [28]
28 [29]
29 [30]
30 [31]
31 [32]
32 [33]
33 [34]
34 [35]
35 [36]
36 [37]
37 [38]
38 [39]
39 [40]
40 [41]
41 [42]
42 [43]
43 [44]
44 [45]
45 [46]
46 [47]
47 [48]
48 [49]
49 [50]
50 [51]
51 [52]
52 [53]
53 [54]
54 [55]
55 [56]
56 [57]
57 [58]
58 [59]
59 [60]
60 [61]
61 [62]
62 [63]
63 [64]
64 [65]
65 [66]
66 [67]
67 [68]
68 [69]
69 [70]
70 [71]
71 [72]
72 [73]
73 [74]
74 [75]
75 [76]
76 [77]
77 [78]
78 [79]
79 [80]
80 [81]
81 [82]
82 [83]
83 [84]
84 [85]
85 [86]
86 [87]
87 [88]
88 [89]
89 [90]
90 [91]
91 [92]
92 [93]
93 [94]
94 [95]
95 [96]
96 [97]
97 [98]
99 [99]  # 98は無し
00 [100]
01 [101]
02 [102]
03 [103]
04 [104]
05 [105]
06 [106]
07 [107]
08 [108]
09 [109]
10 [110]
11 [111]
12 [112]
13 [113]
14 [114]
15 [115]
16 [116]
17 [117]
18 [118]
19 [119]
20 [120]
21 [121]
22 [122]
23 [123]
24 [124]
25 [125]
26 [126]
3 [127]

ちなみに次の循環も同じ様になってるのもまた凄いなって思った次第です。

計算と出力するプログラムはPythonで書きました。

from decimal import Decimal
from decimal import getcontext

getcontext().prec = 250

_miracle_number = Decimal('1') / Decimal('9801')
miracle_number = f"{_miracle_number}"

_decimal = miracle_number.split('.')[1]  # 小数点で分けて、小数部のみ抜き出す
max_string = len(_decimal)
step_num = 2  # 2文字ずつの分割
for i in range(0, max_string, step_num):
    print(f"{_decimal[i:i+step_num]} [{int(i/step_num)+1}]")

ChatGPTに聞いてみたところ

ちょっと流行りに乗っかってみます。

「1/9801」の計算結果は、0.000102030405060708091011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798です。

このように、1から98までの連続した数字を順番に並べたものが小数点以下の数値として表されます。

計算結果に98が出てくるみたいですね・・・

パソコンの計算精度

今まではここまでの桁数での精度は求められることがなかったので、単に割り算して計算してましたが、それだと今回求められている結果は出てこないみたいですね。

_miracle_number = 1/9801
f"{_miracle_number:.100f}"
# '0.0001020304050607080898274703351091829972574487328529357910156250000000000000000000000000000000000000'

途中で値に変化が出てきました。

勉強になったこと

  • Decimal, Fraction
  • math.modf()で整数部と小数部に分けたタプルを得ることが出来る

以上になります。またお会いしましょう

鹿児島県の出水市という所に住んでいまして、インターネット周辺で色々活動して行きたいと思ってるところです。 Webサイト作ったり、サーバ設定したり、プログラムしたりしている、釣りと木工好きなMacユーザです。 今はデータサイエンスに興味を持って競馬AI予想を頑張ってます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください