Parcours
/
Elixir
Elixir
/
Programme
/
Nombres à virgule flottante
No

Nombres à virgule flottante en Elixir

8 exercices

À propos de Nombres à virgule flottante

Il existe deux types de nombres différents en Elixir : les nombres entiers et les nombres décimaux.

Les nombres décimaux sont des nombres avec un ou plusieurs chiffres après le séparateur décimal. Ils utilisent le format à virgule flottante double précision sur 64 bits.

float = 3.45
# => 3.45

Elixir prend aussi en charge la notation scientifique pour les nombres décimaux.

1.25e-2
# => 0.0125

Erreurs d'arrondi

Les nombres décimaux sont tristement célèbres pour leurs erreurs d'arrondi.

0.1 + 0.2
# => 0.30000000000000004

Cependant, ce genre d'erreurs n'est pas propre à Elixir. Elles se produisent dans tous les langages de programmation. En effet, toutes les données de nos ordinateurs sont stockées et traitées sous forme de code binaire. En binaire, seules les fractions dont le dénominateur peut s'écrire sous la forme 2^n (par exemple 1/4, 3/8, 5/16) peuvent être représentées exactement. Les autres fractions ne sont représentées que par des approximations.

# 3/4
Float.ratio(0.75)
# => {3, 4}

# 3/5
Float.ratio(0.6)
# => {5404319552844595, 9007199254740992}

Tu peux en apprendre plus sur ce problème sur 0.30000000000000004.com. La page Float Toy propose une belle explication graphique de la façon dont les bits d'un nombre à virgule flottante sont convertis en une valeur à virgule flottante concrète.

Comparaison

Un nombre entier et un nombre décimal peuvent être considérés comme égaux (==) s'ils ont la même valeur. Cependant, comme ce sont des types différents, ils ne sont jamais strictement égaux (===).

1 == 1.0
# => true

1 === 1.0
# => false

Conversion

Les nombres entiers et les nombres décimaux peuvent être mélangés dans une même expression arithmétique. Utiliser un nombre décimal dans une expression garantit que le résultat sera lui aussi un nombre décimal.

2 * 3
# => 6

2 * 3.0
# => 6.0

On peut arrondir un nombre décimal (round), l'arrondir au supérieur (ceil) ou l'arrondir à l'inférieur (floor).

Pour arrondir un nombre décimal en un nombre décimal, utilise les fonctions du module Float (Float.round, Float.ceil, Float.floor). Pour obtenir plutôt un entier, utilise les fonctions du module Kernel (round, ceil, floor).

Une autre méthode pour transformer un nombre décimal en entier consiste à couper sa partie décimale avec trunc.

Float.ceil(5.2)
# => 6.0

ceil(5.2)
# => 6

trunc(5.2)
# => 5
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet

Apprends Nombres à virgule flottante

L'entraînement est verrouillé

Déverrouille 4 exercices de plus pour t'entraîner sur Nombres à virgule flottante