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


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

Re: Affichage en notation scientifique.

From Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid>
Newsgroups fr.comp.lang.python
Subject Re: Affichage en notation scientifique.
Date 2022-09-14 18:59 +0200
Organization Université de Strasbourg
Message-ID <875yhpyjrq.fsf@universite-de-strasbourg.fr.invalid> (permalink)
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>

Show all headers | View raw


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

[...]
>   Oui, mais cette approche pourrait entraîner quelques
>   irrégularités (comme d'autres approches peut-être).

Cela n'est pas lié spécialement à log10, c'est tout simplement la
représentation des flottants qui a une précision limitée (j'utilise des
chaînes seulement pour comparer à ton code) :

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

(et effectivement le module decimal permet d'étendre cette précision,
mais elle restera toujours finie).

Tu peux utiliser des entiers (ou même des chaînes de caractères pour une
raison qui m'échappe) 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écision.

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

int (... un flottant ...) arrondit vers zéro. 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 (à peu près) ok, pour 15 c'est log10 qui
arrondit, pour 16, c'est la conversion en entier qui arrondit.

-- Alain.

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


Thread

Affichage en notation scientifique. Dominique <zzz@aol.com> - 2022-09-14 15:55 +0200
  Re: Affichage en notation scientifique. Dominique <zzz@aol.com> - 2022-09-14 16:17 +0200
  Re: Affichage en notation scientifique. Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2022-09-14 16:37 +0200
    Re: Affichage en notation scientifique. Dominique <zzz@aol.com> - 2022-09-14 17:25 +0200
      Re: Affichage en notation scientifique. Dominique <zzz@aol.com> - 2022-09-14 18:33 +0200
      Re: Affichage en notation scientifique. Alain Ketterlin <alain@universite-de-strasbourg.fr.invalid> - 2022-09-14 18:59 +0200

csiph-web