2012-07-31 68 views
-2
int bNum=3; 
int aNum=3; 
for (int i = 0; i < bNum; i++) 
     { 
      for (int j = 0; j < aNum; j++) 
      { 
       b[i] += a[j]; 
       b[i + 1] += a[j + 3]; 
       b[i + 2] += a[j + 6]; 
      } 
     } 

我基本上希望發生的以下內容:爲什麼我在輸入超出範圍例外時出現錯誤?

b[0]=a[0]+a[1]+a[2]; 
b[1]=a[3]+a[4]+a[5]; 
b[2]=a[6]+a[7]+a[8]; 

什麼是錯我的邏輯是什麼?

哈哈! OOPS!我睏倦的眼睛正在解釋這個愚蠢的問題。我發現在每次迭代中它都會被多次計算。

+4

數組的大小是多少?那'i + 3'可能會超過它。 – 2012-07-31 09:45:29

+0

C++或C#?..... – Nawaz 2012-07-31 09:45:43

+0

您正在使用'b [i + 6]'作爲索引。我假設你的意思是'b [2] = a [j + 6]' – dtsg 2012-07-31 09:47:57

回答

7

它是任何一種語言,你需要爲B常數指數,可變折射率的

for (int j = 0; j < aNum; j++) 
     { 
      //here is loop-unrolling for b 
      b[0] += a[j]; 
      b[1] += a[j + 3]; 
      b[2] += a[j + 6]; 
     } 



    for(k=0;k<max;k++) 
    { 
    for (int j = 0; j < aNum; j++) 
     { 
      //without loop-unrolling 
      b[k] += a[j+k*3]; 

     } 
    } 

我所做的「K」環外讓它讀一個爲連續[]越好。你可以在內部做「k」循環,但是它會使[]從這裏跳到那裏,然後再次跳回到這裏,這會讓它變慢。 這不是一個矢量雖然:我只是用它來填補空間

+0

謝謝!我真的很累,不能直視。但我喜歡你的矢量化的想法! – 2012-07-31 09:56:42

1

這個問題是一種矛盾詞典。 兩個數組的長度長度相等,但要求不相等。

假設requeirement是正確的,你可以做以下

b元素有一個總和的a

int bNum=3;  
int aIndex = 0; 
for (int i = 0; i < bNum; i++) 
{ 
    for (int j = 0; j < 3; j++)  
     b[i] += a[aIndex ++]; 

} 
下一個 3個要素

這裏沒有任何數組邊界控制。這只是一個示例自然代碼。

如果這不是你正在尋找的,請澄清。