正木です。

In [ruby-math:00948]

|原です。

|ちょっと証明の補強します。プログラムでは
|
|    x = (self >> (j << 1)).isqrt_ini
|    ((x<<j) + (self>>j).div(x)) >> 1
|
|となっていて、整数演算が入るので微妙なところがあります。つまり
|
|  [(x*(2**j) + [[a/2**j]/x])/2]
|
|なので、ここを厳密に評価します。

少なくとも a, b, c が正のときは

(a.div(b)).div(c) == a.div(b * c)

なのでまったく問題が無いのでは?

私の方が何かとんでもない勘違いをしている可能性が高いですが。