双精度值被设置为 +Infinity 或 NaN

问题描述

我目前正在制作一个玩骗子骰子的 AI,并想计算出价为真的机会,所以我使用了这个公式(d = 所有骰子的总和,n = 我赌多少个相等的骰子是(如 4 2)):Liars Dice Chances Formula

唯一的问题是,如果我尝试像 Math.Round 这样的东西,小数点的值会变得很长,以至于它变成了 +infinity 或 NaN 如果有帮助,这就是代码(玩家 * 5 代表每个玩家拥有的 5 个骰子):

ChanceOfTruth = 0
    for (int i = CurrentBid; i <= Players * 5; i++) 
        {
         ChanceOfTruth += (Factorial(Players * 5)/(Factorial(i)*Factorial(Players*5-i)))*Math.Pow(1f/6f,i)*Math.Pow(5f/6f,Players*5-i);   
         }
    public static double Factorial(double num) 
            { 
                for(int i = (int)num - 1; i > 0; i--) 
                {
                    num *= i;
                }
                return num;
            }

解决方法

再次检查问题是我的阶乘函数没有正确的结果为 0,所以这修复了它

public static double Factorial(double num) 
            { 
                if(num == 0)
                {
                    return 1;
                }
                for(int i = (int)num - 1; i > 0; i--) 
                {
                    num *= i;
                }
                return num;
            }