正木です。 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) なのでまったく問題が無いのでは? 私の方が何かとんでもない勘違いをしている可能性が高いですが。