Difference between revisions of "INF, NAN, and Null"
m |
|||
(3 intermediate revisions by one other user not shown) | |||
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 42: | Line 45: | ||
=== More on NULL === | === More on NULL === | ||
− | When | + | When <code>Null</code> appears in scalar operations, it generally produces a warning and evaluates to <code>Null</code>, for example: |
:<code>10 + NULL → NULL</code> | :<code>10 + NULL → NULL</code> | ||
:<code>NULL - 10 → NULL</code> | :<code>NULL - 10 → NULL</code> | ||
:<code>1 AND NULL → NULL</code> | :<code>1 AND NULL → NULL</code> | ||
− | Array-reducing functions | + | [[Sum]], [[Min]], [[Max]], [[ArgMax]], [[JoinText]], [[Npv]], and other [[Array-reducing functions]] ignore <code>Null. For example:</code> |
+ | |||
+ | :<code>Variable A :=</code> | ||
:{| class="wikitable" | :{| class="wikitable" | ||
− | ! | + | ! colspan="5" style="text-align: left;" ! | I ▶ |
+ | |- | ||
+ | !|1 | ||
+ | !|2 | ||
+ | !|3 | ||
+ | !|4 | ||
+ | !|5 | ||
|- | |- | ||
− | + | |8 | |
+ | |NULL | ||
+ | |4 | ||
+ | |NULL | ||
+ | |0 | ||
|} | |} | ||
Line 58: | 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. | ||
+ | |||
+ | ==See Also== | ||
+ | * [[INF, NAN, and NULL - Exception values]] | ||
+ | * [[Undefined]] | ||
+ | * [[IsNaN]] | ||
+ | * [[IsNull]] | ||
+ | * [[Data_Type_Functions#Comparison_to_Null|Comparison to Null]] |
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