Как напечатать 1000 знаков после запятой значения пи?

Я хотел бы напечатать, например. 1000 или 2000 или 15000 десятичных знаков числа пи с использованием R?

Теперь я получаю только шесть

> pi
[1] 3.141593

Как этого добиться?


person jrara    schedule 04.06.2011    source источник


Ответы (7)


Использование пакета R bc (который доступен по приведенной выше ссылке, а не в CRAN) :

> library(bc)
> bc("4 * a(1)", scale = 1000)
[1] "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201988"
person G. Grothendieck    schedule 04.06.2011
comment
+1 А может проще просто скопировать/вставить числа в строковую переменную!! ;-) - person David Heffernan; 04.06.2011
comment
@David, bc создает объекты класса c("bc", "character"), которыми можно манипулировать в дальнейшем. например options(bc.scale = 1000); one <- bc(1); Pi <- 4*atan(one); Pi/2 . Это не эквивалентно копированию и вставке в символьную переменную. - person G. Grothendieck; 04.06.2011
comment
Это аккуратно. Я только что видел строковое представление на выходе. Я не знал, что R может выполнять перегрузку основных арифметических операций. Всегда ли была доступна эта возможность? - person David Heffernan; 04.06.2011
comment
@David, да, серия ts, объекты Date и другие классы используют это средство. - person G. Grothendieck; 05.06.2011
comment
Я скачал ZIP-файл с сайта Google Code. Но когда я run install.packages("bc_1.05.zip", repos = NULL) получаю: Предупреждение в install.packages: невозможно открыть сжатый файл «bc/DESCRIPTION», вероятная причина «Нет такого файла или каталога» Ошибка в install.packages: невозможно открыть соединение Есть предложения? - person timothy.s.lau; 22.10.2014

Если вы не хотите делать расчет самостоятельно, вы можете посмотреть номер. Например

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"
person Henry    schedule 04.06.2011

R работает с типом данных с плавающей запятой базовой системы, который обычно имеет около 16 значащих десятичных цифр.

Если вам нужно много цифр числа пи, вам нужно будет хранить их в массиве символов какой-либо такой конструкции. Вы просто не можете вместить больше, чем горстку в числовое значение R.

Если вы хотите сгенерировать цифры самостоятельно, поиск в Интернете покажет множество статей с описанием алгоритмов для выполнения этой работы. Или вы можете найти множество сайтов, которые просто перечисляют пи до миллиона цифр.

person David Heffernan    schedule 04.06.2011

Вы не можете печатать цифры, которых не знаете. Если R содержит только 16 десятичных цифр (типичный двойник IEEE), то при печати 1000 цифр будет сгенерировано 984 бессмысленных цифры.

Вы можете использовать одну из серий или другие методы, описанные здесь (например, алгоритм Брента-Саламина), чтобы сгенерировать как можно больше цифр. вы хотите, ЕСЛИ вы используете инструмент для арифметики с большой точностью. В качестве теста я недавно вычислил более 250 000 цифр числа пи с помощью этого метода всего за несколько итераций.

3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379962749567351885752724891227938183011949129833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132000568127145263560827785771342757789609173637178721468440901224953430146549585371050792279689258923542019956112129021960864034418159813629774771309960518707211349999998372978049951059731732816096318595024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303598253490428755468731159562863882353787593751957781857780532171226806613001927876611195909216420198 ...

person Community    schedule 04.06.2011

Это очень возможно. Загрузите пакет Rmpfr.

Затем используйте следующее:

library(Rmpfr)

Const("pi", 3333)

Это даст значение числа пи с точностью до 1000 знаков после запятой.

person P L Patodia    schedule 10.08.2015

Не уверен, можете ли вы напечатать 1000 или 2000, но таким образом вы можете указать, сколько цифр печатается:

   print(pi, digits=10)
person malkia    schedule 04.06.2011
comment
Да, это вызывает ошибку: › print(pi, digits=1000) Ошибка в print.default(pi, digits = 1000): неверный аргумент 'digits' - person jrara; 04.06.2011

Вероятно, одним из самых простых алгоритмов является кран. Я не знаю, R но, вероятно, этого достаточно, чтобы реализовать идеи здесь< /а>.

person sigfpe    schedule 04.06.2011