如何处理大于double的最大值的浮点值

时间:2013-01-23 05:07:19

标签: c# .net math bigdecimal

我的值大于1.97626258336499E-323

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

感谢任何帮助

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

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

WHere BigValue类似于15000.25

ret是-0.99197104212554987

j将大约500-600。

我也不知道如何使用Rational Class

5 个答案:

答案 0 :(得分:1)

来自Microsoft的基类库团队的

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)

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