Issue with precision using days function
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Rub Ron
el 19 de En. de 2020
I have a varriable x (this x was generated by reading an excel file). Using variable explorer I can see: x=0.465277777777778.
If I do the following:
y = days(0.465277777777778);
y.Format = 'hh:mm:ss'
I get:
11:10:00
Which is correct, as it is in the excel file. However, when instead I use the variable, like this
y=days(x) =
y.Format 'hh:mm:ss'
I get:
11:09:59
As you see there is a second of difference. How can I fix this so that I get the correct value (11:10:00) using the variable x?
Obs: when I get do x - 0.465277777777778, I get -2.775557561562891e-16. So I think it has to do with precision.
I appreciate any hint. Thanks
0 comentarios
Respuesta aceptada
Adam Danz
el 19 de En. de 2020
Editada: Adam Danz
el 19 de En. de 2020
0.465277777777778<---this 8 is rounded up.
Look at how the following 2 values are converted
x=0.465277777777778 % = 11:10:00
x=0.4652777777777777 % = 11:09:59
The difference between Matlab and Excel can be explained either by 1) a different level of precision between the two programs or 2) due to round-off error associated with floating point decimals when the value was imported into matlab.
If you want to round to the nearest second,
x=0.4652777777777777;
y = days(round(x,5));
y.Format = 'hh:mm:ss' % = 11:10:00
3 comentarios
Adam Danz
el 19 de En. de 2020
Editada: Adam Danz
el 19 de En. de 2020
If the excel represents 11:10:00 precisely as 0.46527777777777773, why does it come out out to 11:09:59.999 in Matlab?
x = 0.46527777777777773
y = days(x);
y.Format = 'hh:mm:ss.SSS' % = 11:09:59.999
The difference might be that the precision for a specified number in Excel is confined to 15 significant figures, although it can display up to 30. Matlab, on the other hand, uses 16 digits of precision.
In the floating point decimal below, the 15th digit is underlined and in bold.
0.46527777777777773460
When they are converted to durations in Matlab,
x1 = 0.465277777777778; % 15 digits, rounded
x2 = 0.4652777777777777; % 16 digits, rounded
y1 = days(x1); y1.Format = 'hh:mm:ss.SSS' % = 11:10:00.000
y2 = days(x2); y2.Format = 'hh:mm:ss.SSS' % = 11:09:59.999
*I'm no expert in floating decimal point representation, just an enthusiast. So perhaps someone more familiar with this topic will confirm or correct my explanation.
Más respuestas (0)
Ver también
Categorías
Más información sobre Dates and Time en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!