# Difference between revisions of "INF, NAN, and Null"

m |
m |
||

Line 6: | Line 6: | ||

'''Inf''' means infinity -- e.g., | '''Inf''' means infinity -- e.g., | ||

:1/0 → Inf | :1/0 → Inf | ||

− | or a number larger than 1.796E308 ( | + | or a number larger than 1.796E308 (the largest number that your computer can represent explicitly) -- e.g. |

:1E307 * 100 → Inf | :1E307 * 100 → Inf | ||

'''-Inf''' means negative infinity -- e.g., | '''-Inf''' means negative infinity -- e.g., | ||

Line 26: | Line 26: | ||

=== More on INF and NAN === | === More on INF and NAN === | ||

− | Analytica follows ANSI (Association of National Standards Institutes) standards for | + | Analytica follows ANSI (Association of National Standards Institutes) standards for calculations using these special values: |

:1/Inf → 0 | :1/Inf → 0 | ||

:1/(-Inf) → 0 | :1/(-Inf) → 0 | ||

Line 32: | Line 32: | ||

:Inf - Inf → NAN | :Inf - Inf → NAN | ||

− | NAN as an operand or parameter | + | Expressions taking NAN as an operand or parameter may not generate NAN as the result if the expression has a well-defined logical or numerical value for any value of NAN: |

:True OR NAN → True | :True OR NAN → True |

## Revision as of 17:16, 9 July 2015

These are special values that Analytica returns in particular conditions. You can also use them in expressions:

**Inf** means infinity -- e.g.,

- 1/0 → Inf

or a number larger than 1.796E308 (the largest number that your computer can represent explicitly) -- e.g.

- 1E307 * 100 → Inf

**-Inf** means negative infinity -- e.g.,

- -1/0 → -Inf

or a number less than 1.796E308

**NAN** means "Not A Number" -- i.e. not a well-defined number nor infinity -- e.g.

- 0/0 → NAN
- Sqrt(-1) → NAN

(If you enable Complex Numbers, Sqrt(-1) returns the valid imaginary number, 1j.)

**Null** means that there is no such value. For example, Slice and Subscript return Null if you try to get the nth slice over an Index with less than n values. For example:

- Index Year := [2015, 2016, 2017]
- Slice(Year, 4) → NULL
- Variable X := Array(Year, [20, 23, 28])
- X[Year = 2018] → NULL

### More on INF and NAN

Analytica follows ANSI (Association of National Standards Institutes) standards for calculations using these special values:

- 1/Inf → 0
- 1/(-Inf) → 0
- Inf + Inf → Inf
- Inf - Inf → NAN

Expressions taking NAN as an operand or parameter may not generate NAN as the result if the expression has a well-defined logical or numerical value for any value of NAN:

- True OR NAN → True
- NaN AND False → False
- IF True THEN 5 ELSE NAN → 5

### More on NULL

When NULL appears in scalar operations, it generally produces a warning and evaluates to NULL, for example:

- 10 + NULL → NULL
- NULL - 10 → NULL
- 1 AND NULL → NULL

Array-reducing functions ignore NULL. These examples demonstrate (assume A is indexed by I as indicated).

I: 1 2 3 4 5 A: 8 NULL 4 NULL 0

Graphs will simply ignore (not show) any point whose value is NULL.

Array-reducing functions include Sum, Min, Max, ArgMin, ArgMax, Product, Average, JoinText, Irr, Npv.
Array functions Sum, Min and Max also accept an optional parameter *IgnoreNaN* to ignore NaN values (which otherwise propagate, i.e. return NaN).

Regression also ignores any data points which have Y=Null, which is useful for missing data.

Enable comment auto-refresher