確かではありませんが、アイデンティティn m = exp10(m log10(n))= exp(q(m log(n)/ q))ここで、q = log(10)が頭に浮かび、最初のK exp10(x)の桁= exp10(frac(x))の最初のK桁ここで、frac(x)=xの小数部分=x-floor(x)。
より明確に言うと、n mの最初のK桁は、仮数の最初のK桁= exp(frac(m log(n)/ q)* q)です。ここで、q = log(10)です。
または、この会計演習をさらに進めて、exp((frac(m log(n)/ q)-0.5)* q)* sqrt(10)を使用することもできます。これも同じ仮数(+したがって最初のKは同じ)です。 exp()関数の引数が0を中心に(および+/- 0.5 log 10 = 1.151の間に)配置されるように、スピーディーな収束を実現します。
(いくつかの例:2 100の最初の5桁が必要だとします。これは、exp((frac(100 log(2)/ q)-0.5)* q)* sqrt(10)=1.267650600228226の最初の5桁に相当します。 2100の実際の値はMATLABによると1.267650600228229e+030であり、bignumライブラリは便利ではありません。21,000,000,000の仮数の場合、4.612976044195602を取得しますが、実際にチェックする方法はありません。誰かがすでにハードワークを行っているMersenneプライムのページ; 220996011 -1 = 125,976,895,450 ...そして私の式はMATLABで計算された1.259768950493908を与え、9桁目以降は失敗します。)
テイラー級数( n mではなくexpとlog )をエラー範囲とともに使用し、エラー範囲が最初のK桁を下回るまで項を追加し続ける場合があります。(通常、関数近似にテイラー級数を使用しません-それらの誤差は、目的の間隔ではなく、単一の点の周りで最も正確になるように最適化されます-しかし、数学的に単純であるという利点があります。項を追加するだけで、精度を任意の精度に上げることができます)
対数については、お気に入りの近似値を使用します。