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 (due to computer limitations) -- e.g.  
+
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 computing with these special values, where applicable.
+
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 value does not always generate NAN as the result if the expression has a well-defined logical or numerical value no matter what the value of 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
 
: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
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.

Comments


You are not allowed to post comments.