- use MATLAB's Symbolic Toolbox, which has a lot of similarities to Maple (but is not Maple)
- Use John D'Errico's High Precision Decimal contribution; https://www.mathworks.com/matlabcentral/fileexchange/36534-hpf-a-big-decimal-class
- Possibly use John D'Errico's Variable Precision Integer contribution; https://www.mathworks.com/matlabcentral/fileexchange/22725-variable-precision-integer-arithmetic
Why 999^999-999^999 is NaN?
3 次查看(过去 30 天)
显示 更早的评论
The reason i'm asking this because of i'm working on Adam-Bashforth with 20 steps. It has a big number. Maybe has 20 digits? I don't know, i'm not count the digit.
But as you know, the ABM use the constant to evaluate the ODE with initial condition. And it has alternating form like plus and minus.
And when i use the ABM-7, it's fine, there is no calculation involving Inf and NaN. But, when i use ABM-20 which is has a big constant in each , it turns out in iteration 38th, it changed into,*Inf*. And as i said before, the formula in ABM has alternating plus and minus. And it's possible to adding and substracting "Inf" on it.
And we know, if we type Inf-Inf in command window, it will be NaN isn't it?
Why it's happen?
And i'm sure there is no mistake about my formula. I derive the formula by myself with maple, and checked it the first term to make ABM-8, and it's match with my book, so i'm sure there is no mistake on my formula.
My main question is :
If we dealing with a formula or a function, that has very large constant, is it possible it gives us NaN as the result?
Thanks
0 个评论
回答(2 个)
Walter Roberson
2019-12-18
If we dealing with a formula or a function, that has very large constant, is it possible it gives us NaN as the result
Yes, certainly.
>> log10(999)*999
ans =
2996.56592273776
That is, 999^999 would be 10^2996.56592273776 which far exceeds 10^308.254715559917 that is the maximum value that can be stored in IEEE double precision.
If you cannot work with log space, then you have a few options:
0 个评论
David Goodmanson
2019-12-18
HI Fahmy,
>> realmax
ans = 1.7977e+308
That's the largest floating point number in Mallab, which uses IEEE754 64 bit double precision. For anything larger,
>> 1e309
ans = Inf
and of course inf - inf will give NaN.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!