用于任意数字精度的 .NET Framework 库

Posted

技术标签:

【中文标题】用于任意数字精度的 .NET Framework 库【英文标题】:.NET Framework Library for arbitrary digit precision 【发布时间】:2009-07-23 04:55:59 【问题描述】:

我正在重新提出这个问题,并使其更加具体:是否有支持任意精度数字的 .NET 框架库?

【问题讨论】:

您正在寻找的是“任意精度”十进制库,或者可能是“bignum”类型库。我个人没有在.net 中使用过任何此类库,但也许这个问题会有所帮助。 ***.com/questions/621684/… 【参考方案1】:

您可以等待 .NET 4.0 吗?他们是bringing BigInteger directly into the Framework。

另一方面,如果你等不及了,那么J# runtime includes built-in support for java.math.BigInteger and BigDecimal。就像 .NET Framework 的其余部分一样,它是可再分发的。

【讨论】:

这里有一些 BigInteger 选项:***.com/questions/25375/… 不幸的是,这些是任意大小的整数,而不是任意精度的自然数。 在这种情况下看这些:J# library's java.math.BigDecimal【参考方案2】:

这里有几个选项。

W3b.Sine 是一个不错的选择,它是原生 C#/.NET,支持任意精度浮点值。

如果您只处理整数值,IntX 提供对任意精度整数值的支持。一个可能更成熟的选项是 C# BigInt,但同样,它不支持浮点运算。

【讨论】:

【参考方案3】:

您可以尝试使用尾数的旧方法。基本上你可以有一个 64 位整数来存储数字,然后是一个 64 位整数来存储指数(可能是负数)。您可以构建自己的对象类型并重载算术运算符,因此它将被视为单个数字。这需要一些工作,但我认为这将是您的最佳选择。

【讨论】:

理论上这很容易做到;无论如何,值类型都是简单的结构。 从未听说过十进制数据类型?这个解决方案需要做大量的工作...... 你看到提问者评论“我打算以数十亿位数的方式存储一些东西”吗? 你可以从这个开始(这与你想要的相反,但它会给你一个想法):***.com/questions/389993/… 这是一些概念理论:cs.utah.edu/~zachary/isp/applets/FP/FP.html 在浮点单元之前在硬件上可用,这就是它的完成方式。 @RCIX: msdn.microsoft.com/en-us/library/…【参考方案4】:

GnuMpDotNet:http://www.emilstefanov.net/Projects/GnuMpDotNet/

如果您需要纯 .NET,请考虑查看以下内容:http://www.codeplex.com/IntX/

【讨论】:

这两个都涵盖任意大小的整数类,但它们是否提供任意精度的自然数? 自然数是一个非负整数。所以,他们做到了。 en.wikipedia.org/wiki/Natural_number 好的,让我换个说法。任意精度的十进制数?【参考方案5】:

也许令人惊讶的是,Bailey-Borwein-Plouffe formula 提供了一个增量过程来计算 pi 的下一个二进制或十六进制数字,而无需存储所有先前的数字。

【讨论】:

当问题询问如何在 C# 中计算任意多位 pi 时,提问者在几个月后将其更改为“更具体”但实际上只是相切相关的东西。【参考方案6】:

如果你想要一个非常快的库,那么试试:

http://www.emilstefanov.net/Projects/GnuMpDotNet/

【讨论】:

【参考方案7】:

您可以使用十进制类型,它为您提供 28-29 位有效数字

【讨论】:

这有点帮助......但我计划以数十亿位数的方式存储一些东西。我在想一些类似字符串解决方案的东西,但不知道从哪里开始。【参考方案8】:

这是一篇关于如何表示无限位的好文章。

http://dobbscodetalk.com/index.php?option=com_myblog&show=Basic-Arithmetic-with-Infinite-Integers.html&Itemid=29

祝你好运

【讨论】:

以上是关于用于任意数字精度的 .NET Framework 库的主要内容,如果未能解决你的问题,请参考以下文章

PHP BC 数学 函数

C#将数字四舍五入为双精度数的任意数字[重复]

任意精度数字和 Javascript,Google Web Toolkit

用于高级综合的任意精度浮点库

PHP 精准加减乘除

具有任意精度和一定比例的数字格式的 Oracle to_char 函数