Path: ...!newsreader4.netcologne.de!news.netcologne.de!news.uzoreto.com!aioe.org!Ty0ksHdy1VaTVTw6oc1OBQ.user.46.165.242.75.POSTED!not-for-mail From: maixxx Newsgroups: fr.sci.maths Subject: =?UTF-8?B?UmU6IFByb2Jsw6htZSBkZSBsJ2FycsOqdCAod2FzOiBRdWUgZmFpdCBj?= =?UTF-8?Q?e_programme_=3f=29?= Date: Fri, 30 Sep 2022 17:13:07 +0200 Organization: Aioe.org NNTP Server Message-ID: References: <63367bdd$0$25804$426a74cc@news.free.fr> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Injection-Info: gioia.aioe.org; logging-data="54571"; posting-host="Ty0ksHdy1VaTVTw6oc1OBQ.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org"; User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.3.0 X-Notice: Filtered by postfilter v. 0.9.2 Content-Language: fr-FR Bytes: 3577 Lines: 77 Le 30/09/2022 à 12:53, Olivier Miakinen a écrit : > [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 ? > pour 15+1 m= 1111 + n=0001 14+2 1110 0010 12+4 1100 0100 8+8 1000 1000 16+0 10000 0000 4 itérations pour 6+5 0110 0101 3+8 0011 1000 11+0 1011 0000 2 itérations pour 4+8 1000 0100 12+0 1100 0000 1 itération Remarquer qu'à chaque itération la somme m+n est constante et égale au résultat final. AMA le nombre de boucles est *au plus* égal au rang max du chiffre binaire à 1 du résultat. Vrai ?? > > 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 > > Ça fait bien penser aux "additionneurs" réalisés avec des registres et des portes. > https://www.techno-science.net/definition/6685.html Ce n'est plus exactement des maths "pures" mais c'est bien utile dans les ordis.