2011-05-08 64 views
0

我在想什麼是找到兩個浮點數組之間差異絕對值的最有效方法?float []區別

它是以下幾點:

private float absDifference(float[] vector1, float[] vector2) { 
    float difference=0; 
    int len=Math.max(vector1.length, vector2.length); 
    for(int n=0;n<len;n++){ 
     float diff=0; 
     if(n<vector1.length){ 
      diff+=vector1[n]; 
     } 
     if(n<vector2.length){ 
      diff-=vector2[n]; 
     } 
     difference+=Math.abs(diff); 
    } 
    return difference; 
} 

回答

2
private float absDifference(float[] vector1, float[] vector2) { 
    float difference=0; 
    int len=Math.min(vector1.length, vector2.length); 
    for(int n=0;n<len;n++){ 
      diff+=vector1[n]-vector2[n]; 
     difference+=Math.abs(vector1[n]-vector2[n]); 
    } 
    if(vector1.length > vector2.length){ 
     for(;n<vector1.length;n++){ 
      difference+=Math.abs(vector1[n]); 
     } 
    }else{ 
     for(;n<vector2.length;n++){ 
      difference+=Math.abs(vector2[n]); 
     } 
    } 
    return difference; 
} 

這種方式有沒有重複的邊界檢查第一循環中的時間越長陣列的其餘部分分開處理後

+0

我改變了你的代碼,以便它編譯,它是更快的感謝。 – user735155 2011-05-08 01:32:04

+0

你可以省略'if'和'else',並簡單地把兩個for循環放在那裏 - 其中一個將是一個零迭代循環。 – 2011-05-08 02:35:32

+0

另外,你的'diff + = ...'這一行是多餘的(除了在循環之前移動int n'聲明之外,它可能需要改爲可編譯的)。 – 2011-05-08 02:37:06

相關問題