Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.python > #3963

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

From Olivier Miakinen <om+news@miakinen.net>
Newsgroups fr.sci.maths, fr.comp.lang.python
Subject Problème de l'arrêt (was: Que fait ce programme ?)
Followup-To fr.sci.maths
Date 2022-09-30 12:53 +0200
Organization There's no cabale
Message-ID <th6hru$248k$1@cabale.usenet-fr.net> (permalink)
References <63367bdd$0$25804$426a74cc@news.free.fr>

Cross-posted to 2 groups.

Followups directed to: fr.sci.maths

Show all headers | View raw


[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

Back to fr.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Que fait ce programme ? ast <ast@invalid> - 2022-09-30 07:17 +0200
  Re: Que fait ce programme ? Olivier Miakinen <om+news@miakinen.net> - 2022-09-30 11:14 +0200
    Re: Que fait ce programme ? Olivier Miakinen <om+news@miakinen.net> - 2022-09-30 11:18 +0200
    Re: Que fait ce programme ? Olivier Miakinen <om+news@miakinen.net> - 2022-09-30 11:29 +0200
      Re: Que fait ce programme ? ast <ast@invalid> - 2022-10-02 16:57 +0200
  Re: Que fait ce programme ? Michel Talon <talon@niobe.lpthe.jussieu.fr> - 2022-09-30 11:39 +0200
  Problème de l'arrêt (was: Que fait ce programme ?) Olivier Miakinen <om+news@miakinen.net> - 2022-09-30 12:53 +0200
  Bis: Que fait ce programme ? Olivier Miakinen <om+news@miakinen.net> - 2022-10-01 15:40 +0200

csiph-web