X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fieee754%2Ffpsqrt%2Ffsqrt.py;h=f7410703643e763c0ad5c43c57e6c39b3c12e71e;hb=75f9bd28e14c789872060997a655335bbdaed1aa;hp=15f1555d969098246dc9df4bf1f3ffce812d6958;hpb=2a273381d3f843cd58b99cbc45728761a4d12d0d;p=ieee754fpu.git diff --git a/src/ieee754/fpsqrt/fsqrt.py b/src/ieee754/fpsqrt/fsqrt.py index 15f1555d..f7410703 100644 --- a/src/ieee754/fpsqrt/fsqrt.py +++ b/src/ieee754/fpsqrt/fsqrt.py @@ -86,17 +86,25 @@ def normalise(s, m, e, lowbits): m += 1 if get_mantissa(m) == ((1<<24)-1): e += 1 - #if the num is NaN, than adjust + + # this is 2nd-stage normalisation. can move it to a separate fn. + + #if the num is NaN, then adjust (normalised NaN rather than de-normed NaN) if (e == 128 & m !=0): - z[31] = 1 - z[30:23] = 255 - z[22] = 1 - z[21:0] = 0 - #if the num is Inf, then adjust + # these are in IEEE754 format, this function returns s,e,m not z + s = 1 # sign (so, s=1) + e = 255 # exponent (minus 128, so e = 127 + m = 1<<22 # high bit of mantissa, so m = 1<<22 i think + m = 1 + m = 1<<22 # rest of mantissa is zero, so m = 1<<22 is good. + m = 0 + + #if the num is Inf, then adjust (to normalised +/-INF) if (e == 128): - z[31] = s - z[30:23] = 255 - z[22:0] = 0 + # these are in IEEE754 format, this function returns s,e,m not z + s = 1 # s is already s, so do nothing to s. + m = 255 # have to subtract 128, so e = 127 (again) + m = 0 # mantissa... so m=0 return s, m, e