2011-12-26 5 views
1

code originaldérouler une boucle while

while(i<30){ 
// do something 
i++; 
} 

déroulé alors que la boucle

while(i<15){ 
// do something twice 
i+=2; 
} 

Cant nous dérouler comme indiqué ci-dessus. Devons-nous toujours le faire comme http://en.wikipedia.org/wiki/Loop_unrolling?

+1

Essayez-le et voir. En particulier, faites attention à la valeur de "i" à la fin de la boucle. –

Répondre

2

En général, la réponse est non. Cela fonctionne pour 30 et 15 parce que 30 est pair, mais cela ne fonctionnerait pas aussi facilement pour les nombres impairs. "Duff's device" a été inventé pour traiter le cas général. C'est assez moche, cependant.

+0

alors non seulement pour les boucles while. Pour les boucles aussi, cela importe si l'itération ne se produit pas pour les nombres pairs, n'est-ce pas? – klijo

+1

@klijo Ceci est correct: lorsque le nombre d'itérations désiré n'est pas un multiple du nombre de fois que vous vous êtes déroulé, vous devez compléter les itérations 'n% k' restantes manuellement ou dans une boucle serrée sans se dérouler. – dasblinkenlight