我怎样才能在 MATLAB 中使我的 rounds() 函数在一次处理大约 400 个值时非常精确?

How can i make my rounds() function in MATLAB, be very precised when handling around 400 values at a time?

我制作了这个函数 rounds() ,它将值舍入到最接近的 0.5 的倍数,即 rounds(2.685)=2.5 rounds(2.332)=2.5 rounds(2.7554)=3.0 rounds(2.245)=2.0它以上述方式运行良好,但在处理大量值时精度下降。它没有给我想要的结果。我有 30 个函数,每个函数计算 14 个值,我将这些值作为包含这 14 个值的整个向量传递给 rounds() 。结果就像,对于它应该 return 3.0 的值,例如 rounds(2.7554),它只有 returns 2.5,这对我的整体准确性有很大影响。当我通过它来检查其工作时,它单独适用于所有值,甚至 2.7554 returns 3.0。谁能告诉我为什么会发生这种情况,即在处理大量值时其性能会下降,并告诉我解决方案。

 function [newVal] = rounds(x) 
   dist = mod(x, 0.5); 
   floorVal = x - dist; 
   if  dist  >=0.25
     newVal = floorVal + 0.5;      
   else
     newVal = floorVal;
   end
 end 

上面是回合函数,下面我展示了我是如何使用它的。

if true
  calc(1) = x+y;
  calc(2) = x-y;
  calc(3) = x*y+a;
  .......
  .......
  .......
  calc(14) = a+b*c+x;
  calc = calc';
  final_calc = rounds(calc);
end

即使在单个函数中,rounds 函数一次只处理 14 个值,结果仍然不精确,而如果我单独传递这些相同的值,它会给出正确的输出。请有人解决这个问题。提前致谢。

function [newVal] = rounds2(x)
  newVal = round(x/0.5)*0.5;
end

这是我苦苦思索了很长时间的问题,但现在我有了一个完美的答案。发生这种情况是因为我将向量表达式 dist >= 0.25 传递给 if...end,错误地认为 if...end 将针对 x(i) 的每个元素单独求值。希望对其他人也有帮助