Doesn't show the result as an integer even though the result of the operation is an integer

3 次查看(过去 30 天)
clear all; clc; %close all;
global ii
dt=0.0001; %time step
t_final=2.27; % final time
Nt=t_final/dt; % last time
In the code above when t_final value is 2.25 or 2.27, Nt is an integer. As a matter of fact, the result is an integer. but why the result is not an integer when t_final value is 2.26.
t_final=2.26;
t_final=2.27;
  2 个评论

请先登录,再进行评论。

回答(3 个)

the cyclist
the cyclist 2023-12-27
编辑:the cyclist 2023-12-27
See, for example, this question and answer.

Walter Roberson
Walter Roberson 2023-12-27
dt=0.0001;
fprintf('%.99g\n', dt)
0.000100000000000000004792173602385929598312941379845142364501953125
t_final=2.26;
fprintf('%.99g\n', t_final)
2.2599999999999997868371792719699442386627197265625
Nt = t_final ./ dt;
fprintf('%.99g\n', Nt)
22599.99999999999636202119290828704833984375
So you divide something that is not quite 226/100 by something that is not exactly 1/10000 and you get a result that is not quite 22560 .
You have made the mistake of thinking that MATLAB stores numbers in base 10. MATLAB uses the IEEE 754 Double Precision standard to store numbers.
  2 个评论
David Goodmanson
David Goodmanson 2023-12-28
编辑:David Goodmanson 2023-12-28
Hi Yasin,
To supplement what Walter is saying, it's interesting to go to formax hex, which shows what is actually stored in memory. In IEEE 754 double precision a real number consists of 8 bytes = 64 binary digits. (Not all of the digits contribute to digits of the actual number since you need some to represent a floating point exponent, the algebraic sign, NaN ,inf etc). There are 2^64 possible values, which is 16 hexidecimal digits since 2^64 = 16^16. So
format hex
.0001
ans = 3f1a36e2eb1c432d
as opposed to a power of 2 of around the same size
2^(-13) % 1/8192
ans = 3f20000000000000
Clearly the representation of .0001 is truncated and approximate, whereas the representation of 2^-13 is exact.

请先登录,再进行评论。


Image Analyst
Image Analyst 2023-12-28

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by