Extreme difference between the value of a function and the result in matlab

1 visualización (últimos 30 días)
I tried to compute the value of the following function in matlab
format long
a=sqrt(4950000001);
b=30000;
y=333.75*b^6+a^2*(11*a^2*b^2-b^6-121*b^4-2)+5.5*b^8+a/(2*b);
fprintf("The value of y is: %f", y)
Output:
The value of y is: -590295810358705651712.000000>>
What confuses me, is that, if I try to compute the same value in Python for example or even with a normal calculator. The value is near 1.17, so far away from the output I get from matlab. I don't see why. Can anyone help? Did I maybe implement the function in a wrong way?
Note: I'm not sure which tags to add, so that this question is placed in the right place.

Respuestas (2)

Alan Stevens
Alan Stevens el 4 de Mzo. de 2021
Must hit an overflow. Express it as:
a=sqrt(4950000001);
b=30000;
r = (a/b)^2;
y1 = 333.75+r*(11*r - b^2 -121 - 2/b^4)+5.5*b^2 + r/(2*a*b^5);
y = b^6*y1;
and you get
y =
1.172603940074302

Steven Lord
Steven Lord el 4 de Mzo. de 2021
One of the terms in your expression involves b^8. For b = 30000 what is the value of that term?
b = 30000;
b8 = b^8
b8 = 6.5610e+35
That value is large enough that the spacing between b8 and the next largest number that can be represented in MATLAB is quite large.
d = eps(b8)
d = 7.3787e+19
(b8 + d) == b8 % false
ans = logical
0
(b8 + d/4) == b8 % true, and no this is NOT a bug
ans = logical
1
As an analogy, if you give Bill Gates a $20 bill it technically changes his net worth, but that amount of money is so small it's negligible and so for most practical purposes (like reporting in the media) his net worth doesn't change.
Now if you performed the calculations symbolically, we could represent those very large numbers exactly.
s8 = sym(b)^8
s8 = 
656100000000000000000000000000000000
s8p1 = s8 + 1
s8p1 = 
656100000000000000000000000000000001
logical((s8 + d/4) == s8) % false
ans = logical
0

Categorías

Más información sobre Logical en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by