comparison of double numbers

2 ビュー (過去 30 日間)
Pavel
Pavel 2012 年 7 月 25 日
I just try to compare two double numbers:
q = 0.1:0.05:0.7;
q(2) == 0.15
I have "false". Ok, print this number into "txt" file:
fprintf(fileID,'%99.99e\n',q(2));
And i see follow:
1.500000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01
Why the "2"(exactly)?
  1 件のコメント
Wayne King
Wayne King 2012 年 7 月 25 日
Why the "2" exactly? Can you clarify?

サインインしてコメントする。

回答 (1 件)

Jan
Jan 2012 年 7 月 25 日
編集済み: Jan 2012 年 7 月 25 日
An evergreen question.
You find over a hundred of related posts in this forum, when you search for "faq6.1".
Matlab (as other numerical software) stores the values as IEEE 754 format using 64 bits. Printing 99 decimals does not reveal the underlying limitation, that not all decimal numbers have an exact binary representation.
  3 件のコメント
Jan
Jan 2012 年 7 月 25 日
You are welcome, Pavel. This problem is not intuitively clear to beginners in numerical computations. But it is fundamental and appears such frequently, that it should appear 8 times in the FAQ. But even then it is a well known phenomenon, that the FAQ is not read by beginners, but maintained by profis.
Walter Roberson
Walter Roberson 2012 年 7 月 25 日
There is a bug in MATLAB's fprintf() on MS Windows that causes it not to print out all the decimal places. Please see the FEX contribution num2strexact

サインインしてコメントする。

カテゴリ

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

Community Treasure Hunt

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

Start Hunting!

Translated by