Operations

Math, comparison, and logic operators apply the standard operations in Spectre. The following notes clarify some implementation details:

  • The operators and, or, and not work only with Boolean or null values.
  • Among numeric types, addition (+), subtraction (-), and the comparison operators all implicitly promote values to match data type. For example:
    • integer + fixed100 returns fixed100
    • fixed100 + double returns double
    • integer + double returns double
  • Multiplication (*) of integer and numeric type X returns type X; any other mix of numeric types returns a double. For example:
    • integer * fixed100 returns fixed100
    • integer * double returns double
    • fixed100 * double returns double
  • Division (/), except for division by zero, returns a double.
  • Division by zero returns an unknown.
  • On doubles, comparison operators have the standard accuracy issues.
  • The + operator can concatenate two strings, but does not promote other types to string.
  • Comparison operators, as well as addition and subtraction, work on dates.

Order of Operations

Operations in an expression are performed in the following order:

  • math: *, /
  • math: +, -
  • comparison: <, <=, >, >=
  • comparison: =, !=
  • logic: not, and, or

See also: