0

我正在尝试比较 if 语句中的三个数字,但即使它们相同,它们也不匹配。

这是命令窗口中的数字,

>> a = (round2(final_aucscore(10, 1),1e-4))

a =

    0.9369

>> b = (round2(final_aucscore(10, 2),1e-4))

b =

    0.9598

>> c = (round2(final_aucscore(10, 3),1e-4))

c =

    0.9509

该函数round2可在此处的文件 echange 中找到。

这是我的代码:

for mmm = 1:265

    a = (round2(final_aucscore(mmm, 1),1e-4));
    b = (round2(final_aucscore(mmm, 2),1e-4));
    c = (round2(final_aucscore(mmm, 3),1e-4));
    if   a == 0.9369 && b == 0.9598 && c == 0.9509
        auc_idx = idx(1:kk);
        save('auc_idx', 'auc_idx', 'mmm');
        break;
    end
end

它不应该在什么时候停止并保存mmm = 10吗?

4

2 回答 2

2

每个计算机科学家都应该了解浮点运算。读它并哭泣。

于 2013-07-26T21:58:16.853 回答
2

您在这里面临的问题来自舍入误差。试试这个

foo = 0.9369;
bar = (round2(foo,1e-4));
disp(bar == foo)
disp(foo-bar)

您可以改为创建一个函数来仅在一定精度内进行比较。

于 2013-07-26T22:00:26.817 回答