1 of 21

Human Talk

2 of 21

Depositphotos

3 of 21

ManuEla79 sur Twitter�Sarah Titus

4 of 21

Dreamstime

5 of 21

Wikimedia Commons

6 of 21

Comment voler 1 centime à l'aide des mathématiques�(ou comment être pédant de façon classe)

7 of 21

Etat de l’art

  1. Être déjà riche�
  2. Monter une entreprise prospère�
  3. Être influenceur�
  4. Être un génie des maths

jardinage.lemonde.fr

Wikimedia Commons

8 of 21

L’art du vol Des maths

YouTube

Babelio

9 of 21

Le Problème

22,67�+ 7,33�= 30,01

Quel est le résultat ?�(niveau primaire)

10 of 21

Pourtant c’est facile !

  • 1 + 1 = 2 (gens normaux)
  • 1 + 1 = 11 (concaténation)
  • 1 + 1 = 10 (base 2)
  • 1 + 1 = 0 (modulo 2)
  • 1 + 1 = 1 (algèbre booléenne)
  • 1 + 1 = 10,01 (base φ-naire)
  • 1 + 1 = √2 (distance Manhattan)
  • 1 + 𝟏 = syntax error (Unicode)

Combien font 1 + 1 ?

11 of 21

Does not compute !!1!

Humain

Ordinateur

Dreamstime

Thomasine Glenn

12 of 21

Ils sont partout !

  • Python :

>>> print(format(0.1 , ".20f"))�0.10000000000000000555

  • JS :

>> console.log((0.1).toFixed(20))�0.10000000000000000555

  • C :

int main()

{

printf("%.10g", (float)0.1);

}�0,1000000015

13 of 21

TOO MANY COOKS

14 of 21

Parlons technique (enfin!)

Thomasine Glenn

15 of 21

IEEE-754 : le seul standard IEEE connu ?

32 = 1 + 8 + 23 (+1) -> float32

64 = 1 + 11 + 52 (+1) -> float64 Signe Exposant Mantisse� SEuM� +/- n° de bucket n° dans le bucket

Maximum :

32: 2^8=256, donc exposants de -126 à 127, donc valeurs absolues jusqu’à ~10^38�64: 2^11=2048, donc exposants de -1022 à 1023, donc valeurs absolues jusqu’à ~10^308�Minimum :

32: 2^-126 ~= 10^-38 64: 2^-1022 ~= 10^-308

16 of 21

Historique rapidos

  • Virgule fixe�
  • 1914 : théorisation pour un calculateur électro-mécanique�
  • 1940 : premières implèm dans des calculateurs programmables�
  • 1950 : commercialisation grandissante, formats divergents�
  • 1985 : standard IEE-754�
  • 1989 : Prix Turing

17 of 21

Un format Miracle ?

  • Précision limitée, variable selon la magnitude�
  • Entiers manquants (premiers : 2^24+1 et 2^53+1)�
  • Sans notion de chiffres significatifs�
  • Ne peut représenter que des rationels�
  • « desastrous cancellation »�
  • printf qui cache la poussière sous le tapis

18 of 21

Quelles alternatives ?

  • Utiliser les libs « Decimal » ?�
  • Utiliser des entiers pour représenter des centimes ?�
  • N’utiliser que des float64 ?�
  • Analyser les calculs ?�
  • Se résigner ?

19 of 21

Pour aller plus loin

  • Standard IEE-754
    • ulp, fma, fsum
    • epsilon machine
    • subnormals
    • NaN
      • quiet/signalling NaNs
  • formats exotiques
    • virgule fixe
  • FPU rounding mode, flush-to-zero
    • « round to nearest, ties to even  »
  • endianness
  • analyse numérique
    • « desastrous cancellation »
    • arithmétiques par intervalle
    • Lemme de Sterbenz
  • Odoo Decimal
  • chiffres significatifs
  • Performance

Sources :

20 of 21

Quizzz !!

21 of 21

LENORMAND Julien

Développeur

contact@lenormand-julien.fr

KAIZEN SOLUTIONS

26, avenue Jean Kuntzmann

38330 Montbonnot-Saint-Martin

www.kaizen-solutions.net

--

contact@kaizen-solutions.net

merci