Deutsch   English   Français   Italiano  
<th6hru$248k$1@cabale.usenet-fr.net>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!usenet-fr.net!.POSTED!not-for-mail
From: Olivier Miakinen <om+news@miakinen.net>
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: <th6hru$248k$1@cabale.usenet-fr.net>
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