Model square root of a normalized positive value #
The binary32, binary64, one-word, two-word, and wide-limb square-root kernels compute the same
recipe: shift the significand so that its integer square root has exactly fracWidth + 1 bits, take
the integer root, round it by comparing the remainder with the root, and pack the result with a
possible carry into the exponent field. This module proves once, for every IEEE format, that the
recipe agrees with Float.Model.UnpackedFloat.sqrt on the proof model.
Each kernel proves that its word arithmetic computes this recipe, that the scaled radicand and
encoded exponent satisfy the stated bounds, and that its scaling constants satisfy htarget
and hshift. Backends.SqrtArithmetic supplies the shared affine exponent identities.
The model square root of a positive finite m * 2 ^ inputExponent is the packed, rounded integer
root.
The root's biased exponent before a rounding carry is q, and shift scales the significand so
that the integer root of m <<< shift has exactly fracWidth + 1 bits. Rounding compares the
remainder with the root, and a rounded root of 2 ^ (fracWidth + 1) carries into the exponent
field.