Comment contrôler la mise en forme des nombres à virgule flottante

GolangGolangBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Ce tutoriel vous guidera dans la compréhension des nombres à virgule flottante dans le langage de programmation Go, y compris la manière de les formater et de les afficher efficacement. Vous apprendrez les différents types de données, leurs plages et précisions, ainsi que la façon de contrôler la sortie lorsque vous travaillez avec des valeurs décimales.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("Golang")) -.-> go/BasicsGroup(["Basics"]) go(("Golang")) -.-> go/AdvancedTopicsGroup(["Advanced Topics"]) go/BasicsGroup -.-> go/values("Values") go/AdvancedTopicsGroup -.-> go/time_formatting_parsing("Time Formatting Parsing") go/AdvancedTopicsGroup -.-> go/number_parsing("Number Parsing") subgraph Lab Skills go/values -.-> lab-419737{{"Comment contrôler la mise en forme des nombres à virgule flottante"}} go/time_formatting_parsing -.-> lab-419737{{"Comment contrôler la mise en forme des nombres à virgule flottante"}} go/number_parsing -.-> lab-419737{{"Comment contrôler la mise en forme des nombres à virgule flottante"}} end

Comprendre les nombres à virgule flottante en Go

Dans le langage de programmation Go, les nombres à virgule flottante sont utilisés pour représenter des quantités à valeur réelle. Go prend en charge deux types de données à virgule flottante principaux : float32 et float64. Ces types diffèrent par leur plage et leur précision, ce qui est important à comprendre lorsque vous travaillez avec des valeurs décimales.

Le type de données float32 est un nombre à virgule flottante IEEE 754 sur 32 bits, qui peut représenter des valeurs dans la plage d'environ ±3,4e+38 avec une précision d'environ 7 chiffres décimaux. Le type de données float64, en revanche, est un nombre à virgule flottante IEEE 754 sur 64 bits, qui peut représenter des valeurs dans la plage d'environ ±1,8e+308 avec une précision d'environ 15 chiffres décimaux.

Voici un exemple de déclaration et d'utilisation de nombres à virgule flottante en Go :

package main

import "fmt"

func main() {
    // Declare a float32 variable
    var f32 float32 = 3.14159

    // Declare a float64 variable
    var f64 float64 = 6.02214076e23

    fmt.Println("float32 value:", f32)
    fmt.Println("float64 value:", f64)
}

Ce code produira la sortie suivante :

float32 value: 3.1415901
float64 value: 6.02214076e+23

Les nombres à virgule flottante sont couramment utilisés dans diverses applications, telles que les calculs scientifiques, les calculs financiers et les graphiques informatiques, où une représentation précise des valeurs décimales est cruciale.

Mise en forme et affichage de valeurs à virgule flottante

Lorsque vous travaillez avec des nombres à virgule flottante en Go, il est important de savoir comment les mettre en forme et les afficher efficacement. Go propose plusieurs options pour la mise en forme et l'affichage de valeurs à virgule flottante, vous permettant de contrôler la précision et la présentation de la sortie.

L'une des méthodes les plus courantes pour afficher des valeurs à virgule flottante consiste à utiliser la fonction fmt.Println(). Par défaut, fmt.Println() utilisera la mise en forme par défaut pour les nombres à virgule flottante, ce qui peut parfois entraîner une sortie inattendue :

package main

import "fmt"

func main() {
    f32 := 3.14159
    f64 := 6.02214076e23

    fmt.Println("float32 value:", f32)
    fmt.Println("float64 value:", f64)
}

Cela produira la sortie suivante :

float32 value: 3.14159
float64 value: 6.022140800000001e+23

Pour avoir plus de contrôle sur la mise en forme, vous pouvez utiliser la fonction fmt.Printf() et ses différents verbes de formatage, tels que %f, %e et %g. Ces verbes vous permettent de spécifier la précision, la largeur et d'autres options de formatage pour la sortie des nombres à virgule flottante :

package main

import "fmt"

func main() {
    f32 := 3.14159
    f64 := 6.02214076e23

    fmt.Printf("float32 value: %.2f\n", f32)
    fmt.Printf("float64 value: %.2e\n", f64)
}

Cela produira la sortie suivante :

float32 value: 3.14
float64 value: 6.02e+23

En utilisant les verbes et options de formatage appropriés, vous pouvez contrôler la précision, la notation scientifique et d'autres aspects de l'affichage des valeurs à virgule flottante dans vos programmes Go.

Précision et comparaison des nombres à virgule flottante

Lorsque vous travaillez avec des nombres à virgule flottante en Go, il est important de comprendre le concept de précision et de savoir comment comparer correctement ces valeurs. Les nombres à virgule flottante sont représentés en format binaire, ce qui peut parfois entraîner un comportement inattendu lors de l'exécution d'opérations arithmétiques ou de comparaisons.

La précision d'un nombre à virgule flottante est déterminée par le nombre de bits utilisés pour représenter la valeur. Comme mentionné précédemment, Go prend en charge deux types de données à virgule flottante principaux : float32 et float64. Le type float32 a une précision d'environ 7 chiffres décimaux, tandis que le type float64 a une précision d'environ 15 chiffres décimaux.

En raison de la représentation binaire des nombres à virgule flottante, certaines valeurs ne peuvent pas être représentées exactement, ce qui entraîne des erreurs d'arrondi. Cela peut être particulièrement problématique lors de la comparaison de valeurs à virgule flottante pour l'égalité. Au lieu d'utiliser l'opérateur ==, il est généralement recommandé d'utiliser une petite valeur de tolérance lors de la comparaison de nombres à virgule flottante :

package main

import "fmt"
import "math"

func main() {
    a := 0.1 + 0.2
    b := 0.3

    // Direct comparison may fail due to rounding errors
    fmt.Println("Direct comparison:", a == b) // Output: false

    // Use a small tolerance value for comparison
    tolerance := 1e-9
    fmt.Println("Comparison with tolerance:", math.Abs(a-b) < tolerance) // Output: true
}

Dans l'exemple ci-dessus, la comparaison directe de a et b échoue car la somme de 0.1 et 0.2 ne peut pas être représentée exactement en format binaire à virgule flottante. En utilisant une petite valeur de tolérance, nous pouvons comparer efficacement les valeurs et prendre en compte les erreurs d'arrondi.

Il est également important de prendre en compte les limitations de précision lors de l'exécution d'opérations arithmétiques avec des nombres à virgule flottante. Les erreurs d'arrondi peuvent s'accumuler, et il est généralement recommandé d'utiliser le type de données et la précision appropriés pour votre cas d'utilisation spécifique.

Résumé

Les nombres à virgule flottante sont une partie essentielle de nombreuses applications en Go, allant des calculs scientifiques aux calculs financiers. En comprenant les subtilités de la représentation des valeurs à virgule flottante et de leur mise en forme, vous pouvez vous assurer que votre code produit la sortie souhaitée et se comporte comme prévu lors de la manipulation de données décimales.