たとえば、Rを使用して円周率の値の1000または2000または15000の小数を印刷したいですか?
今私は6つしか得られません
> pi
[1] 3.141593
これを達成する方法は?
R パッケージbcを使用する(CRAN ではなく、前述のリンクから入手できます):
> library(bc)
> bc("4 * a(1)", scale = 1000)
[1] "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201988"
自分で計算したくない場合は、数値を調べることができます。例えば
pie <- read.csv("http://oeis.org/A000796/b000796.txt", header=FALSE, sep=" ")
dig <- 75 # up to 20000 digits
pistring <- paste(c(pie[1,]$V2, ".", head(pie[-1,], dig-1)$V2), collapse="")
を生成します
> pistring
[1] "3.14159265358979323846264338327950288419716939937510582097494459230781640628"
知らない数字を印刷することはできません。R が 16 桁の 10 進数 (典型的な IEEE double) しか持たない場合、1000 桁を出力すると 984 桁の無意味な数字が生成されます。
長精度演算用のツールを使用する場合は、一連の方法またはここに示す他の方法(ブレントサラミン アルゴリズムなど) を使用して、必要な数の桁を生成できます。テストとして、私は最近、数回の反復でその方法を使用して 250,000 桁をはるかに超える pi を計算しました。
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675238467481846766940513200056812714526356082778577134275778960917363717872146844090122495343014654958537105079227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859502445945534690830264252230825334468503526193118817101000313...
R は、通常、約 16 の有効 10 進数を持つ、基になるシステムの浮動小数点データ型で動作します。
円周率の桁数が多数必要な場合は、そのような構造の文字配列にそれらを保持する必要があります。R の数値に一握り以上の値を入れることはできません。
自分で数字を生成したい場合は、ウェブ検索で、その仕事をするためのアルゴリズムの概要を説明している多くの記事が見つかります。または、数十億桁の pi をリストするだけのサイトがたくさんあります。
それは非常に可能です。パッケージ Rmpfr をダウンロードしてください。
次に、以下を使用します。
library(Rmpfr)
Const("pi", 3333)
小数点以下1000桁まで正しいpiの値を与えます。
1000または2000のどちらを印刷できるかはわかりませんが、この方法で、印刷する桁数を指定できます。
print(pi, digits=10)
最も簡単に使用できるアルゴリズムの 1 つは、おそらくスピゴットです。わかりませんが、ここR
でアイデアを実装するにはおそらく十分です。