'
' Number.AsIEEEHex
'
' 30 Jan 2002
'
' Used for reporting values of coordinates when testing.
'===================================================================='

x = SELF       ' Original number
'
' Remove the sign bit.
'

if (x<0) then
  x = x.Abs
  sX = "-0."
else
  sX = "0."
end
'
' Obtain the exponent.
'

if (x=0.0) then
  nExponent = 0
  x = 0.0
else
  nExponent = x.Log(2).Ceiling
  if (nExponent>=-1024) then
    while (2^(nExponent-1)>x and (nExponent>-1076))
      nExponent = nExponent-1
    end
    while (2^nExponent<=x and (nExponent<1024))
      nExponent = nExponent+1
    end
    '
    ' Normalize.
    '

    x = (2^(0-nExponent)*x)*(2^52)
  else
    nExponent = -1024
    x = (2^1023*x)*(2^53)
  end
end
'
' Convert to hex string.
'

y = x mod (2^32)
x = 2^(-32)*(x-y)
sYHex = y.AsHexString.Substitute("0x","")
sYHex = ("00000000"+sYHex).Right(8)
sXHex = x.AsHexString.Substitute("0x","")
sXHex = ("00000"+sXHex).Right(5)
sXHex = sXHex+sYHex
'
' Break the mantissa into groups.
'

sXHex = sXHex.Split({4,8,12}," ")
' (Inserts spaces every fourth character)

sX = sX+sXHex
'
' Convert the exponent to hex string.
'

if (nExponent<0) then
  sE = "-"
  nExponent = nExponent.Abs
else
  sE = "+"
end
sEHex = nExponent.AsHexString.Substitute("0x","")
sEHex = sEHex.BasicTrim("0","")
' (Removes initial "0"s)

if (sEHex.IsNull) then
  sEHex = "0"
end
sE = sE+sEHex
return sX++"H"+sE
' end of script