Re: Problème de l'arrêt (was: Que fait ce programme ?)

Liste des GroupesRevenir à fs maths 
Sujet : Re: Problème de l'arrêt (was: Que fait ce programme ?)
De : maixxx07b (at) *nospam* orange.fr (maixxx)
Groupes : fr.sci.maths
Date : 30. Sep 2022, 16:13:07
Autres entêtes
Organisation : Aioe.org NNTP Server
Message-ID : <th7124$1l9b$1@gioia.aioe.org>
References : 1 2
User-Agent : Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.3.0
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.


Date Sujet#  Auteur
30 Sep 22 * Que fait ce programme ?14ast
30 Sep 22 +* Re: Que fait ce programme ?4Olivier Miakinen
30 Sep 22 i+- Re: Que fait ce programme ?1Olivier Miakinen
30 Sep 22 i`* Re: Que fait ce programme ?2Olivier Miakinen
2 Oct 22 i `- Re: Que fait ce programme ?1ast
30 Sep 22 +- Re: Que fait ce programme ?1Michel Talon
30 Sep 22 +* Problème de l'arrêt (was: Que fait ce programme ?)7Olivier Miakinen
30 Sep 22 i+* Re: Problème de l'arrêt (was: Que fait ce programme ?)4maixxx
30 Sep 22 ii`* Re: Problème de l'arrêt3Olivier Miakinen
1 Oct 22 ii `* Re: Problème de l'arrêt2Michel Talon
1 Oct 22 ii  `- Re: Problème de l'arrêt1Olivier Miakinen
30 Sep 22 i`* [Ma réponse] Re: Problème de l'arrêt2Olivier Miakinen
30 Sep 22 i `- Re: [Ma réponse] Re: Problème de l'arrêt1Olivier Miakinen
1 Oct 22 `- Bis: Que fait ce programme ?1Olivier Miakinen

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal