gpt4 book ai didi

c# - 两个 Ulong 整数相除输出错误的结果

转载 作者:太空宇宙 更新时间:2023-11-03 18:27:55 25 4
gpt4 key购买 nike

我正在为加泰罗尼亚语数字编写程序。所以这里是公式:


This is the formula


我决定使用公式的中间部分,因为其他部分对我的知识来说太抽象了(也许我在数学课上睡得太多了)。实际上,我的程序适用于 n = 0;n = 5;n = 10; 但是如果我输入 n = 15; - 繁荣来了 - 输出是 2 而它应该是 9694845。这是我的 child :

using System;
namespace _8_Numbers_of_Catalan
{
class CatalanNumbers
{
static void Main()
{
Console.Write("n: ");
int n = int.Parse(Console.ReadLine());
Console.WriteLine("Catalan({0})", n);
//calculating the Catan number from the formula
// Catan(n) = [(2*n)!]/[(n+1)! * n!]
Console.WriteLine((factorial(2 * n)) / (factorial(n + 1) * factorial(n)));
}//finding the factorial
private static ulong factorial(int n)
{
ulong fact = 1;
for (int i = 1; i <= n; i++)
{
fact *= (ulong)i;
}
return fact;
}
}
}

如果有明显错误,请预先感谢您理解我。我是编程新手。

最佳答案

那是因为您正在使用最多包含 64 位的整数变量执行这些计算。

您对 factorial(15 * 2) 的调用是 30!,这将导致值为

265,252,859,812,191,058,636,308,480,000,000

远远超过 64 位整数变量:

18,446,744,073,709,551,615 (0xFFFFFFFFFFFFFFFF).

您可以选择使用 System.Numerics.BigInteger输入 (slow) 或 double(最大值为 1.7976931348623157E+308)。这意味着您将失去一些精度,这可能相关也可能不相关。

您的另一个选择是使用一种算法来使用渐近近似法来近似大阶乘的值,例如 Schönhage–Strassen algorithm由 Mathematica 使用。

您可能还想查看一些现有的在线资源以计算 .NET 中的大阶乘

作为最后一个但并非最不重要的选项(我还没有彻底检查),在我看来可能存在特定的算法可以让你计算(或近似于足够的准确度和精度)a Catalan number .

关于c# - 两个 Ulong 整数相除输出错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29770582/

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