我有大于1.97626258336499E-323的值。
我不能使用BigInteger,因为它只能处理整数值。
非常感谢任何帮助。
这是失败的代码,也无法使用一些用户提供的解决方案:
BigValue / (Math.Pow((1 + ret), j));
其中BigValue是类似于15000.25的值。
返回值为-0.99197104212554987。
j的值将会在大约500-600之间。
我不知道如何使用有理数类来解决这个问题。
我有大于1.97626258336499E-323的值。
我不能使用BigInteger,因为它只能处理整数值。
非常感谢任何帮助。
这是失败的代码,也无法使用一些用户提供的解决方案:
BigValue / (Math.Pow((1 + ret), j));
其中BigValue是类似于15000.25的值。
返回值为-0.99197104212554987。
j的值将会在大约500-600之间。
我不知道如何使用有理数类来解决这个问题。
BigRational来自微软基础类库团队。它使用大整数将其存储为分数,但支持各种运算符。
当涉及将其打印为十进制数时,我认为您需要编写自己的实现。我有一个为这个类编写的实现,但我需要找到它。
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)
学习如何使用日志来处理像这样的数字。是的,你可以使用一个大型浮点数包,但那几乎总是过度杀伤力的。通常情况下,您可以使用日志获得所需的内容。