Π計算には"無限"のバイナリの精度クライアントまで、フルのC#
質問
これまでのように見えFabrice Bellardのベースを2つの方程式は
皮肉なことに、このままでBigReal型いています。います。.純4.0はBigInteger.
誰でもいウバージョンになっていますか?
解決
あなたはHaskellのバージョンを求めているので、ここにある紙イェジーKarczmarczukすることにより、「πを計算する世界で最も信頼性のない技術」と呼ばれます:
この論文では、非定型exercice中です 以下のために書かれた怠惰な機能のコーディング、 楽しさと命令。それを読み取ることができます そして誰が誰でも理解 プログラミング言語を理解します ハスケル。私たちは、実装する方法を示しています πのためのベイリー-Borwein-Ploue式 共同再帰的な、インクリメンタルな方法で これは、数字3、1、4、1を生成します 5、9。 。メモリまで 疲労困憊。これは、への道ではありません 誰かが多くを必要とする場合進めます 数字!私たちのコーディング戦略があります ひねくれと危険、そしてそれ 証明可能分解する。それはに基づいています のドメインを超える算術演算 数字の無限のシーケンス 拡張され、適切な画分を表します 整数ベースです。私たちはどのように表示され 操作:によって乗算、加算 整数などのような配列 右無限に委ね、 これは明らかに、すべての中で作業することはできません 理由は曖昧さの例。一部 深い哲学的帰結です 結論で論じています。
これは本当に効率的か、非常に実用的な方法で問題を解決していませんが、面白いと怠惰な無限の精度演算との問題のいくつかを示している。
他のヒント
を抜いてパイのための私のお気に入りのHaskellの栓はジェレミー・ギボンズから来ています:
pi = g(1,0,1,1,3,3) where
g(q,r,t,k,n,l) =
if 4*q+r-t<n*t
then n : g(10*q,10*(r-n*t),t,k,div(10*(3*q+r))t-10*n,l)
else g(q*k,(2*q+r)*l,t*l,k+1,div(q*(7*k+2)+r*l)(t*l),l+2)
その実装を正当化する数学的背景がで見つけることができます:
パイするの桁のためにスピゴットアルゴリズム
Wikipediaの詳細につく数値で近似pi こちらの.いるほか、一部のサンプルプ擬似コード
編集:について興味のある方はもちろんこのような数学的問題なく関連する実世界問題の解決には絶対に良い姿勢については、厚),訪問することができる オイラープロジェクトページ
例えば( DLR のベースの動的言語に大きな有理数を処理するためにそのような可能性が存在します IronPythonのを)。それとも、 P /起動するを通じて大きな実数の任意のポータブルC / C ++の実装を使用することができます。