gpt4 book ai didi

Java:组合函数产生十进制数

转载 作者:行者123 更新时间:2023-12-02 00:01:01 25 4
gpt4 key购买 nike

我试图实现一个简单的组合功能

private int combination(int n, int k)
{
if(n>>1 < k)
k = n - k;
double mul = 1;
for(int i=n+1-k;i<n+1;i++)
mul *= i;
for(int i=k;i>0;i--)
mul /= i;
return (int)mul;
}

当我以 combination(33,17) 形式输入参数时,它会给出 1166803109,但正确的数字应该是 1166803110。因此,我在截断为 int 之前打印了 mul 变量,它给了我一个十进制数:1.1668031099999998E9,这让我感到困惑。根据定义,它应该是一个完美的除法,为什么它给我一个小数?

最佳答案

当涉及到 floatdouble 等浮点类型时,很少有完美的除法(完美是指浮点结果是整数) 。这是因为值在内部表示的方式;进行计算时会有一些精度损失。 (这类似于为什么除法 2/3 会被计算机渲染为 0.666667。)不要使用 double,而是坚持使用整数类型例如 intlong,或者如果您的计算可能达到比 long 更大的值,则使用 BigInteger 或类似的值坚持住。

关于Java:组合函数产生十进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14867752/

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