2010-10-17 55 views
1

爲什麼這兩個代碼片段會給出兩個不同的結果?乘以二除

double sum = 1.0; 
    double xSqFour = x * x/4; 

    for (int i = 48; i > 1; i-=2) { 
     sum = 1.0 + (xSqFour/((i/2) * (i/2))) * sum; 
    } 

    return sum; 

double sum = 1.0; 
    double xSqFour = x * x/4; 

    for (int i = 24; i > 1; i--) { 
     sum = 1.0 + (xSqFour/(i * i)) * sum; 
    } 

    return sum; 

回答

3

你有你的第二個循環中的邊界錯誤。它應該是i > 0。第一個循環有i > 1,但它也將i除以2. 1/2 == 0,所以在第二個循環中它應該是i > 0

+0

嘖嘖,謝謝! (我現在正在修理,因爲這應該是顯而易見的。)將在5分鐘內接受。 – yodie 2010-10-17 02:41:45

+0

它完全是一個界限,與'i/2'位無關,OP在第一個實例中減少2;這裏是一個發生了什麼事情的例子:http://ideone.com/uIqDI – 2010-10-17 02:44:43

+0

@Mark - 哦,我的第一個直覺是對的。 *嘆氣*哎呀。 – Omnifarious 2010-10-17 05:18:58