计算R中的*整数*二项式系数

时间:2018-06-12 12:24:51

标签: r integer binomial-coefficients

n 中选择 k 对象的方式,即二项式系数 n!/(k!(nk)!) ,当 n k 是整数时,是一个整数。如何计算保证结果正确且整数类型? choose函数返回一个double,即使是整数参数:

> typeof(choose(4L, 2L))  
[1] "double"  

手动计算也是如此,例如 n -choose-2 = n(n-1)/ 2

typeof((4L * (4L - 1L)) / 2L)
[1] "double"  

当然我可以强制使用as.integer()的整数,但我对机器精度感到紧张:

> as.integer(3.999999999999999)
[1] 3
> as.integer(3.9999999999999999)
[1] 4

round()(使用默认的digits=0)舍入到最接近的整数,但返回double类型的值。如果我可以确定提供以双格式存储到as.integer(round(...))的整数保证舍入到正确的整数,从不被机器精度绊倒,那么as.integer(round(choose(n, k)))是可以接受的。是这样的吗?或者是否有choose()的替代方法将返回整数参数的整数?

1 个答案:

答案 0 :(得分:0)

一种方法是使用VeryLargeIntegers包。功能是:

binom(n,k)

例如Binom(1000,50)甚至Binom(10000000,50)

明智的做法是学习如何也制作非常大的整数cf:as.vli('1234567890123456789')

https://www.rdocumentation.org/packages/VeryLargeIntegers/versions/0.1.8/topics/06.%20Binomial%20coefficients

该软件包并非完全没有错误,并且较大的计算将需要一段时间。

乔博士。