2.16.1 ISO Syntax Support
AllApplicationManualNameSummaryHelp

  • Documentation
    • Reference manual
      • Overview
        • The SWI-Prolog syntax
          • ISO Syntax Support
            • Processor Character Set
            • Nested comments
            • Character Escape Syntax
            • Syntax for non-decimal numbers
            • Using digit groups in large integers
            • NaN and Infinity floats and their syntax
            • Force only underscore to introduce a variable
            • Unicode Prolog source
            • Singleton variable checking
    • Packages

2.16.1.6 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,

  • Infinity is printed as 1.0Inf or -1.0Inf. Any sequence matching the regular expression [+-]?\sd+[.]\sd+Inf is 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 NaN. The NaN constant 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 return 1.0Inf and the default system NaN. The ability to create, read and write such values is primarily provided to exchange data with languages that can represent the full range of IEEE doubles.