Path: ...!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!usenet-fr.net!.POSTED!not-for-mail From: Olivier Miakinen Newsgroups: fr.sci.maths,fr.comp.lang.python Subject: =?UTF-8?Q?Probl=c3=a8me_de_l'arr=c3=aat_=28was:_Que_fait_ce_program?= =?UTF-8?B?bWUgPyk=?= Followup-To: fr.sci.maths Date: Fri, 30 Sep 2022 12:53:49 +0200 Organization: There's no cabale Lines: 52 Message-ID: References: <63367bdd$0$25804$426a74cc@news.free.fr> NNTP-Posting-Host: 220.12.205.77.rev.sfr.net Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Trace: cabale.usenet-fr.net 1664535230 69908 77.205.12.220 (30 Sep 2022 10:53:50 GMT) X-Complaints-To: abuse@usenet-fr.net NNTP-Posting-Date: Fri, 30 Sep 2022 10:53:50 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0 SeaMonkey/2.53.1 In-Reply-To: <63367bdd$0$25804$426a74cc@news.free.fr> Bytes: 2777 [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