26880214126012011=26880214126012012

Aujourd’hui, je suis arrivé à ce résultat ou presque.

En javascript, quand le nombre en trop grand, alors la précision laisse à désirer.

Dans la console javascript, on peut reproduire très facilement le cas : 
il suffit de mettre a=26880214126012011
et le moteur js vous répond 26880214126012012 ce qui correspond, je pense, à une moindre précision.

>>> a=26880214126012011
26880214126012012
>>> a=26880214126012012
26880214126012012
>>> a=26880214126012013
26880214126012012
>>> a=26880214126012014
26880214126012016
>>> a=26880214126012015
26880214126012016
>>> a=26880214126012017
26880214126012016

>>> Number.MAX_VALUE
1.7976931348623157e+308

En gros, au delà de 17 chiffres, ça part en vrille. Vu que les derniers chiffres représentaient l’année, nous n’avons pas été impacté en 2010. Mais en 2011, vlan. C’est le bug de l’année 2011 !

2 commentaires

  1. La doc de mozilla peut aider à comprendre : http://blog.mozilla.com/rob-sayre/2

    1) Visiblement, ce comportement doit dépendre du navigateur,
    2) Sur Firefox 3.6 et précédents, les entiers sont stockés sur 31 bits (dont un de signe je suppose).
    3) Quand l’entier devient trop grand, il est stocké en tant que double. D’où certainement la perte de précision.

    D’ailleurs, voila ce que donne 26880214126012011 en double : http://www.binaryconvert.com/result

    Sa représentation la plus juste est 2.6880214126012012E16 soit 26880214126012012.

    Y’a pas de secrets.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *