いくつかの統計関連の関数を実行しようとしているので、いくつかの関連手順 (つまり、確率の統計計算、任意の深さのパスカルの三角形の生成など) を実行できます。
オーバーフローに対処している可能性が高い問題に遭遇しました。たとえば、(n=30,p=1) の nPr を計算したい場合、次のように減らすことができることがわかっています。
30P1 = 30! / (30 - 1)!
= 30! / (29)!
= 30! / 29!
= 30
ただし、以下の関数を使用して計算すると、整数オーバーフローのために常に無効な値が得られるようです。任意に大きな数をサポートするためにライブラリを使用する必要のない回避策はありますか? ガンマ関数に関する他の投稿を少し読みましたが、具体的な例が見つかりませんでした。
int factorial(int n) {
return (n == 1 || n == 0) ? 1 : factorial(n - 1) * n;
}
int nCr(int n, int r) {
return (nPr(n,r) / factorial(r));
//return factorial(n) / factorial(r) / factorial(n-r));
}
int nPr(int n, int r) {
return (factorial(n) / factorial(n-r));
}