Why is logical array fasle?

4 ビュー (過去 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:

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by