wraparound

2004.01.28

Douglas Edric Stanley

Argument. L'essentiel du code se tient en une seule ligne : elle s'écrit « x++; ». Cette seule et unique instruction demande à l'ordinateur d'augementer la valeur de la variable x. Comme l'ordinateur suit cette instruction 60 fois par seconde, et que cette valeur est ensuite utilisée pour dessiner le trait vertical à la position de x, nous nous trouvons avec le diagramme ci-contre d'un trait qui balaye l'écran.

Sauf que nous n'avons jamais demandé ni au trait, ni à x, de revenir en permanence à sa position d'origine. Nous n'avons pas demandé à la valeur x de se boucler éternellement entre les mêmes 256 valeurs. Comment se fait-il alors que x balaye en boucle sur notre écran, au lieu de compter à l'infini comme il devrait faire logiquement ? Pourquoi sur un ordinateur, agumenter la valeur de x revient à compter en boucle entre 0 et 255 ?

Imaginons quelqu'un qui ne peut compter qu'à 10. Pour le comprendre, sortez vos mains et commencez à compter avec vos doigts : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ..., hmmm, que faire après 10 ? Vous rencontrez au fait un problème assez rapidement de la limite des doigts disponibles. Pour certains d'entre nous, nous continuerions néanmoins à compter au delà de 10 : 11, 12, 13, 14, etc. Mais notre hypothèse concernait une personne ne sachant compter qu'à dix. Et bien cette personne n'a que deux choix : arrêter de compter, ou recommencer à 0.

Comme un enfant qui ne peut compter qu'avec ces doigts, les variables stockées dans un ordianteur sont limitées par le nombre qu'elles peuvent représenter. Contrairement aux déclarations de la « virtualité » de l'ordinateur, entendu par certains comme chose totalement déconnectée de la réalité physique et donc du corps (cf. Kurzweil, 1998, Kurzweil, 2005), un ordinateur ne peut que compter qu'avec des doigts, c'est-à-dire avec des arrays d'intérrupteurs bien concrets, bien réels, bien délimités dans l'espace, quelque soit la miniaturisation de ceux-ci. Et si un ordinateur ne peut que compter avec les doigts, il devient essentiel de savoir combien il a de doigts pour effecteur ses opérations.

Une variable « booléenne » ne sait compter que deux chiffres : 0 et 1. Une variable « byte » sait compter de 0 à 255, ou de -128 à 127, c'est-à-dire uniquement 256 différentes valeurs. D'autres variables peuvent compter 65.536 valeurs, alors que d'autres encore peuvent compter jusqu'à 1.677.721, et d'autres encore plus.

Pour comprendre alors le diagramme ci-contre, il faut regarder en amont, et voir quelle est l'étendu des valeurs que la variable x est censée représenter. En lisant le code « wraparound.pde », nous voyons qu'il a été défini au tout début du code comme une variable contennant un « byte », c'est-à-dire uniquement 256 différentes valeurs :

{{byte x = 0;}}

Un « byte » est l'équivalent des huit interrupteurs décrites dans le diagramme bitmask : il ne peut que représenter 256 valeurs distinctes. Une fois dépassé cette valeur, une fois arrivé à 256, 257, 258, 259, etc., il reboucle sur zéro : 0, 1, 2, 3, etc.

Pour répondre à notre question de départ, ce diagramme wraparound utilise une variable limitée exactement à 256. Quand x va trop loin à droite, quand elle dépasse 255, l'ordinateur force cette variable de recommencer à compter à partir de zéro, exactement comme on peut faire avec ses propres mains : une fois arrivé à 10, nous recommençons avec un seul doigt pour compter 11. Mais comme l'ordinateur est instruit d'uniquement compter avec les 256 doigts de sa main, une fois que celle-ci n'a plus de doigts, il recommence à zéro et perd pour ainsi dire les valeurs culmulatives. C'est comme si la machine a d'un seul coup perdu la mémoire : eh hop! nous voilà de nouveau à gauche, sans aucune trace que nous venons de mathématiquement effectuer l'équivalent d'un saut interspatial comme dans la série Star Trek.

D'où l'effet de bouclage de notre ligne sur l'écran, et d'où certains effets esthétiques comme, particulièrement, l'effet pacman.