【问题标题】:how can I get 1000 decimal digits in C#?如何在 C# 中获得 1000 个十进制数字?
【发布时间】:2012-07-08 02:38:36
【问题描述】:

在 C# 中是否可以得到最多 1000 个十进制数字?

我的程序需要至少 1000 个小数点的 pi 值。

【问题讨论】:

  • 如果你只需要1000位,你可以在网上查一下,然后复制粘贴到你的程序中。
  • 如果您需要进行任何类型的算术运算,这将无济于事。一旦将其转换为内置数据类型,您将失去大部分精度
  • 每当有人问这样的问题时,我的第一反应不是回答如何,而是问为什么。在这种情况下,好奇心压倒了我。你到底有什么可能需要 1000 位的精度?
  • 我需要至少 1000 个小数位数。但我的问题是程序让用户输入要显示的小数位数

标签: c# pi decimal-point


【解决方案1】:

你可以使用数组来模拟一个数字,例如,如果你需要计算 a(有 100000 位)加上 b(有 99999 位):

 a:     a[100000]     a[99999]      a[99998]   ... a[1]           a[0]
+b:                   b[9999]       b[99998]   ... b[1]           b[0]
----------------------------------------------------------------------------
                                     ...   a[1]+b[1]+Carry      a[0]+b[0]

【讨论】:

  • 不要这样做。使用 MP 库!
【解决方案2】:

是的,但不使用内置数据类型。 Decimal 是最好的,只有 28 到 29 位有效数字。

您将需要一个任意精度的库,或者您需要重新审视您的设计并确定您是否真的需要 1000 个十进制数字。

如果您只是想将 Pi 计算到 1000 位,则可以使用 functions 来计算 Pi 的第 n 位。此时,您可以简单地将结果存储在一个数组中

【讨论】:

  • 是的,我需要至少 1000 个十进制数字。但我的问题是用户将输入要显示多少个十进制数字
【解决方案3】:

如果您仍在寻找其他答案的替代方法,请查看 Bailey Borwein Plouffe 计算 Pi 的第 n 位数字的公式。您可以使用它来计算前 1000 位数字。

【讨论】:

  • @BenVoigt 确实如此。我有点惊讶,一半的答案建议使用该数字提取算法 - 它仅适用于 binary 数字。
  • @Mysticial:嗯,看起来 Plouffe 确实在某处发布了 Pi 十进制数字的公式……但那个公式不是它。事实上,我看不到该公式如何给出二进制甚至十六进制数字(每个小数位应该是 16^-k(位值)乘以 0-15 范围内的某个整数(数字本身),我看到上面公式中的位值,但应该是数字的东西似乎不是整数。
  • @BenVoigt 二进制数字的算法是准线性的。但是十进制数字的算法是二次或三次的。 (我不记得是哪个了。)所以这就是为什么没有人使用它。我已经为二进制数字实现了 BBP。这实际上非常棘手,因为它滥用功率模数来“跳过”所有前面的数字。 IMO,它需要相当强大的数学背景才能实现。
  • @BenVoigt 如果您想进一步讨论这个问题,请到休息室来。因为它完全属于我的专业领域。大声笑
【解决方案4】:

您需要使用任意精度算术。我不确定原生 C# 库,但 GMP 说它有一个 C# 包装器。

您也可以使用 J# 的 BigDecimal。

Here's a similar question.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 2013-11-27
    • 2012-05-06
    • 2016-07-18
    相关资源
    最近更新 更多