2011-06-20 7 views
0

私はGMPライブラリを使用してPiプログラムを作成しています。これはPiの約7桁を計算します。問題は、小数点以下の桁数を保持するために必要なビット数を把握することができません。GMPによる任意精度の計算

+0

はたぶん、[このアルゴリズム](http://www.math.hmc.edu/funfacts/ffiles/20010.5.shtml)をチェックしてくださいすべての桁が必要です。 –

+4

あなたは数学をよく知りません。もっと簡単なものから始めましょう。汎用ライブラリを使用してPi桁の数兆を計算するには、多くの時間がかかります。 – Tobu

答えて

1

7桁の数字は、10 ^(7兆)の任意の数字のいずれかを表すことができます。

xビットは2^xの異なる番号を表すことができます。

だから、あなたが解決したい:

2^x = 10^7000000000000 

は、ログ・ベース-2の両側のを取る:私が得る

x = 7000000000000 * log2(10) 

log(a^b) = b * log(a)こと

x = log2(10^7000000000000) 

がリコール23253496664212ビット。私はちょうど安全のために1つまたは2つを追加します。しかし、それらを保持するペタバイトを見つけることを幸運。

もっと興味深いアルゴリズムが必要だろうと思っています。

+0

実際にはそれぞれのテラビットが...しかし、私は必要なビット数を知る必要がありました。私は答えを見つけることができませんでしたが、あなたは来て、答えだけでなく説明をしました!ブラボー、ブラボー! –

0

2^10 = 1024です。したがって、10ビットは3桁をわずかに上回ります。あなたが最後に訪れたコスコから1台のドライブに乗ることができる以上に、私は7兆桁の数字を書いているので、それは23兆ビット、つまり約3テラバイトのようなものになります。

あなたは誇張になるかもしれません。私は各操作のためにディスク全体を読み書きするI/O時間について疑問に思います。

(これを解決する数学的方法は、7兆桁の数字が約7兆のログベース10を持つため、対数を使用することです。既存のベース内の数値のログを探し、ベース2とベース10の間の短縮形では、10ビット== 3桁を使用します。これはそれほど間違いではないので、2のログベース10は、実際には。0.301など)

1

私は、応答の回答で書かれたものについては、単に正しい一つのことしたい:

リコールログ(A^B)は*ログを=(b)の

だけでなく、それは逆です:あなたがいない場合

log(a^b) = b * log(a) 
関連する問題