質問編集履歴

3

Python+mpmath+gmpy2でdps = 100の場合の値を掲載

2022/11/11 13:26

投稿

GAMEKUN
GAMEKUN

スコア3

test CHANGED
File without changes
test CHANGED
@@ -89,3 +89,23 @@
89
89
  Python3.10.8(VSCode)やGoogleColabではdecimalでは桁数の桁数が18桁までなので計算できません。
90
90
  mpmath+gmpy2でも計算してみましたが、dpsが100000まで程度では値の先頭の方、桁数ともに誤差が出て、正しい値がはっきりしません。dpsを1000000にしたら結果がコンソールからはみ出て値の先頭の方が確認できませんでした。また桁数の値がPyPy 2の場合と相違しました。
91
91
 
92
+ Python+mpmath+gmpy2でdps = 100の場合
93
+ ```Python+mpmath+gmpy2
94
+ >>> from mpmath import *
95
+ >>> mp.dps = 100
96
+ >>> (mpf(2)**((mpf(2)**(mpf(519)-mpf(1)))-mpf(1)))*(mpf(2)-(mpf(2)**mpf(-10889035741470030830827987437816582766072)))
97
+ mpf('1.738741545572851906007851776954032208812769161318139539364439351610202064301416872947694837078743209829e+258313751232903212140244172706732768962283773495639777019746650509389263410185892774365178070439343470463409842392677007886631633129570799399839688363235724')
98
+
99
+ ```
100
+
101
+ Python+mpmath+gmpy2でdps = 1000の場合
102
+ ```Python+mpmath+gmpy2
103
+ >>> from mpmath import *
104
+ >>> mp.dps = 1000
105
+ >>> (mpf(2)**((mpf(2)**(mpf(519)-mpf(1)))-mpf(1)))*(mpf(2)-(mpf(2)**mpf(-10889035741470030830827987437816582766072)))
106
+ mpf('8.693707727864259530039258884770161044063845806590697696822196758051010321507084364738474185393716049143428269592664416299506985821607020224451757384081772736694085185953261476092256949585533792382065398255366123346945632455365114496387996812763405070547543636242943582509351695964148881539829278098776930760208512040241459131050857534909186967359333680690876095696574392978402776982242910476888722508873652625966431429199319419162400479389670802250530127697191701685799046457340098916039874145467184794888167675164383011930352737537848617171247730837116311290657456022018847615163555388577340388773985857825851948069000990304471913408925992764573057043682223975592937342873908916124950471446485565735968453329290029508092694774450347618896698260229705612494938176332564765641437441682011291579724298194210916645951676005349723798753644015878111182523064775510486058470694029884469024542601898715230728898371787332915920789625287283111060329377477628692626381070127590574256433161812199884160657947907722e+258313751232903212140244172706732768962283773495639777019746650509389263410185892774365178070439343470463409842392677007886631633129570799399839688363235723')
107
+
108
+ ```
109
+
110
+
111
+

2

桁数の間違いを訂正

2022/11/11 05:55

投稿

GAMEKUN
GAMEKUN

スコア3

test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
  (2^((2^(519-1))-1))*(2-(2^-10889035741470030830827987437816582766072))
9
9
  を計算してみましたが、途中で誤差が出て正しい値が出力されているのか分かりません。
10
10
  正しい値を知りたいです。先頭100桁とE+ほにゃららで構いません。
11
- ちなみに桁数が10^155ありますので、Python3.10.8やGoogleColabのdecimalでは桁数の桁数が18桁までなので計算できません。
11
+ ちなみに桁数が10^156ありますので、Python3.10.8やGoogleColabのdecimalでは桁数の桁数が18桁までなので計算できません。
12
12
  ideoneのPyPy 2では桁数が10^10^5程度までは扱えるようです。(が、一部で誤差が出る。そのためにPython3では桁数制限がかかっていると思われる。)
13
13
  よろしくお願いいたします。
14
14
 

1

mpmathでのソースを追記

2022/11/11 05:51

投稿

GAMEKUN
GAMEKUN

スコア3

test CHANGED
File without changes
test CHANGED
@@ -76,6 +76,14 @@
76
76
 
77
77
  ```
78
78
 
79
+ ```Python+mpmath+gmpy2
80
+ #2^128倍精度
81
+ #(2^((2^(519-1))-1))*(2-(2^-10889035741470030830827987437816582766072))
82
+ from mpmath import *
83
+ mp.dps = 1000000
84
+ (mpf(2)**((mpf(2)**(mpf(519)-mpf(1)))-mpf(1)))*(mpf(2)-(mpf(2)**mpf(-10889035741470030830827987437816582766072)))
85
+
86
+ ```
79
87
  ### 試したこと
80
88
 
81
89
  Python3.10.8(VSCode)やGoogleColabではdecimalでは桁数の桁数が18桁までなので計算できません。