2010-10-17 4 views
1

Pourquoi ces deux extraits de code donnent-ils deux résultats différents?Multiplier et diviser par deux

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; 

et

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; 

Répondre

3

Vous avez une erreur de bornes sur votre deuxième boucle. Il devrait être i > 0. La première boucle a i > 1, mais elle divise également i par 2. 1/2 == 0, elle devrait donc être i > 0 dans la deuxième boucle.

+0

Gee, merci! (Je suis headdesking maintenant, car cela aurait dû être évident.) Acceptera dans 5 minutes. – yodie

+0

C'est purement une limite, et n'a rien à voir avec le bit 'i/2', l'OP est décrémenté de 2 dans la première instance; voici un exemple de ce qui se passe: http://ideone.com/uIqDI –

+0

@Mark - Oh, ma première intuition était juste. * soupir * Oups. – Omnifarious