3

我想在小数点后创建超过 16,000 个数字的 pi,但问题是我无法找到任何可以满足我愿望的类型。我尝试使用对象,但它会在 10 之后对数字进行四舍五入,我认为使用字符串但字符串类型不能做减号或加号,如果我将转换为 int,它将变为圆形。你知道我可以使用的任何其他类型吗,或者我怎样才能使它与字符串一起工作,例如 http://files.extremeoverclocking.com/file.php?f=36这个程序最多可以计算 3200 万

谢谢

4

1 回答 1

5

看看这个页面,它的BigNumber类。

首先要注意的是,我们不能在 C# 中使用任何原始类型:它们只是没有足够的精度(例如,双精度类型只有 15 个有效数字,我们想要计算,比如说, 10000)。我们需要一个大精度的数字库,但在 .NET Framework 中没有类似的东西,所以我们要做的第一件事就是编写一个 BigNumber 类。

该页面还提供了将pi计算到小数点后 1000 位的示例用法,因此运行 16000 应该相当简单。


运行 16000 位需要大约一秒半,而运行 160,000 位需要 2 分钟多一点。

这是我的PrintAsTable()功能,链接的帖子留给读者作为练习:

public string PrintAsTable() {
    var data = Print();
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < data.Length; i++)
    {
        if (data[i] == '.') sb.AppendLine(".");
        else if ((i -1) % 50 == 0) sb.AppendLine(data[i].ToString());
        else if ((i -1) % 10 == 0) {sb.Append(data[i].ToString()); sb.Append(" ");}
        else sb.Append(data[i].ToString());
    }
    return sb.ToString();
}
于 2013-05-20T19:17:30.633 回答