Increase precision of digits
Show older comments
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.
Accepted Answer
More Answers (2)
Titus Edelhofer
on 14 Jan 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 Comments
adi
on 8 Dec 2019
hey,
i have the exact problem you described.
how can i fix it?
thanks
Rik
on 8 Dec 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
on 8 Dec 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
on 8 Dec 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
on 9 Dec 2019
thank you!
Guillaume
on 14 Jan 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 Comments
Titus Edelhofer
on 14 Jan 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
on 14 Jan 2015
Edited: John D'Errico
on 14 Jan 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
Categories
Find more on Logical in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!