16

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

现在我只得到六个

> pi
[1] 3.141593

如何做到这一点?

4

7 回答 7

12

使用 R 包bc(可在上述链接中获得,而不是在 CRAN 上):

> library(bc)
> bc("4 * a(1)", scale = 1000)
[1] "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201988"
于 2011-06-04T17:07:21.107 回答
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"
于 2011-06-04T10:58:05.500 回答
5

R 与底层系统的浮点数据类型一起使用,该数据类型通常具有大约 16 个有效十进制数字。

如果您想要很多 pi 数字,那么您需要将它们保存在某个此类结构的字符数组中。您根本无法将少数几个放入 R 数值中。

如果您希望自己生成数字,那么网络搜索将显示许多概述算法的文章来完成这项工作。或者,您可以找到许多仅将 pi 列为数以万计的数字的网站。

于 2011-06-04T05:39:22.187 回答
5

你不能打印你不知道的数字。如果 R 只携带 16 个十进制数字(典型的 IEEE 双精度位),那么打印 1000 个数字将生成 984 个无意义的数字。

如果您使用用于长精度算术的工具,您可以使用此处看到的系列或其他方法之一(例如,Brent-Salamin 算法)来生成您想要的任意数量的数字。作为一项测试,我最近使用该方法在几次迭代中计算了超过 250,000 位的圆周率。

3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379962749567351885752724891227938183011949129833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132000568127145263560827785771342757789609173637178721468440901224953430146549585371050792279689258923542019956112129021960864034418159813629774771309960518707211349999998372978049951059731732816096318595024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303598253490428755468731159562863882353787593751957781857780532171226806613001902787620198 ......

于 2011-06-04T14:58:32.403 回答
3

这是很有可能的。请下载包Rmpfr。

然后,使用以下内容:

library(Rmpfr)

Const("pi", 3333)

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

于 2015-08-10T17:25:50.387 回答
0

不确定是否可以打印 1000 或 2000,但这样可以指定打印的位数:

   print(pi, digits=10)
于 2011-06-04T05:36:00.997 回答
0

最容易使用的算法之一可能是龙头。我不知道,但在这里R实现这些想法可能已经足够好了。

于 2011-06-04T13:57:10.293 回答