Essays/IEEE Floating-Point Numbers

From J Wiki
Jump to navigation Jump to search

64-bit floating-point numbers in the IEEE 754 standard have 1 bit for the sign, 11 bits for the exponent with a bias of 1023, and 52 bits for the mantissa. The hex representation and its inverse (3!:3 and 3!:2) facilitate explorations with these numbers.

unhex=: 3!:2
hex  =: 2&(3!:3)
cons =: unhex @ ((}: hex 0.5)&,) " 1

   hex 1.5
e200000000000000
0000000000000008
0000000000000001
0000000000000000
3ff8000000000000
   unhex hex 1.5
1.5
   cons '3ff8000011112222'
1.5
   ":!.18 cons '3ff8000011112222'
1.5000000635792579
x ":!.18 cons x         Description
 0000000000000000   0 positive zero
 8000000000000000   0 negative zero
 0000000000000001   4.9406564584124654e_324 the smallest positive number
 8000000000000001  _4.9406564584124654e_324 the largest negative number
 000fffffffffffff   2.2250738585072009e_308 the largest subnormal positive number
 800fffffffffffff   _2.2250738585072009e_308 the smallest subnormal negative number
 0010000000000000   2.2250738585072014e_308 the smallest normal positive number
 8010000000000000   _2.2250738585072014e_308 the largest normal negative number
 3fefffffffffffff   0.99999999999999989 the largest number less than 1
 3ff0000000000000   1 1
 3ff0000000000001   1.0000000000000002 the smallest number greater than 1
 3feffffffffffe00   0.99999999999994316 the smallest number equal to 1 with a tolerance of 2^_44
 3ff0000000000100   1.0000000000000568 the largest number equal to 1 with a tolerance of 2^_44
 4005bf0a8b145769   2.7182818284590451 Euler's number
 400921fb54442d18   3.1415926535897931 pi
 4024000000000000   10 10
 4340000000000000   9007199254740992 the smallest positive x such that x and x+1 have the same representation (2^53)
 baabaabaabaabaaa  _4.4698305231135437e_26 sheepish number
 deadbeefdeadbeef  _1.2785010645440762e148 hamburger
 7fefffffffffffff   1.7976931348623157e308 the largest finite number
 ffefffffffffffff  _1.7976931348623157e308 the smallest finite number
 7ff0000000000000   _ positive infinity
 fff0000000000000  __ negative infinity
 7ff8000000000000  _. quiet NaN



Contributed by Roger Hui.