Why 0.6+0.3+0.1-1 is -1.11022302462516e-16, not 0 ? why?? A serials bug??

8 visualizzazioni (ultimi 30 giorni)
0.6+0.3+0.1-1
  1 Commento
denny
denny il 9 Set 2019
Modificato: denny il 26 Feb 2025
This is a bug? this is bucase the numeric calculation in a computer.
You can use a fraction to calculate it.

Accedi per commentare.

Risposte (1)

cdarling
cdarling il 4 Giu 2025
As a numerical calculation software, MATLAB stores data as double data type by default.
IEEE-754 is the standard for double data type.
This may better explained by the following code:
>> num2hex(0.1)
ans =
'3fb999999999999a'
>> num2hex(0.1+0.1+0.1)
ans =
'3fd3333333333334'
>> num2hex(0.3)
ans =
'3fd3333333333333'
If you need to calculate the theoretical value, you may try Symbolic Math Toolbox:
sym('0.6')+sym('0.3')+sym('0.1')-sym('1')

Categorie

Scopri di più su 建模 in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!