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

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 (or a number less than 1.796E308) -- e.g.

`-1/0 → -Inf`

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

Calculations using `INF` and `NAN` follow ANSI (Association of National Standards Institutes) standards, which follow the laws of mathematics as far as possible:

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

Expressions taking `NAN` as an operand or parameter give `NAN` as their result unless 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).

`Variable A :=`
I ▶
1 2 3 4 5
8 NULL 4 NULL 0
`Sum(A, I) → 12`
`Average(A, I) → 4`
`JoinText(A, I, ', ') → "8, 4, 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.