Вычисление * целочисленного * биномиального коэффициента в R - PullRequest
0 голосов
/ 12 июня 2018

Количество способов выбора k объектов из n , то есть биномиальный коэффициент n! / (K! (Nk)!) , являетсяцелое число, когда n и k являются целыми числами.Как я могу рассчитать это, гарантируя, что результат будет правильным и целочисленным?Функция choose возвращает двойное число даже с целочисленными аргументами:

> 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(), которая будет возвращать целое число для целочисленных аргументов?

...