[過去ログ] 分からない問題はここに書いてね449 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
934(2): 132人目の素数さん [sage] 2018/12/26(水) 19:27:06.11 ID:h3fhKKPg(1/2) AAS
ある計算機があって、2つの有効数字10桁の入力に対して、1秒で加減乗除のどれかを有効数字10桁で計算出来るとします。同じ計算機で2数の大小比較も1秒で出来ることにします。
この計算機を複数並べて、配線で繋ぎ、
入力 x(-100<x<100,有効数字10桁) に対し指数関数の計算値e^xを有効数字10桁精度で出力させるようにしたいです。
計算機間の配線を通る時間や-1を掛ける時間は無視できます。
有効数字10桁で、計算時間を最短にするにはどういう配置がいいのでしょうか?
なお、計算機の個数はいくらでも良いですが条件を満たす最小な個数が望ましいです。
ちなみにe^100=2.68*10^43です。
有効数字と桁数を混同させないようにお願いします。
また、平均計算時間が速くなれば何でも良いです。
|x|<10で結構速く、x=100付近では遅くなっても構わない、という感じです。
さらにeは既知として、xは全列挙しません。
私が考えているのは指数部分を2進数化、Pade近似と2進木とマクローリン展開などです。
936: 132人目の素数さん [sage] 2018/12/26(水) 19:57:34.54 ID:h3fhKKPg(2/2) AAS
>>934
十進数xは小数部分8or 9桁の数です。
最後のe^x出力は誤差の累積考えて有効数字8桁でも良いです。
943(1): 132人目の素数さん [sage] 2018/12/27(木) 07:04:09.42 ID:vQyXIR+c(1) AAS
>>934
この場合の近似式は、指数関数のよく知られた級数:
e^x=1+x+x^2/2!+x^3/3!+…
やそのPade近似を使うよりもtanhの連分数:
(e^(2x)-1)/(e^(2x)+1)=x/(1+x^2/(3+x^2/(5+x^2/(7+x^2/(9+…)))))
を通分しないでそのまま計算する方がはるかに速くなります。
この連分数を6項で打ち切ればe^(-2)からe^(2)までを10桁の精度で計算できます。
(ただし割り算の苦手な普通の計算機ではこの方法は使いません)
区間縮小の基本は加法定理e^(x+y)=e^x*e^yを利用して、
xからある数(整数or log2,log10の整数倍)を引いて近似後に補正する方法です。
xを1/2倍して近似後に2乗する方法などは精度が落ちるので要注意です。
区間分割・縮小方法はlibcなどの具体的なコードを見た方が分かりやすいと思います。
大型計算機などに実装されている極端な例では、
細かい区間に分割された低い次数(2次か3次)の近似式を大量に(数百から数千)
持っていて、xのビットパターンから近似式の番号(整数値)を割り出し参照するという
方法をとっています。この方法だとメモリの許す限りの高速化ができます。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.183s*