MATLAB Answers

Why is logical array fasle?

1 ビュー (過去 30 日間)
Hitesh Pradhan
Hitesh Pradhan 2021 年 6 月 15 日
回答済み: Kunal Kandhari 2021 年 6 月 15 日
SCRIPT WINDOW
g=9.8000 %value for g
p=3.14; %value of mathematical pie
k1=3.1210191*p
k1==g %generation of logical array
COMMAND WINDOW
g =
9.8000
k1 =
9.8000
ans =
logical
0

回答 (3 件)

Scott MacKenzie
Scott MacKenzie 2021 年 6 月 15 日
The result is false because k1 DOES NOT EQUAL g
Note that both k1 and g are scalars, not vectors. Therefore, the result of k1==g is a logical scalar which is false or 0.

Steven Lord
Steven Lord 2021 年 6 月 15 日
Floating point arithmetic. While k1 and g are displayed the same they do not contain the same value down to the last bit.

Kunal Kandhari
Kunal Kandhari 2021 年 6 月 15 日
It is because most decimal fractions are not exactly representable in binary form, just like 1/3 is not representable exactly in a finite number of decimal digits.
if you print 55 decimal places of both the variables you will get something like this:
sprintf('%0.55f',k1)
'9.7999999740000003356499291840009391307830810546875000000'
sprintf('%0.55f',g)
'9.8000000000000007105427357601001858711242675781250000000'
NEVER compare two floating point doubles for exact equality. Well, there are some notable exceptions. So unless you know the exceptions, then assume never applies.
You can see a very detailed description of the same here:

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by