6

我的值大于 1.97626258336499E-323

我也不能使用 BigInteger,因为它只处理整数值

任何帮助表示赞赏

以下是一些用户给出的一些解决方案失败的代码:

BigValue / (Math.Pow((1 + ret), j));

其中 BigValue 类似于 15000.25

ret 是 -0.99197104212554987

j 将达到 500-600 左右。

我也不知道如何为此使用 Rational Class

4

5 回答 5

1

来自 Microsoft 的基类库团队的BigRational 。它使用大整数将其存储为分数,但支持各种运算符。

在将其打印为小数时,我认为您需要为此编写自己的实现。我在某处为这门课写过一篇,但我必须找到它。

于 2013-01-23T05:36:55.933 回答
1

这是一些可能有用的东西。我用了一段时间没有问题。它是一个 .Net BigDecimal 类,您可以从 codeplex 下载它(或只查看源代码):

http://bigdecimal.codeplex.com/releases/view/44790

它是用 VB.Net (.Net 4.0) 编写的,但这无关紧要。

它在 C# 中的使用示例:http ://www.dreamincode.net/forums/blog/217/entry-2522-the-madman-scribblings/

于 2013-01-24T16:55:33.303 回答
0

您将不得不将语言切换到具有类型的语言(例如 Haskel 和 Python 具有本地包),或者找到具有绑定BigFloat的第三方大型浮点库。C#有一些关于GNU MP的这种绑定的讨论,但它消失了。也许你会写一个!

另请参阅讨论MS BigRational 的讨论。然而,这与 BigFloat 不同。

于 2013-01-23T05:31:04.547 回答
0

一种解决方案可能是在日志空间中解决您的问题。

您的示例将变为:

exp(log(Number) - log(1-0.9999999) * 400)
于 2013-01-23T05:47:02.357 回答
0

了解如何使用日志来处理此类数字。是的,你可以使用一个大的浮动包,但这几乎总是矫枉过正。您通常可以使用日志获得所需的内容。

于 2013-01-24T15:39:25.610 回答