Deutsch   English   Français   Italiano  
<875yhpyjrq.fsf@universite-de-strasbourg.fr.invalid>

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

Path: ...!feeds.phibee-telecom.net!news.mixmin.net!aioe.org!K7PIs9tCGQ+WHJa7e6BylQ.user.46.165.242.75.POSTED!not-for-mail
From: Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid>
Newsgroups: fr.comp.lang.python
Subject: Re: Affichage en notation scientifique.
Date: Wed, 14 Sep 2022 18:59:21 +0200
Organization: =?utf-8?Q?Universit=C3=A9?= de Strasbourg
Message-ID: <875yhpyjrq.fsf@universite-de-strasbourg.fr.invalid>
References: <tfsmg1$2vqdl$1@dont-email.me>
	<87a672xbrj.fsf@universite-de-strasbourg.fr.invalid>
	<exposant-20220914155942@ram.dialup.fu-berlin.de>
	<tfsrpk$30rm6$1@dont-email.me>
	<log10-20220914164259@ram.dialup.fu-berlin.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Injection-Info: gioia.aioe.org; logging-data="12252"; posting-host="K7PIs9tCGQ+WHJa7e6BylQ.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org";
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)
Cancel-Lock: sha1:p9lpCMEipGwuMA7Oo1u8Iduq2WU=
X-Notice: Filtered by postfilter v. 0.9.2
Bytes: 2898
Lines: 58

ram@zedat.fu-berlin.de (Stefan Ram) writes:

[...]
>   Oui, mais cette approche pourrait entra=C3=AEner quelques
>   irr=C3=A9gularit=C3=A9s (comme d'autres approches peut-=C3=AAtre).

Cela n'est pas li=C3=A9 sp=C3=A9cialement =C3=A0 log10, c'est tout simpleme=
nt la
repr=C3=A9sentation des flottants qui a une pr=C3=A9cision limit=C3=A9e (j'=
utilise des
cha=C3=AEnes seulement pour comparer =C3=A0 ton code) :

>>> float ( int ('9'*15) )
999999999999999.0
>>> float ( int ('9'*16) )
1e+16

(et effectivement le module decimal permet d'=C3=A9tendre cette pr=C3=A9cis=
ion,
mais elle restera toujours finie).

Tu peux utiliser des entiers (ou m=C3=AAme des cha=C3=AEnes de caract=C3=A8=
res pour une
raison qui m'=C3=A9chappe) si tu veux, mais log10 () va convertir son
argument en flottant avant de calculer quoi que ce soit, ce qui aggrave
les risque d'impr=C3=A9cision.

> from math import log10
>
> num =3D ''
> for i in range( 16 ):
>     num +=3D '9'
>     e =3D int( log10( int( num )))
>     print( i, e, num, int( num ), log10( int( num )))

int (... un flottant ...) arrondit vers z=C3=A9ro. Il vaut mieux utiliser
math.floor() pour les petits nombres.

Note que pour i tu traites le nombre (10*(i+2)) - 1 (ou '9'*(i+1)).

[...]
> 13 13 99999999999999 99999999999999 13.999999999999996
> 14 15 999999999999999 999999999999999 15.0
> 15 16 9999999999999999 9999999999999999 16.0

for i in [14, 15, 16]:
    print (float (int ('9'*i)),
           math.log10 (float (int ('9'*i))))

affiche

99999999999999.0 13.999999999999996
999999999999999.0 15.0
1e+16 16.0

donc : pour 14 tout est (=C3=A0 peu pr=C3=A8s) ok, pour 15 c'est log10 qui
arrondit, pour 16, c'est la conversion en entier qui arrondit.

-- Alain.