I'm using bash to compute the multinomial coefficients. The code follows bellow:
#!/bin/bash
function factorial {
declare n=$1
(( n < 2 )) && echo 1 && return
echo $(( n * $(factorial $((n-1))) ))
}
function binomial {
declare n=$1
declare k=$2
echo $(( $(factorial $((n))) / ( $(factorial $((k))) * $(factorial $((n-k))) ) ))
}
function multinomial {
arr=("$@")
declare mcoeff=1
declare n=0
for k in "${arr[@]}";
do
((n=$n+$k))
((mcoeff=$mcoeff*$(binomial "$n" "$k")))
done
echo "$mcoeff"
}
multinomial $@
It seems I have an overflow in some situations.
$ ./multinomial.sh 4 5 6
630630
$ ./multinomial.sh 4 5 6 7
-119189070
Any idea how to fix this?