开发者

How to print 1000 decimals places of pi value?

开发者 https://www.devze.com 2023-03-10 21:05 出处:网络
I would like to print e.g. 1000 or 2000 or 15000 decimals of pi value using R? Now I 开发者_开发知识库get only six

I would like to print e.g. 1000 or 2000 or 15000 decimals of pi value using R?

Now I 开发者_开发知识库get only six

> pi
[1] 3.141593

How to achieve this?


Using the R package bc (which is available at the foregoing link, not on CRAN):

> library(bc)
> bc("4 * a(1)", scale = 1000)
[1] "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201988"


If you don't want to do the calculation yourself then you could look the number up. For example

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="")

would produce

> pistring
[1] "3.14159265358979323846264338327950288419716939937510582097494459230781640628"


R works with the underlying system's floating point data type which typically have around 16 significant decimal figures.

If you want lots of digits of pi then you'll need to hold them in a character array of some such construct. You simply can't fit more than a handful into an R numeric value.

If you wish to generate the digits yourself then a websearch will reveal many articles outlining algorithms to do the job. Or you can find plenty of sites that just list pi to a gazillion digits.


You can't print digits that you don't know. If R carries only 16 decimal digits (a typical IEEE double) then printing 1000 digits will generate 984 meaningless digits.

You can use one of the series or other methods seen here (e.g., the Brent-Salamin algorithm) to generate as many digits you want, IF you use a tool for long precision arithmetic. As a test, I recently computed well over 250,000 digits of pi with that method in only a few iterations.

3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379962749567351885752724891227938183011949129833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132000568127145263560827785771342757789609173637178721468440901224953430146549585371050792279689258923542019956112129021960864034418159813629774771309960518707211349999998372978049951059731732816096318595024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303598253490428755468731159562863882353787593751957781857780532171226806613001927876611195909216420198 ...


It is very much possible. Please download package Rmpfr.

Then, use following:

library(Rmpfr)

Const("pi", 3333)

It will give value of pi correct to 1000 decimal places.


Not sure whether you can print 1000 or 2000, but this way you can specify how many digits are printed:

   print(pi, digits=10)


One of the easiest algorithms to use is probably a spigot. I don't know R but it's probably good enough to implement the ideas here.

0

精彩评论

暂无评论...
验证码 换一张
取 消