Increase precision of digits
이전 댓글 표시
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.
채택된 답변
추가 답변 (2개)
Titus Edelhofer
2015년 1월 14일
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
adi
2019년 12월 8일
hey,
i have the exact problem you described.
how can i fix it?
thanks
Rik
2019년 12월 8일
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
2019년 12월 8일
i have 1+7e-6
and it gives me 1 , im dealing with electric fields and i need to have high resolution.
thanks
Rik
2019년 12월 8일
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
2019년 12월 9일
thank you!
Guillaume
2015년 1월 14일
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
Titus Edelhofer
2015년 1월 14일
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
2015년 1월 14일
편집: John D'Errico
2015년 1월 14일
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
카테고리
도움말 센터 및 File Exchange에서 Logical에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!