gpt4 book ai didi

java - 如何使我的阶乘方法适用于小数? ( Gamma )

转载 作者:搜寻专家 更新时间:2023-11-01 01:33:14 25 4
gpt4 key购买 nike

我有一个方法可以返回输入的阶乘。它非常适用于整数,但我不知道如何让它适用于小数。

目前我的方法是这样的:

public static double factorial(double d)
{
if (d == 0.0)
{
return 1.0;
}

double abs = Math.abs(d);
double decimal = abs - Math.floor(abs);
double result = 1.0;

for (double i = Math.floor(abs); i > decimal; --i)
{
result *= (i + decimal);
}
if (d < 0.0)
{
result = -result;
}

return result;
}

我找到了一个实现,但没有显示代码(我丢失了链接),给出的示例是 5.5! = 5.5 * 4.5 * 3.5 * 2.5 * 1.5 * 0.5! = 287.885278

因此,根据这个模式,我只是将十进制值添加到 for 循环 result *= (i + decimal) 中的 i

但显然我的逻辑是有缺陷的

编辑:刚刚意识到最后一个值是 0.5!,而不是 0.5。这一切都不同了。所以0.5! = 0.886225.5! = 5.5 * 4.5 * 3.5 * 2.5 * 1.5 * 0.88622 等于 287.883028125

最佳答案

gamma function (将阶乘概括为实数)直接实现起来相当棘手。使用诸如 apache-commons-math 之类的库为您计算,或look at their source了解所涉及的内容。一旦可用,请按如下方式使用:

public static double generalizedFactorial(double d) {
// Gamma(n) = (n-1)! for integer n
return Gamma.gamma(d+1);
}

输出:

4.0! = 24.0
5.5! = 287.88527781504433
6.0! = 720.0

上一个答案(为 > 1 的实数提供类似阶乘的解释;但由于已经商定将阶乘扩展为实数,请忽略 这适用于任何实用的东西):

public static double f(double d) {
double r = d - Math.floor(d) + 1;
for (;d>1; d-=1) {
r *= d;
}
return r;
}

输出:

4.0! = 24.0
5.5! = 487.265625
6.0! = 720.0

关于java - 如何使我的阶乘方法适用于小数? ( Gamma ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31539584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com