我的值大于1.97626258336499E-323
我也不能使用BigInteger,因为它只处理整数值
感谢任何帮助
以下是一些用户给出的解决方案失败的代码也失败了:
BigValue / (Math.Pow((1 + ret), j));
WHere BigValue类似于15000.25
ret是-0.99197104212554987
j将大约500-600。
我也不知道如何使用Rational Class
答案 0 :(得分:1)
BigRational。它使用大整数将其存储为分数,但支持所有类型的运算符。
当它以十进制打印时,我认为你需要为此编写自己的实现。我有一个写在这个班级的地方,但我必须找到它。
答案 1 :(得分: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/
答案 2 :(得分:0)
您必须将语言切换为具有BigFloat
类型的语言(例如,Haskel和Python具有本机包),或者找到具有C#
绑定的第三方大浮点库。有人对GNU MP的这种约束进行了一些讨论,但它逐渐消失了。也许你会写一个!
另请参阅this discussion,其中讨论了MS BigRational。然而,这与BigFloat不同。
答案 3 :(得分:0)
一种解决方案可能是在日志空间中解决您的问题。
你的例子将成为:
exp(log(Number) - log(1-0.9999999) * 400)
答案 4 :(得分:0)
了解如何使用日志处理这些数字。是的,你可以使用一个大的浮动包,但这几乎总是有点过分。您通常可以使用日志获得所需内容。