how many significant figures matlab uses?

24 ビュー (過去 30 日間)
Osama Alkurdi
Osama Alkurdi 2020 年 11 月 1 日
編集済み: Bruno Luong 2020 年 11 月 1 日
i read that matlab uses 16 significant figures, but look at the picture below it show that matlab uses 16 significant figures, and then uses 17 significant figures, can anyone explain to me how many significant figures that matlab uses during the calculation and how many significant figures matlab stores in the memory, please dont give me links.
i am very confused can any one explain this topic to me simply because i need it for my college project.

採用された回答

Bruno Luong
Bruno Luong 2020 年 11 月 1 日
編集済み: Bruno Luong 2020 年 11 月 1 日
MATLAB does not work directly on digit. MATLAB uses IEEE 754 BINARY storage which is 52-bit (relative) precision.
Which is
>> 2^-52
ans =
2.2204e-16
>> eps(1)
ans =
2.2204e-16
It's somewhere between 15 and 16 digits.
The digit displayed on screen is just for human who use to digital numbers. It occur when user inquires the value on computer screen.
When display all screen you might see 16 or 17 digits by default in format long, but keep in mind it might be only an approximate of the binary coding.
And you can display even more. The numbers do not mean anything terribly meaningful after 16 digits. It just gives the exact digital conversion (up-to the last non-zero digit) of 52-bit of 2-radix coding
>> fprintf('%1.100f\n',pi)
3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000
-----------------xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
>> fprintf('%1.100f\n',1/3)
0.3333333333333333148296162562473909929394721984863281250000000000000000000000000000000000000000000000
------------------xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Whereas those trailing digits marked by xxxx matter, it's your appreciation. People throw them away because it's smaller than the quantification error. But the approximated value of 1/3 under MATLAB is actually
0.333333333333333314829616256247390992939472198486328125
(Note that any finite bit number in base 2 must be finite in base 10 since 2|10)
  3 件のコメント
Walter Roberson
Walter Roberson 2020 年 11 月 1 日
A couple of months ago someone posted something that showed that in some cases you need 17 decimal digits to get the rounding right to the final bit.
Bruno Luong
Bruno Luong 2020 年 11 月 1 日
編集済み: Bruno Luong 2020 年 11 月 1 日
What does "get the rounding right to the final bit" exactly means?
I claim that for any double (x) in [0.5,1) this code always returns FALSE
num2digit=@(x)sprintf('%0.16f', x);
c0=num2digit(x);
c1=num2digit(x+eps(x));
isequal(c0,c1)
and this always returns TRUE
num2digit=@(x)sprintf('%0.16f', x);
c0=num2digit(x);
str2double(c0)==x
However if one consider to relax x bracket in [0.1,0.5) one need 17 digits to replicate x
x = 11/5/5
num2digit= @(x,n)reshape(sprintf(['%0.' num2str(n) 'f'], x),[],length(x))';
c16=num2digit(x,16) % '0.4400000000000001'
c17=num2digit(x,17) % '0.44000000000000006'
str2double(c16)==x % false
str2double(c17)==x % true
This is no surprise since
>> eps(x)
ans =
5.551115123125783e-17
So the last significant bit of x (=0.44000000000000006) is at 17 (fractional) digits

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

タグ

製品


リリース

R2018a

Community Treasure Hunt

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

Start Hunting!

Translated by