Chr*_*isW 5 integer r binomial-coefficients
当n和k为整数时,从n中选择k个对象的方式数,即二项式系数n!/(k!(nk)!)为整数。我怎样才能保证结果正确并且是整数类型?即使带有整数参数,该函数也会返回一个双精度值:choose
> typeof(choose(4L, 2L))
[1] "double"
Run Code Online (Sandbox Code Playgroud)
与手动计算一样,例如n -choose-2 = n(n-1)/2
typeof((4L * (4L - 1L)) / 2L)
[1] "double"
Run Code Online (Sandbox Code Playgroud)
当然,我可以强制转换为整数,as.integer()但我对机器精度感到紧张:
> as.integer(3.999999999999999)
[1] 3
> as.integer(3.9999999999999999)
[1] 4
Run Code Online (Sandbox Code Playgroud)
round()(默认为digits=0)四舍五入到最接近的整数,但返回 double 类型的值。如果我可以确定提供以双精度格式存储的整数可以as.integer(round(...))保证四舍五入到正确的整数,而不会被机器精度绊倒,那么就是as.integer(round(choose(n, k)))可以接受的。是这样吗?或者是否有替代方法choose()可以为整数参数返回一个整数?
小智 0
一种方法是使用 VeryLargeIntegers 包。其功能是:
二项式(n, k)
例如 binom(1000,50) 甚至 binom(10000000,50)
学习如何生成非常大的整数也是明智的,参见:as.vli('1234567890123456789')
该包并非完全没有错误,较大的计算将需要一段时间。
乔博士。