You seem to have a lot of unrealistic restrictions on the implementation of "bignum". Can I offer a binary search? At each iteration, find the value "half way" mid = (hi + lo) / 2 and crop the search space as [hi, mid] or [mid, lo] depending on the square of these values.
Not as fast as NR, etc. But you need to converge with careful processing of the values โโof the squares of the range ...
source share