jrara
jrara

Reputation: 16981

How to print 1000 decimals places of pi value?

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?

Upvotes: 17

Views: 11976

Answers (7)

P L Patodia
P L Patodia

Reputation: 166

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.

Upvotes: 3

G. Grothendieck
G. Grothendieck

Reputation: 269371

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"

Upvotes: 12

user85109
user85109

Reputation:

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

Upvotes: 5

Dan Piponi
Dan Piponi

Reputation: 8116

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.

Upvotes: 0

Henry
Henry

Reputation: 6784

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"

Upvotes: 11

David Heffernan
David Heffernan

Reputation: 612794

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.

Upvotes: 5

malkia
malkia

Reputation: 1387

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

   print(pi, digits=10)

Upvotes: -1

Related Questions