用于任意数字精度的 .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 库的主要内容,如果未能解决你的问题,请参考以下文章