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

(→See Also) |
|||

Line 78: | Line 78: | ||

==See Also== | ==See Also== | ||

+ | * [[INF, NAN, and NULL - Exception values]] | ||

* [[Undefined]] | * [[Undefined]] | ||

* [[IsNaN]] | * [[IsNaN]] | ||

* [[IsNull]] | * [[IsNull]] | ||

* [[Data_Type_Functions#Comparison_to_Null|Comparison to Null]] | * [[Data_Type_Functions#Comparison_to_Null|Comparison to Null]] |

## Revision as of 19:44, 25 March 2016

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 *n*th 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.

Enable comment auto-refresher