我已经制作了这个函数 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()。结果就像,对于它应该返回 3.0 的值,例如 rounds(2.7554),它只返回 2.5,这会影响我的整体准确性。单独它适用于所有值,即使 2.7554 在我通过它检查它的工作时返回 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 个值,结果仍然不精确,而如果我单独传递这些相同的值,它会给出正确的输出。请有人解决这个问题。提前致谢。