Each version of Tcl recognizes big-endian IEEE754 encoded exceptional single precision floating point numbers like followings.
# IEEE754 Reference # http://babbage.cs.qc.edu/courses/cs341/IEEE-754references.html namespace eval IEEE754 { variable CONST { Quiet-NaN_MIN FFFFFFFF Quiet-NaN_MAX FFC00001 Indeterminate FFC00000 Signaling-NaN_MIN FFBFFFFF Signaling-NaN_MAX FF800001 -Infinity FF800000 NegativeNormalized_MIN FF7FFFFF NegativeNormalized_MAX 80800000 NegativeDenormalized_MIN 807FFFFF NegativeDenormalized_MAX 80000001 -0 80000000 +0 00000000 PositiveDenormalized_MIN 00000001 PositiveDenormalized_MAX 007FFFFF PositiveNormalized_MIN 00800000 PositiveNormalized_MAX 7F7FFFFF Infinity 7F800000 Signaling+NaN_MIN 7F800001 Signaling+NaN_MAX 7FBFFFFF Quiet+NaN_MIN 7FC00000 Quiet+NaN_MAX 7FFFFFFF } } if {$::tcl_version >= 8.5} { proc IEEE754::string_reverse {s} { string reverse $s } } else { package require struct::list package require textutil proc IEEE754::string_reverse {s} { join [struct::list reverse [textutil::splitn $s 1]] "" } } proc IEEE754::test {} { variable CONST puts "tcl_patchLevel = $::tcl_patchLevel" foreach {name hex} $CONST { set name [format %-24s $name] binary scan [string_reverse [binary format H* $hex]] f a puts "FLOAT: $name $a" } } IEEE754::test # tcl_patchLevel = 8.4.19 # FLOAT: Quiet-NaN_MIN -1.#QNAN # FLOAT: Quiet-NaN_MAX -1.#QNAN # FLOAT: Indeterminate -1.#IND # FLOAT: Signaling-NaN_MIN -1.#QNAN # FLOAT: Signaling-NaN_MAX -1.#QNAN # FLOAT: -Infinity -1.#INF # FLOAT: NegativeNormalized_MIN -3.40282346639e+038 # FLOAT: NegativeNormalized_MAX -1.17549435082e-038 # FLOAT: NegativeDenormalized_MIN -1.17549421069e-038 # FLOAT: NegativeDenormalized_MAX -1.40129846432e-045 # FLOAT: -0 -0.0 # FLOAT: +0 0.0 # FLOAT: PositiveDenormalized_MIN 1.40129846432e-045 # FLOAT: PositiveDenormalized_MAX 1.17549421069e-038 # FLOAT: PositiveNormalized_MIN 1.17549435082e-038 # FLOAT: PositiveNormalized_MAX 3.40282346639e+038 # FLOAT: Infinity 1.#INF # FLOAT: Signaling+NaN_MIN 1.#QNAN # FLOAT: Signaling+NaN_MAX 1.#QNAN # FLOAT: Quiet+NaN_MIN 1.#QNAN # FLOAT: Quiet+NaN_MAX 1.#QNAN # tcl_patchLevel = 8.5.9 # FLOAT: Quiet-NaN_MIN -NaN(7ffffe0000000) # FLOAT: Quiet-NaN_MAX -NaN(20000000) # FLOAT: Indeterminate -NaN # FLOAT: Signaling-NaN_MIN -NaN(7ffffe0000000) # FLOAT: Signaling-NaN_MAX -NaN(20000000) # FLOAT: -Infinity -Inf # FLOAT: NegativeNormalized_MIN -3.4028234663852886e+38 # FLOAT: NegativeNormalized_MAX -1.1754943508222875e-38 # FLOAT: NegativeDenormalized_MIN -1.1754942106924411e-38 # FLOAT: NegativeDenormalized_MAX -1.401298464324817e-45 # FLOAT: -0 -0.0 # FLOAT: +0 0.0 # FLOAT: PositiveDenormalized_MIN 1.401298464324817e-45 # FLOAT: PositiveDenormalized_MAX 1.1754942106924411e-38 # FLOAT: PositiveNormalized_MIN 1.1754943508222875e-38 # FLOAT: PositiveNormalized_MAX 3.4028234663852886e+38 # FLOAT: Infinity Inf # FLOAT: Signaling+NaN_MIN NaN(20000000) # FLOAT: Signaling+NaN_MAX NaN(7ffffe0000000) # FLOAT: Quiet+NaN_MIN NaN # FLOAT: Quiet+NaN_MAX NaN(7ffffe0000000) # tcl_patchLevel = 8.6b1.2 # FLOAT: Quiet-NaN_MIN -NaN(7ffffe0000000) # FLOAT: Quiet-NaN_MAX -NaN(20000000) # FLOAT: Indeterminate -NaN # FLOAT: Signaling-NaN_MIN -NaN(7ffffe0000000) # FLOAT: Signaling-NaN_MAX -NaN(20000000) # FLOAT: -Infinity -Inf # FLOAT: NegativeNormalized_MIN -3.4028234663852886e+38 # FLOAT: NegativeNormalized_MAX -1.1754943508222875e-38 # FLOAT: NegativeDenormalized_MIN -1.1754942106924411e-38 # FLOAT: NegativeDenormalized_MAX -1.401298464324817e-45 # FLOAT: -0 -0.0 # FLOAT: +0 0.0 # FLOAT: PositiveDenormalized_MIN 1.401298464324817e-45 # FLOAT: PositiveDenormalized_MAX 1.1754942106924411e-38 # FLOAT: PositiveNormalized_MIN 1.1754943508222875e-38 # FLOAT: PositiveNormalized_MAX 3.4028234663852886e+38 # FLOAT: Infinity Inf # FLOAT: Signaling+NaN_MIN NaN(20000000) # FLOAT: Signaling+NaN_MAX NaN(7ffffe0000000) # FLOAT: Quiet+NaN_MIN NaN # FLOAT: Quiet+NaN_MAX NaN(7ffffe0000000) |