def sqrt()

in rtl/log/luts/FixedPoint.py [0:0]


    def sqrt(self):
        """Compute square-root of given number."""
        if self.scaledval < 0:
            raise FXdomainError
        elif self.scaledval == 0:
            return self
        # Calculate crude initial approximation:
        rt = FXnum(family=self.family,
                   scaled_value=(1 << (self.family.fraction_bits // 2)))
        val = self.scaledval
        while val > 0:
            val >>= 2
            rt.scaledval <<= 1
        # Refine approximation by Newton iteration:
        while True:
            delta = (rt - self / rt) >> 1
            rt -= delta
            if delta.scaledval == 0: break
        return rt