Sujet : Problème de l'arrêt (was: Que fait ce programme ?)
De : om+news (at) *nospam* miakinen.net (Olivier Miakinen)
Groupes : fr.sci.maths fr.comp.lang.pythonSuivi-à : fr.sci.mathsDate : 30. Sep 2022, 12:53:49
Autres entêtes
Organisation : There's no cabale
Message-ID : <th6hru$248k$1@cabale.usenet-fr.net>
References : 1
User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0 SeaMonkey/2.53.1
[diapublication, suivi vers fr.sci.maths seul]
Bonjour,
Le 30/09/2022 à 07:17, ast avait écrit :
def f(m, n):
while n:
m, n = m ^ n, (m & n) << 1
return m
Comme l'écrivait Michel Talon, cette fonction retourne simplement
la somme des entiers m et n, du moins cela fonctionne pour tous les
entiers positifs. À chaque tour de boucle, on retrouve dans m la
somme bit à bit des nombres m et n *sans tenir compte des retenues*,
et dans n la somme de toutes les retenues. Au bout d'un petit
nombre de tours de boucle, il n'y a plus aucune retenue à faire, et
alors le nombre n vaut 0 tandis que le nombre m contient le résultat
attendu à savoir la somme des nombres m et n de départ.
Je voudrais maintenant étendre la question d'ast, en faisant suivre
vers fr.sci.maths seul car ça n'a plus rien de spécifique à python.
Lorsque l'un des nombres est négatif, il arrive que l'algorithme ne
s'arrête jamais. Par exemple lorsque m vaut -1 et que n vaut n'importe
quel nombre strictement positif.
Ma question est alors de déterminer pour quelles valeurs de m et n
le programme s'arrête et pour quelles valeurs il ne s'arrête jamais.
Question subsidiaire : lorsque le programme s'arrête, combien de
tours de boucle a-t-il réalisés ?
Précision pour la représentation des nombres en binaire, un nombre
positif comporte « à gauche » une infinité de chiffres binaires
valant zéro, tandis que les nombres négatifs ont une infinité de
chiffres à 1.
Exemples :
3 = ...0000011
2 = ...0000010
1 = ...0000001
0 = ...0000000
-1 = ...1111111
-2 = ...1111110
-3 = ...1111101
-4 = ...1111100
-- Olivier Miakinen