How to avoid issues like integer overflow in models based on differential equations with some states values ranging from 10^12 to 10^-12 ?
use floating point numbers instead of integers. E.G. 1e12
(or 10.0^12
)
6 Likes
Perhaps this?
help?> Base.Checked
Checked
The Checked module provides arithmetic functions for the built-in
signed and unsigned Integer types which throw an error when an
overflow occurs. They are named like checked_sub, checked_div, etc.
In addition, add_with_overflow, sub_with_overflow,
mul_with_overflow return both the unchecked results and a boolean
value denoting the presence of an overflow.
Also discussed here.
I think the simplest solution in this case is to use floating point numbers, as mentioned in the first reply. Although I don’t know the details, I guess that Float64
is used throughout the computation anyway. Checked arithmetic for integers introduces more complication than necessary.
For values up to 10^12
an Int64
is fine, 10^12
uses roughly 40 bits, and Int64
has 64 bits. However, does not make any sense to worry about integer overflow if your values are not integers, and 10^-12
most certainly is not an integer, you can only be using Float64
here anyway.
3 Likes