我的值大于 1.97626258336499E-323
我也不能使用 BigInteger,因为它只处理整数值
任何帮助表示赞赏
以下是一些用户给出的一些解决方案失败的代码:
BigValue / (Math.Pow((1 + ret), j));
其中 BigValue 类似于 15000.25
ret 是 -0.99197104212554987
j 将达到 500-600 左右。
我也不知道如何为此使用 Rational Class
我的值大于 1.97626258336499E-323
我也不能使用 BigInteger,因为它只处理整数值
任何帮助表示赞赏
以下是一些用户给出的一些解决方案失败的代码:
BigValue / (Math.Pow((1 + ret), j));
其中 BigValue 类似于 15000.25
ret 是 -0.99197104212554987
j 将达到 500-600 左右。
我也不知道如何为此使用 Rational Class
来自 Microsoft 的基类库团队的BigRational 。它使用大整数将其存储为分数,但支持各种运算符。
在将其打印为小数时,我认为您需要为此编写自己的实现。我在某处为这门课写过一篇,但我必须找到它。
这是一些可能有用的东西。我用了一段时间没有问题。它是一个 .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/
一种解决方案可能是在日志空间中解决您的问题。
您的示例将变为:
exp(log(Number) - log(1-0.9999999) * 400)
了解如何使用日志来处理此类数字。是的,你可以使用一个大的浮动包,但这几乎总是矫枉过正。您通常可以使用日志获得所需的内容。