これはむしろ理論的な質問です。その言語は特にJavaですが、一般的な解決策で十分です。動的Javaの整数オーバーフローチェックとパフォーマンスの比較
long factorial(int n)
{
//handle special cases like negatives, etc.
long p = 1;
for(int i = 1; i <= n; i++)
{
p = p * n;
}
return p;
}
しかし、今、私はまた、(単にハードMAX_FACTORIAL_PARAMETERなどの何かをコーディングなし)階乗オーバーフローかどうかを確認したい:
は、私は些細な階乗関数を書きたかったとします。一般に、乗算中のオーバーフローのチェックは、元の入力に対して結果をチェックするのと同じくらい簡単ですが、この場合、オーバーフローはどのポイントでも発生するため、単一のループごとにより多くの除算と比較を実行するのはむしろ高価になります。質問は、その後、二つです - すべての段階で乗算オーバーフローのチェックやハード最大許容パラメータをコーディングすることなく、オーバーフローの階乗問題を解決する方法はありますか?
そして一般的には、どのように私は黙って、それぞれに高価な検査を導入することにより、パフォーマンスを犠牲にすることなく、すべての段階で失敗する可能性があり、反復/再帰の多くの段階を伴う問題にアプローチすべきか?
あなたはすべての可能性を排除しました。より深い数学的分析を行うと、オーバーフローが発生する時期を予測できますが、それはあなたが許可しなかったMAX_型定数にristを与えます。それがなければ、唯一の選択肢は、あまりにも高価であるとしてあなたが許可しなかった潜在的に溢れるオプションをチェックすることです。あなたは大きな整数演算を使うことができると思います。あなたはそれを拒否するのを忘れました。 –