在保留尽可能多的精度的同时,转换两个C#BigIntegers的商的最佳方法是什么?我目前的解决方案是:
Math.Exp(BigInteger.Log(dividend) - BigInteger.Log(divisor));
我猜这不是最理想的。
答案 0 :(得分:3)
首先阅读this article。它包含你想要做的事情。
然后,计算出被除数/除数的持续分数扩展,并在达到所需准确度时停止。你不需要完全昂贵的除法运算(我想它是O(n log ^ 2 n)或类似的东西),你只需要整数除法/余数。
尽管如此,如果BigInteger.Log返回双精度数,exp(log a / log b)的东西会很好用,我认为它可能比连续的分数扩展更快。您需要两次转换才能加倍(可能很快),并且在整个操作过程中保持准确性(即使日志除数和对数除数非常接近)。