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