Получение отношения двух BigIntegers как двойного - PullRequest
6 голосов
/ 13 января 2011

Как лучше всего преобразовать частное двух C # BigIntegers, сохранив при этом как можно большую точность? Мое текущее решение:

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

Полагаю, это неоптимально.

1 Ответ

3 голосов
/ 13 января 2011

Первое чтение эта статья .Он содержит то, что вы хотите сделать.

Затем выполните непрерывное расширение дроби делителя / делителя и остановитесь, когда вы достигнете желаемой точности.Вам не потребуется полная дорогостоящая операция деления (я полагаю, это O (n log ^ 2 n) или что-то в этом роде), вам понадобится только целочисленное деление / остаток.

Тем не менее, при условии BigInteger.Log возвращает значение double, функция exp (log a / log b) будет отлично работать, и я думаю, что это может быть быстрее, чем продолжение расширения дроби.Вам нужно два преобразования для удвоения (вероятно, быстрого), и точность сохраняется на протяжении всей операции (даже если делитель логарифма и дивиденд логарифма очень близки друг к другу).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...