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.