Increase precision of digits
Mostrar comentarios más antiguos
I am dealing with numbers around 10^-18. Matlab type double only handles up to 10^-15. Is there a way to increase the number of digits? Many thanks.
Respuesta aceptada
Más respuestas (2)
Titus Edelhofer
el 14 de En. de 2015
Hi Tobi,
this is not really true:
x = 2e-127;
y = 3e-126;
x*y
ans =
6.0000e-253
I think you mix up the size of numbers and precision? Could it be that your problem is more like
a = 1+1e-18
a =
1
Titus
5 comentarios
adi
el 8 de Dic. de 2019
hey,
i have the exact problem you described.
how can i fix it?
thanks
Rik
el 8 de Dic. de 2019
Do you really need such a large range of decimal precision?
Possible solutions if you indeed need this are linked in several comments in this thread.
adi
el 8 de Dic. de 2019
i have 1+7e-6
and it gives me 1 , im dealing with electric fields and i need to have high resolution.
thanks
Rik
el 8 de Dic. de 2019
No, it only displays as a 1. Try the code below to see that 7 digits is not an issue at all.
val=1+7e-6;
clc
fprintf('%.8f\n',val)
adi
el 9 de Dic. de 2019
thank you!
Guillaume
el 14 de En. de 2015
Due to the way double values are stored the accuracy of a double value depends on its magnitude. At 1e-18, that accuracy is around 2e-34:
>> eps(1e-18)
ans =
1.92592994438724e-34
Of course, if the magnitude increases, the accuracy decreases.
>>eps(10)
ans =
1.77635683940025e-15
There is no floating-point data type in matlab with more accuracy than double.
If you want fixed accuracy regardless of the magnitude of the number, you have to use a fixed-point data type (double is floating point). I believe there is a matlab toolbox for that but I don't know anything about it.
>>n = java.math.BigDecimal(java.math.BigInteger('1'), 24)
n =
1E-24
>>m = n.add(java.math.BigDecimal(10))
m =
10.000000000000000000000001
2 comentarios
Titus Edelhofer
el 14 de En. de 2015
Or use variable precision arithmetic from symbolic toolbox, if you need more (relative) accuracy. http://www.mathworks.com/help/releases/R2014b/symbolic/vpa.html
But I would suggest to let us know some more details, most often 16 digits should be enough ...
Titus
John D'Errico
el 14 de En. de 2015
Editada: John D'Errico
el 14 de En. de 2015
Or use my HPF toolbox , which does allow your choice of higher precision in a floating point form. It is on the file exchange.
So in 100 decimal digits of precision...
exp(hpf('1.23',100))
ans =
3.421229536289673573790152351452246322159257631512470074140348979345525540446010876820674847912376597
log(ans)
ans =
1.23
Categorías
Más información sobre Logical en Centro de ayuda y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!