控制分割精度

Adr*_*aan 6 precision matlab

考虑以下简单划分:

A=8.868;
A/0.1
ans =
  88.679999999999993
Run Code Online (Sandbox Code Playgroud)

由于浮点精度,这会导致一个小错误.有没有办法防止这种情况发生?基本上我所做的就是将逗号移到一个位置,同时不接近MATLAB中允许的最大位数.

我想获得一个结果:

A/0.1
ans =
  88.68
Run Code Online (Sandbox Code Playgroud)

尾随零无关紧要,只要它们只为零,并且不包含第14位左右的某个数字.

有趣的是,当舍入到N数字时,这个问题也会弹出:

R = (randi([8659 49847],[1e3 1]))/1e3;
xmin = min(R);
el = 0.1;
step = 1/el;
tmp1=xmin/el;
tmp2=round(tmp1);
tmp3=round(tmp2*el,3);

tmp3 =
   8.699999999999999
Run Code Online (Sandbox Code Playgroud)

Dan*_*iel 6

使用符号数学,您可以获得精确的结果:

x=sym('8.868')/sym('.1')
Run Code Online (Sandbox Code Playgroud)

  • 符号数学非常慢,对于这样的数据大小可能是不可能的. (2认同)

And*_*ein 5

您总是可以使用定点算术,其中斜率是10的倍数.当乘以/除以10时,您将不会有任何不准确之处.在Matlab中,您可以使用Fixed Point Toolbox

编辑:在您的评论之后 - 看起来您可以将斜率设置为0.05.