-->

How to print 1000 decimals places of pi value?

2019-03-24 15:29发布

问题:

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?

回答1:

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"


回答2:

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"


回答3:

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.



回答4:

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 ...



回答5:

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.



回答6:

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

   print(pi, digits=10)


回答7:

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.



标签: math r pi