Sujet : Re: Problème de l'arrêt
De : talon (at) *nospam* niobe.lpthe.jussieu.fr (Michel Talon)
Groupes : fr.sci.mathsDate : 01. Oct 2022, 11:50:23
Autres entêtes
Organisation : Guest of ProXad - France
Message-ID : <63381b70$0$25834$426a74cc@news.free.fr>
References : 1 2 3 4
User-Agent : Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0
Le 30/09/2022 à 21:46, Olivier Miakinen a écrit :
Mais oui, pour des nombres positifs ce que tu dis est forcément vrai, du
fait que s'il y a plusieurs boucles c'est à cause de la propagation d'une
retenue, à chaque fois au rang suivant.
En fait, tel que je le vois, m+n est un invariant de la boucle. Pourquoi?
m devient le XOR de m et n, c'est à dire a les bits qui sont soit dans m soit dans n mais pas les deux.
n devient le double (à cause du << 1) du AND de m et n c'est à dire les bits qui sont à la fois dans m et n. Evidemment quand on fait m+n
le AND apparaît 2 fois, et le XOR une fois, donc il est "clair" que m+n a la même valeur que m ^ n + (m & n) << 1.
Comme XOR(m,n) <= max(m,n) et idem pour AND(m,n) et que le AND est poussé à gauche à chaque étape par le << 1 il va venir un moment où
n est trop grand pour avoir des bits en commun avec m, donc à l'étape suivante on a n=0 et donc le while se termine et la fonction retourne n+m puisque le dernier n vaut 0.
-- Michel Talon