Loop Trough Time t = t+dt

I have a simple code like this
t = 1380;
dt = 0.1
for i = 1:1000
t = t+dt;
disp(t)
end
I believe the answer should be obvious that the final answer should be
t = 1480. I dont know why Matlab shows the answer a little bit different which is 1479.99999999991.
Anyone know why?

Respuestas (1)

Star Strider
Star Strider el 13 de Nov. de 2019

2 votos

You have encountered floating-point approximation error.
See the documentation section on Floating-Point Numbers, and the colon operator.

3 comentarios

Obaja Triputera Wijaya
Obaja Triputera Wijaya el 18 de Nov. de 2019
Is there anything that we can do? because inside the loop, I would like to add If statement.
if t == 1400
a = 2
end
but the problem is the t nver reach that value because of the floating error
Star Strider
Star Strider el 18 de Nov. de 2019
Yes.
Change it to:
if abs(t - 1400) < 0.05
a = 2
end
Since the code counts up by ‘dt’, this will introduce a tolerance in the calculation, so the floating-point approximation error are taken into account.
To see this graphically:
t = linspace(1399, 1401);
figure
plot(t, (abs(t - 1400) < 0.05))
grid
That will show the effect of using the inequality to test for a range of values for ‘t’ near 1400.
Experiment to get the result you want.
darova
darova el 18 de Nov. de 2019
Don't use equal sign for float numbers
if abs(t-1400) < 1e-6 % tolerance
a = 2;
end

Iniciar sesión para comentar.

Categorías

Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 13 de Nov. de 2019

Comentada:

el 18 de Nov. de 2019

Community Treasure Hunt

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

Start Hunting!

Translated by