当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()可以为整数参数返回一个整数?
我想一次测试多个不等式,即
if (a < b < c < ...)
Run Code Online (Sandbox Code Playgroud)
当所有值都存在时,这很好.但是,有时一个或多个要比较的变量的数值可能会丢失/未知; 我的上下文中的正确行为是假设满足相关的不等式.假设我None在值未知时分配特殊值:我想从<运营商(或替代方案)获得的行为是:
>>> a = 1; b = 2; c = 3
>>> a < b < c # this works fine, obviously
True
>>> b = None
>>> a < b < c # would like this to return True
False
Run Code Online (Sandbox Code Playgroud)
所以我想知道True如果一个变量真的比另一个变量小,或者如果缺少一个变量(取任何特定的预先确定的非数值),或者两个变量都丢失了,我想能够串联比较起来一气呵成即a < b < c < ...
我也想和这样做<=,以及<.
谢谢