How do I increase precision in my variables
77 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Marco Stenborg Petterson
el 9 de Dic. de 2018
Respondida: John D'Errico
el 9 de Dic. de 2018
I am working with a large number of observations and I noticed that after a certain threshold I am having some problems of approximation.
An example of the kind of problem I think I have is the following:
rng(1991)
test=rand(100000,1);
out1=sum(test);
out2=ones(1,100000)*test;
out1-out2
ans =
2.4738e-10
I sum a large vector once using the function provided by Matlab and once with an equivalent matrix formulation. Which of the two should I trust? Is there a way to increase the precision of one of the two such that they coincide.
The problem I am actually considering is more complicated and involves taking a gradient of a likelihood. I noticed that there was then a disparity between the numerical gradient calculated by Matlab and the variable assigned to the analytical formula of the gradient I calculated. I am using a HMCSampler and therefore Matlab gives me a warning that the two do not coincide.
I would very much appreciate it if someone could give me some hints on how to approach this difference.
Thank you very much in advance.
0 comentarios
Respuesta aceptada
Rik
el 9 de Dic. de 2018
This has to do with the way Matlab stores non-integer values: as floating point numbers. With the eps function you can retrieve the precision: 2.2204e-16
So in you case the value you are getting is within the 'rounding' error. There usually isn't a solution, except to avoid comparing values that span a large number of order of magnitude. You can use functions like ismembertol to mitigate the problems this causes.
Sometimes it is possible to remove a step in your calculation that converts to small number and back, which may cause issues with rounding errors becoming significant.
0 comentarios
Más respuestas (1)
John D'Errico
el 9 de Dic. de 2018
- You cannot increase the precision of a variable. Double is it. Unless you want to DECREASE precision, and then you can go to a single.
- No matter what, even if the precision were increased to be 100 digits or more, there will still be differences, because of the nature of floating point arithmetic.
So the answer is to never trust the least significant bits of a number computed in floating point. At least not unless you know enough about floating point arithmetic to know why you should never trust those bits. Its sort of a circular thing.
The solution is to learn to use tolerances, and not test for exact equality between floating point numbers.
0 comentarios
Ver también
Categorías
Más información sobre Logical 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!