2014-10-06 115 views
0

这里是我的全部功能:意外的计算结果

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 

这究竟是为什么......?

+1

浮点表示法。在第二个到最后一个命令之前尝试使用'format long'。 – 2014-10-06 21:31:25

回答

0

看起来你已经遇到了浮点错误。

(0.76 - 0.7) == 0.06 
ans = 
    0 

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