When with rounding and precision

2 vues (au cours des 30 derniers jours)
Daulton_Benesuave
Daulton_Benesuave le 18 Fév 2016
Commenté : MHN le 19 Fév 2016
I am calculating the following: p15 = 0.8683*1.15
When I round to 5 decimal places round(p15,5) the answer is 0.99854 since Matlab sees full precision as 0.9985449999999999.
You can confirm this by typing sprintf('%1.30f',.8683*1.15)
ans = 0.998544999999999900000000000000
Unfortunately, I need to match the output of a standard calculator (don't ask why) and need to have the output as 0.99855. How is this possible via Matlab?

Réponse acceptée

Walter Roberson
Walter Roberson le 19 Fév 2016
round(p15 * 1e6)/1e6
By the way, you cannot see the full precision on MS Windows by using sprintf(), but you can on OS-X
0.99854499999999990489385481851059012115001678466796875

Plus de réponses (1)

MHN
MHN le 18 Fév 2016
What you said is not true! for multiplication the exact number is : 0.998545000000000
p15 = 0.8683*1.15;
r = round(p15,5);
then p15 = 0.998545000000000 and r = 0.998550000000000.
  5 commentaires
Walter Roberson
Walter Roberson le 19 Fév 2016
The MS Windows version of the C library is rubbish at printing out complete numbers. The Linux version is better now but there was historically a period during which the library used for it had an error in extended printing. I do not know of the OS-X library has always been correct, but I do not recall hearing of any problems for it in this regard.
MHN
MHN le 19 Fév 2016
I did not mean that there is a "problem" in sprintf. I meant even when we just assign a value like a=0.1; and then we use sprintf('%1.50f',a) the exact value is not 0.1. So, as long as one use sprintf and the floating point system, it will not get the result 0.100000000000000000000000000000000000000000.

Connectez-vous pour commenter.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by