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

(→See Also) |
m (Tag: VisualEditor) |
||

Line 2: | Line 2: | ||

[[Category:Doc Status C]] <!-- For Lumina use, do not change --> | [[Category:Doc Status C]] <!-- For Lumina use, do not change --> | ||

− | + | '''Inf''', '''NAN''', and '''Null''' are special values, which can be very useful. Analytica returns them under conditions when it can't return a number. You can also type them directly into an expression or Edit table. | |

− | '''Inf''' means infinity -- e.g., | + | '''Inf''' means infinity, and is the result of dividing a positive number by zero -- e.g., |

:<code>1/0 → Inf</code> | :<code>1/0 → Inf</code> | ||

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

:<code>1E307 * 100 → Inf</code> | :<code>1E307 * 100 → Inf</code> | ||

− | '''-Inf''' means negative infinity (or a number less than 1.796E308) -- e.g. | + | '''-Inf''' means negative infinity, the result of dividing a negative number by zero (or a number less than -1.796E308) -- e.g. |

:<code>-1/0 → -Inf</code> | :<code>-1/0 → -Inf</code> | ||

− | '''NAN''' means "Not A Number" | + | '''NAN''' means "Not A Number". It is the result of a calculation that is not a well-defined number nor infinity -- e.g. |

:<code>0/0 → NAN</code> | :<code>0/0 → NAN</code> | ||

:<code>Sqrt(-1) → NAN</code> | :<code>Sqrt(-1) → NAN</code> | ||

Line 19: | Line 19: | ||

(If you enable [[Complex Numbers]], <code>Sqrt(-1)</code> returns the valid imaginary number, ''1j''.) | (If you enable [[Complex Numbers]], <code>Sqrt(-1)</code> returns the valid imaginary number, ''1j''.) | ||

− | '''Null''' means that there is no such value. For example, | + | '''Null''' means that there is no such value. For example, [[Subscript]] returns <code>Null</code> if the indexing value doesn't match a value of the Index: |

:<code>Index Year := [2015, 2016, 2017]</code> | :<code>Index Year := [2015, 2016, 2017]</code> | ||

Line 25: | Line 25: | ||

:<code>Variable X := Array(Year, [20, 23, 28])</code> | :<code>Variable X := Array(Year, [20, 23, 28])</code> | ||

:<code>X[Year = 2018] → NULL</code> | :<code>X[Year = 2018] → NULL</code> | ||

+ | You can also specify a different default result for an index value that doesn't match the index: | ||

+ | |||

+ | <code>X[Year = 2018, defValue: 0] → 0</code> | ||

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

− | Calculations using <code>INF</code> and <code>NAN</code> follow ANSI (Association of National Standards Institutes) | + | Calculations using <code>INF</code> and <code>NAN</code> follow ANSI (Association of National Standards Institutes) recommendations, which follow the laws of mathematics as far as possible: |

:<code>1/Inf → 0</code> | :<code>1/Inf → 0</code> | ||

:<code>1/(-Inf) → 0</code> | :<code>1/(-Inf) → 0</code> | ||

Line 47: | Line 50: | ||

:<code>1 AND NULL → NULL</code> | :<code>1 AND NULL → NULL</code> | ||

− | Array-reducing functions ignore <code>Null | + | [[Sum]], [[Min]], [[Max]], [[ArgMax]], [[JoinText]], [[Npv]], and other [[Array-reducing functions]] ignore <code>Null. For example:</code> |

:<code>Variable A :=</code> | :<code>Variable A :=</code> | ||

Line 70: | Line 73: | ||

:<code>JoinText(A, I, ', ') → "8, 4, 0"</code> | :<code>JoinText(A, I, ', ') → "8, 4, 0"</code> | ||

− | Graphs | + | Graphs also ignore (do not show) any point whose value is <code>Null</code>. |

− | Array-reducing functions | + | Some [[Array-reducing functions]], notably [[Sum]], [[Min]] and [[Max]] also accept an optional parameter «IgnoreNaN» to ignore <code>NaN</code> values (which otherwise propagate, i.e. return <code>NaN</code>). |

− | + | ||

[[Regression]] also ignores any data points which have <code>Y = Null</code>, which is useful for missing data. | [[Regression]] also ignores any data points which have <code>Y = Null</code>, which is useful for missing data. |

## Latest revision as of 19:25, 22 February 2019

**Inf**, **NAN**, and **Null** are special values, which can be very useful. Analytica returns them under conditions when it can't return a number. You can also type them directly into an expression or Edit table.

**Inf** means infinity, and is the result of dividing a positive number by zero -- e.g.,

`1/0 → Inf`

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

`1E307 * 100 → Inf`

**-Inf** means negative infinity, the result of dividing a negative number by zero (or a number less than -1.796E308) -- e.g.

`-1/0 → -Inf`

**NAN** means "Not A Number". It is the result of a calculation that is 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, Subscript returns `Null`

if the indexing value doesn't match a value of the Index:

`Index Year := [2015, 2016, 2017]`

`Slice(Year, 4) → NULL`

`Variable X := Array(Year, [20, 23, 28])`

`X[Year = 2018] → NULL`

You can also specify a different default result for an index value that doesn't match the index:

`X[Year = 2018, defValue: 0] → 0`

### More on INF and NAN

Calculations using `INF`

and `NAN`

follow ANSI (Association of National Standards Institutes) recommendations, 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`

Sum, Min, Max, ArgMax, JoinText, Npv, and other Array-reducing functions ignore `Null. For example:`

`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 also ignore (do not show) any point whose value is `Null`

.

Some Array-reducing functions, notably 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