将两个BigIntegers的商作为double获取

6

如何在尽可能保留精度的情况下转换两个C# BigIntegers的商? 我目前的解决方案是:

Math.Exp(BigInteger.Log(dividend) - BigInteger.Log(divisor));

我猜这并不是最佳选择。

如果你想在结尾处得到双精度浮点数,那么这很可能不是最佳选择。如果你需要任意精度的浮点数,请阅读我的答案。所有这些都由BigInteger.Log生成双精度浮点数。 - Alexandre C.
也许你可以使用 F# 的大数类型;它们直接支持除法。 - Jules
1个回答

3

首先阅读这篇文章,它包含了您想要做的内容。

其次,计算被除数/除数的连分数展开式,并在达到所需精度时停止。您不需要完整的昂贵除法运算(我认为它是O(n log^2 n)或类似的),您只需要整数除法/余数。

尽管如此,如果BigInteger.Log返回双精度浮点数,exp(log a / log b)的方法将非常有效,我认为它可能比连分数展开更快。您需要进行两次转换以得到双精度浮点数(可能很快),并且在整个操作过程中保持准确性(即使除数和被除数的对数非常接近)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接