When with rounding and precision
Mostrar comentarios más antiguos
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?
Respuesta aceptada
Más respuestas (1)
MHN
el 18 de Feb. de 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 comentarios
Daulton_Benesuave
el 18 de Feb. de 2016
You are right. It is an interesting question. And it seems round(p15 * 1e6)/1e6 is not the answer neither. Also it seems that it depends on Matlab version or OS that you are using, since I recieve 0.998544999999999904893854818511 for sprintf('%1.30f',.8683*1.15). But the problem is a little bigger! Consider this code:
a = 0.1;
sprintf('%1.50f',a)
the result is 0.10000000000000000555111512312578270211815834045410. So, the problem is not in multiplication or rounding. I am interested in numerical issues which rises beacuse of using floating point and I hope you can find your answer. If you have limited time and you can not find your answer, I suggest you to take a look at Fixed-point in Matlab.
MHN
el 19 de Feb. de 2016
Walter Roberson
el 19 de Feb. de 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
el 19 de Feb. de 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.
Categorías
Más información sobre Geographic Plots en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!