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

标签 r integer binomial-coefficients

从 n 中选择 k 个对象的方式数,即二项式系数 n!/(k!(n-k)!),当 n 和 k 为整数时为整数。我如何计算这个以保证结果既正确又是整数类型? choose即使使用整数参数,函数也会返回 double 值:

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

手动计算也是如此,例如n-选择-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 类型的值。如果我可以确定以 double 格式存储的整数提供给 as.integer(round(...))保证四舍五入到正确的整数,永远不会被机器精度绊倒,然后 as.integer(round(choose(n, k)))可以接受。是这种情况吗?或者是否有替代 choose() 的方法这将为整数参数返回一个整数?

最佳答案

一种方法是使用 VeryLargeIntegers 包。功能是:
二项式(n,k)
例如binom(1000,50) 甚至 binom(10000000,50)
学习如何制作非常大的整数也是明智的,参见:as.vli('1234567890123456789')
https://www.rdocumentation.org/packages/VeryLargeIntegers/versions/0.1.8/topics/06.%20Binomial%20coefficients
该软件包并非完全没有错误,较大的计算需要一段时间。
乔博士。

关于r - 计算R中的*整数*二项式系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50817180/

相关文章:

r - imageOutput 在条件面板内单击

r - Shiny 的 R : conditionalPanel and actionButton

西里尔字母的正则表达式问题

c++ - 用192/256位整数求和无符号64位整数 vector 的点积的最快方法?

c++ - 将整数从 Processing 发送到 Arduino,无法读取字节

java - 在 Java 中实现选择符号的好方法是什么?

r - 数据科学家的基本技能

Swift 2.1- tabBarController!.selectedIndex 返回大量整数

c - 如何找到固定 n 的前 r 个二项式系数之和?

c++ - 二项式系数