【问题标题】:Unexpected computation result [duplicate]意外的计算结果[重复]
【发布时间】:2014-12-01 05:43:21
【问题描述】:

这是我的全部功能:

function val = deceptive_3_nd_function( arr )
    alpha = [0.3 0.7];
    beta = 0.2;

    val = zeros(size(arr,1),1);
    for part=1:size(arr,1)
        for i=1:size(arr,2)
            if 0 <= arr(part, i) && arr(part, i) <= 4/5*alpha(i);
                val(part) = val(part) - arr(part, i)/alpha(i) + 4/5;
            elseif 4/5*alpha(i) < arr(part, i) && arr(part, i) <= alpha(i)
                val(part) = val(part) + 5*arr(part, i)/alpha(i) - 4;
            elseif alpha(i) < arr(part, i) && arr(part, i) <= (1+4*alpha(i))/5
*               a_ = 5.0 * ( arr(part, i) - alpha(i) );
*               b_ = alpha(i)-1.0;
*               c_ = a_/b_;
*               val(part) = val(part) + c_ + 1.0;
            elseif (1+4*alpha(i))/5 < arr(part, i) && arr(part, i) <= 1
                val(part) = val(part) + (arr(part, i)-1)/(1-alpha(i)) +4/5;
            end
        end
        val(part) = -(1/size(arr, 2)*val(part))^beta;
    end
end

在标有星号的行中得到了意想不到的结果。正如你所看到的,我试图找出一个问题,这就是它导致我的原因:

K>> arr(part, i)

ans =

    0.7600

K>> arr(part, i)==0.76

ans =

     1

K>> alpha(i)

ans =

    0.7000

K>> alpha(i)==0.7

ans =

     1

K>> arr(part, i) - alpha(i)

ans =

    0.0600

K>> arr(part, i) - alpha(i) == 0.06

ans =

     0

为什么会发生这种情况..?

【问题讨论】:

  • 浮点表示。尝试在倒数第二个命令之前执行format long

标签: matlab computation


【解决方案1】:

看起来你在那里遇到了浮点错误。

(0.76 - 0.7) == 0.06
ans =
    0

num2str(0.76 - 0.7, '%0.20f')
ans =
0.06000000000000005300

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-28
    • 2018-04-25
    • 2013-02-19
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2017-10-04
    • 2013-04-03
    相关资源
    最近更新 更多