Tcl 9.0/Tk9.0 Documentation > Tcl Commands, version 9.0.0 > fpclassify

Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

NAME
fpclassify — Floating point number classification of Tcl values
SYNOPSIS
DESCRIPTION
zero
subnormal
normal
infinite
nan
EXAMPLE
SEE ALSO
KEYWORDS
STANDARDS
COPYRIGHT

NAME

fpclassify — Floating point number classification of Tcl values

SYNOPSIS

package require tcl 9.0
fpclassify value

DESCRIPTION

The fpclassify command takes a floating point number, value, and returns one of the following strings that describe it:

zero
value is a floating point zero.

subnormal
value is the result of a gradual underflow.

normal
value is an ordinary floating-point number (not zero, subnormal, infinite, nor NaN).

infinite
value is a floating-point infinity.

nan
value is Not-a-Number.

The fpclassify command throws an error if value is not a floating-point value and cannot be converted to one.

EXAMPLE

This shows how to check whether the result of a computation is numerically safe or not. (Note however that it does not guard against numerical errors; just against representational problems.)

set value [command-that-computes-a-value]
switch [fpclassify $value] {
    normal - zero {
        puts "Result is $value"
    }
    infinite {
        puts "Result is infinite"
    }
    subnormal {
        puts "Result is $value - WARNING! precision lost"
    }
    nan {
        puts "Computation completely failed"
    }
}

SEE ALSO

expr, mathfunc

KEYWORDS

floating point

STANDARDS

This command depends on the fpclassify() C macro conforming to “ISO C99” (i.e., to ISO/IEC 9899:1999).

COPYRIGHT

Copyright © 2018 Kevin B. Kenny <kennykb@acm.org>. All rights reserved
Copyright © 2018 Kevin B. Kenny <kennykb(at)acm.org>. All rights reserved
Copyright © 2019 Donal Fellows