Предотвращение R от округления - PullRequest
3 голосов
/ 12 июля 2011

Как предотвратить округление R?

Например,

> a<-893893084082902
> a
[1] 8.93893e+14

Я теряю много информации там. Я попытался signif (), и он, кажется, не делает то, что я хочу.

Заранее спасибо!

(Это произошло в результате того, что мой студент попытался определить, сколько времени потребуется для подсчета до квадриллиона при числе в секунду)

Ответы [ 3 ]

15 голосов
/ 12 июля 2011

Это не округление; это просто формат по умолчанию для печати больших (или маленьких) чисел.

a <- 893893084082902
> sprintf("%f",a)
[1] "893893084082902.000000"

См. «Цифры» в разделе ?options для глобального решения.

6 голосов
/ 12 июля 2011

Чтобы обойти целочисленные ограничения R, вы можете использовать пакет gmp для R: http://cran.r -project.org / web / packages / gmp / index.html

Я обнаружил этот пакет, когда играл с задачами Project Euler и нуждался в факторизации. Но он также предоставляет функции для больших целых чисел.

EDIT: Похоже, что этот вопрос был не столько о больших целых числах, сколько о округлении. Но для следующего космического путешественника, который придет сюда, вот пример большой целочисленной математики с gmp:

Попробуйте умножить 1e500 * 1e500, используя базу R:

> 1e500 * 1e500
[1] Inf

Итак, чтобы сделать то же самое с gmp, вам сначала нужно создать большой целочисленный объект, который он вызывает bigz. Если вы попытаетесь передать as.bigz() целое или двойное число действительно большого числа, это не сработает, потому что вся причина, по которой мы используем gmp, заключается в том, что R не может содержать такое большое число. Таким образом, мы передаем ему строку. Поэтому следующий код начинается с манипуляции со строками для создания большой строки:

library(gmp)
o <- paste(rep("0", 500), collapse="")
a <- as.bigz(paste("1", o, sep=""))
mul.bigz(a, a)

Вы можете считать нули, если вы так склонны.

3 голосов
/ 12 июля 2011

Это покажет вам больше цифр для всех чисел:

options(digits=15)

Или, если хотите, просто за a:

print(a, digits=15)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...