在R语言中使用包'Brobdingnag'

时间:2011-04-28 17:39:13

标签: r

在设置

后,我遇到了关于Brobdingnag软件包使用的问题
a2 <- as.brob(0.1)^1000, 

a2 = exp(-2302.6)

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

a1 = exp(-1842.1)

使用sum(a1,a2)和sum(a2,a1)得到不同的结果 - 每次结果等于给sum函数的第一个参数。似乎总和并没有被Brobdingang包覆盖,即使它应该是?或者也许我做错了什么?

我也问这个问题是对我写的另一个问题的回复,请参阅here

[编辑:包裹作者的回答]

嗨丹

这绝对是包中的错误; 感谢您的报告! 不幸的是,纠正它将需要我相当多 时间。

与此同时,请在下面找到通常的R惯用语 计算两个经纪人的总和:

> 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 个答案:

答案 0 :(得分:2)

我可以使用以下代码重现您的问题。答案可能是+而不是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)