如何打印出π的1000位小数?

17

我想使用R打印出例如1000、2000或15000位小数的π值?

目前我只能获取六位小数

> pi
[1] 3.141593
如何实现这个?
7个回答

12

使用 R 包bc(该链接提供,未包含在 CRAN 上):

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

2
+1 但也许更容易的方法是将数字复制/粘贴到字符串变量中!! ;-) - David Heffernan
1
@David,bc 生成 c("bc", "character") 类的对象,可以进一步操作。例如:options(bc.scale = 1000); one <- bc(1); Pi <- 4*atan(one); Pi/2。这与复制粘贴到字符变量中不等同。 - G. Grothendieck
很不错。我刚刚在输出中看到了字符串表示形式。我不知道R可以对基本算术运算符进行操作重载。这种功能一直都可用吗? - David Heffernan
@David,是的,“ts”系列,“Date”对象和其他类都使用了这个功能。 - G. Grothendieck
我从Google Code网站下载了.bc_1.05.zip文件。但是当我运行“run install.packages(" bc_1.05.zip",repos=NULL)”时,出现错误:警告:install.packages无法打开压缩文件'bc/DESCRIPTION',可能的原因是“没有这样的文件或目录”。安装失败并提示错误:“无法打开连接”。有什么建议吗? - timothy.s.lau

11

如果您不想自己进行计算,那么可以查找该数字。例如:

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"

5

R使用底层系统的浮点数据类型,通常有大约16个有效小数位。

如果您想要很多位数的圆周率,则需要将它们保存在字符数组或类似结构中。您无法将超过少数几个数字放入R数字值中。

如果您希望自己生成这些数字,则可以通过网络搜索找到许多概述执行此任务的算法的文章。或者您可以找到许多网站,仅列出了数十亿位的圆周率。


5
你不能打印你不知道的数字。如果R只携带16个十进制数字(典型的IEEE双精度),那么打印1000个数字将生成984个无意义的数字。
你可以使用其中一个级数或其他方法这里看到(例如,Brent-Salamin算法)来生成你想要的任意数量的数字,但是需要使用长精度算术工具。作为测试,我最近使用该方法仅进行了几次迭代就计算出了超过250,000位的π。

3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379962749567351885752724891227938183011949129833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132000568127145263560827785771342757789609173637178721468440901224953430146549585371050792279689258923542019956112129021960864034418159813629774771309960518707211349999998372978049951059731732816096318595024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303598253490428755468731159562863882353787593751957781857780532171226806613001927876611195909216420198 ...


3
很有可能。请下载Rmpfr包。 然后使用以下命令:
library(Rmpfr)

Const("pi", 3333)

它将会给出正确到小数点后1000位的π值。


0

使用的最简单算法之一可能是水龙头算法。我不知道R,但它可能足够好以实现这里的想法。


0
不确定你能否打印1000或2000,但是通过这种方式,你可以指定要打印多少位数字:
   print(pi, digits=10)

3
是的,这会生成一个错误:> print(pi, digits=1000) 在print.default(pi, digits = 1000)中出现了错误:无效的“digits”参数。 - jrara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接