我想使用R打印出例如1000、2000或15000位小数的π值?
目前我只能获取六位小数
> 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个有效小数位。
如果您想要很多位数的圆周率,则需要将它们保存在字符数组或类似结构中。您无法将超过少数几个数字放入R数字值中。
如果您希望自己生成这些数字,则可以通过网络搜索找到许多概述执行此任务的算法的文章。或者您可以找到许多网站,仅列出了数十亿位的圆周率。
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379962749567351885752724891227938183011949129833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132000568127145263560827785771342757789609173637178721468440901224953430146549585371050792279689258923542019956112129021960864034418159813629774771309960518707211349999998372978049951059731732816096318595024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303598253490428755468731159562863882353787593751957781857780532171226806613001927876611195909216420198 ...
library(Rmpfr)
Const("pi", 3333)
它将会给出正确到小数点后1000位的π值。
print(pi, digits=10)
bc
生成c("bc", "character")
类的对象,可以进一步操作。例如:options(bc.scale = 1000); one <- bc(1); Pi <- 4*atan(one); Pi/2
。这与复制粘贴到字符变量中不等同。 - G. Grothendieck