|Did you know ...||Search Documentation:|
|NaN and Infinity floats and their syntax|
SWI-Prolog supports reading and printing `special' floating point values according to Proposal for Prolog Standard core update wrt floating point arithmetic by Joachim Schimpf and available in ECLiPSe Prolog. In particular,
-1.0Inf. Any sequence matching the regular expression
[+-]?\sd+[.]\sd+Infis mapped to plus or minus infinity.
NaN(Not a Number) is printed as
1.xxxNaN, where 1.xxx is the float after replacing the exponent by `1'. Such numbers are read, resulting in the same
NaNconstant can also be produced using the function nan/0, e.g.,
?- A is nan. A = 1.5NaN.
Note that, compliant with the ISO standard, SWI-Prolog arithmetic (see section 4.27) never returns one of the above values but instead raises an exception, e.g.,
?- A is 1/0. ERROR: //2: Arithmetic: evaluation error: `zero_divisor'
There is one exception to this rule. For compatibility the functions
inf/0 and nan/0
1.0Inf and the default system
ability to create, read and write such values is primarily provided to
exchange data with languages that can represent the full range of IEEE