4

Science Fair プロジェクトのために、プログラミング言語の選択がパフォーマンスにどのように影響するかをテストしています。私は、Java、Ruby、Perl、および Python でスクリプトを作成して、Pi を小数点以下 1 億位まで計算することによってこれを行っています。私は Perl に最も精通しているので、Perl から始めます。ただし、これは興味深い問題をもたらします。Perl で Pi を 1 億の桁に丸める必要がありますが、私が見る限り、Perl にはこの状況に適した丸め方法がありません。みたいなものしかない

use Math::Round;
$rounded = nearest(0.1, $numb);

私はコンピューターの前に座って 1 億個のゼロを入力したくないので、これはちょっとした問題です。私の知る限り、sprintf と printf はそれほど優れているわけではありません。さらに、彼らは厄介な半分から偶数のものを持っています。誰でも助けてもらえますか?

PS 誰かにとって重要な場合は、チュドノフスキー式を使用する予定です。

4

3 に答える 3

5

あなたが求めていることをネイティブに実行できるプログラミング言語はないと思います。Math::BigRat (デフォルトは 40 桁) や Math::Bignum のような bignum ライブラリでさえ、1 億桁を処理することはできません。

それを実現するには、独自のカスタム方法を作成して、そのような大きな数を表現し、それらを丸める方法を作成する必要があります。

于 2012-12-19T06:21:16.513 に答える
3

問題を別の方法で考えてください。1 億 (1E8) 桁に丸める必要がありますが、1E8 桁すべてを一度に処理する必要はありません。

その代わり、

  1. Chudnovsky Formula を使用して、1E8 +1 桁を計算します。
  2. 数字を文字列(メモリがある場合)またはファイルに保存します。
  3. 最後の n (8 または 2 などの小さなもの) 桁を選択します。
  4. それらがすべて9ではない場合、n-1桁に丸められます。
  5. ある場合は、(n-1) * 0 桁に変換します。次に、末尾から次の n 桁を読み取り、4 と 5 を繰り返します。

ただし、目標が 1E8 桁の Pi を生成することによって言語の相対的なパフォーマンスをテストすることである場合、その数値を四捨五入するというかなり人為的な制約にわざわざ注目する必要はありません。同じアルゴリズムを使用すると、どの言語でも同じ結果が得られるはずです。とにかく、丸められた数値を生成する可能性は 50% です。

于 2012-12-19T10:56:50.433 に答える
2

これは一歩近づいています (ただし、1 億個のゼロを処理できるかどうかはテストしていません)。これらの種類の数値を処理するには、 bignumを使用する必要があります。

use bignum;
use Math::Round;

$rounded = nearest(1e-100_000_001, $numb);

また、精度パラメーターを持つbignum独自のpi関数があります。

$rounded = bignum::bpi(100_000_001);
于 2012-12-19T06:16:39.267 に答える