Использование пакета 'Brobdingnag' на языке R - PullRequest
5 голосов
/ 28 апреля 2011

У меня проблемы с использованием пакета Brobdingnag - после установки

a2 <- as.brob(0.1)^1000, 

a2 = exp (-2302.6)

a1 <- as.brob(0.1)^800, 

a1 = exp (-1842.1)

Я получаю разные результаты за использование суммы (a1, a2) и суммы (a2, a1) - каждый раз, когда результат равен первому аргументу, данному функции суммы. Кажется, что, возможно, сумма не переопределяется пакетом Brobdingang, даже если она должна? Или, может, я что-то не так делаю?

Я задал этот вопрос также в качестве ответа на другой вопрос, который я написал, см. здесь

[РЕДАКТИРОВАТЬ: Ответ от автора пакета]

Привет, Дэн

Это определенно ошибка в пакете; Спасибо за доклад! К сожалению, исправление этого потребует от меня значительных время.

А пока, пожалуйста, найдите ниже обычную формулировку для Подсчет суммы двух браков:

> a1 <- as.brob(0.1)^800
> a2 <- as.brob(0.1)^1000
> a1+a2


> a1 <- as.brob(0.1)^800
> a2 <- as.brob(0.1)^1000


> a1+a2
[1] +exp(-1842.1)
> a2+a1
[1] +exp(-1842.1)

> sum(cbrob(a1,a2))
[1] +exp(-1842.1)
> sum(cbrob(a2,a1))
[1] +exp(-1842.1)
> 

1 Ответ

2 голосов
/ 29 апреля 2011

Я могу воспроизвести вашу проблему с помощью следующего кода. Один ответ может быть на + вместо sum. Добавлено: Еще одним вариантом было бы иметь данные в векторе, прежде чем делать сумму

> library(Brobdingnag)
> (a1 <- as.brob(0.1)^800) 
[1] +exp(-1842.1)
> (a2 <- as.brob(0.1)^1000)
[1] +exp(-2302.6)
>
> a1 + a2
[1] +exp(-1842.1)
> a2 + a1
[1] +exp(-1842.1)
>
> sum(a1, a2)
[1] +exp(-1842.1)
> sum(a2, a1)
[1] +exp(-2302.6)
> 
> sum(as.brob(0.1)^c(1000,800))
[1] +exp(-1842.1)
> sum(as.brob(0.1)^c(800,1000))
[1] +exp(-1842.1)

Кажется, вы не можете использовать sum(,) таким образом. Вот некоторые похожие странные результаты с более практичными числами

> as.brob(0.1) + as.brob(1)           # OK, gives exp(ln(1.1))
[1] +exp(0.09531)     
> as.brob(1) + as.brob(0.1)           # OK, gives exp(ln(1.1))
[1] +exp(0.09531)
> sum(as.brob(c(0.1, 1)))             # OK, gives exp(ln(1.1))
[1] +exp(0.09531)
> sum(as.brob(c(1, 0.1)))             # OK, gives exp(ln(1.1))
[1] +exp(0.09531)
>
> sum(as.brob(0.1), as.brob(1))       # not OK, gives first term exp(ln(0.1))
[1] +exp(-2.3026)
> sum(as.brob(1), as.brob(0.1))       # not OK, gives first term exp(ln(1))
[1] +exp(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...