Routines d'arrondi des nombres à virgule flottante
Remonter à RTL
Sommaire
La plupart des routines d'arrondi de la bibliothèque RTL (Delphi Run-Time Library) utilisent le mode d'arrondi actuellement défini pour la FPU (unité virgule flottante) ou le registre SSE, respectivement pour 32 bits ou 64 bits. Certaines routines RTL ont leur propre mode d'arrondi ou algorithme. Les tableaux de cette page présentent des détails sur diverses routines d'arrondi.
Routines d'arrondi
Le tableau suivant récapitule les fonctions d'arrondi disponibles dans la RTL :
Nom | Type d'argument | Type de retour | A un paramètre chiffre ? | Intervalle du paramètre chiffre | Mode d'arrondi | Remarques |
---|---|---|---|---|---|---|
System.Round |
Extended |
Int64 |
Paramètre RoundMode en cours |
|||
System.Trunc |
Extended |
Int64 | Toujours rmTruncate (tronquer vers zéro) | Identique à Int. Le type du retour est integer. | ||
System.Int |
|
|
Toujours rmTruncate (tronquer vers zéro) | Identique à Trunc. Le type du retour est un nombre à virgule flottante. | ||
Extended | Extended | Oui | -20 .. +20 pas de valeur par défaut. | Toujours rmNearest (arrondi du banquier) | ||
Single |
Single Double Extended |
Oui | -37 .. +37
-2 est la valeur par défaut. |
Toujours "Round half away from zero" | SimpleRoundTo est "l'arrondi" traditionnel étudié à l'école. | |
Single |
Integer | Toujours rmUp (le plus petit nombre entier suivant) | ||||
System.Math.Floor | Single Double Extended |
Integer | Toujours rmDown (le plus grand nombre entier précédent) | |||
Data.FmtBcd.BCDRoundTo | TBcd | TBcd | Oui | Integer | RoundMode en cours | |
FMTBcd.BCDRoundAt (obsolète) |
String | String | Oui | SmallInt | Toujours "Round half away from zero" | Fonction obsolète. Utilisez BcdRoundTo. |
Exemples de nombres positifs
Le tableau suivant donne des exemples d'arrondi de nombres positifs :
Nom | Mode d'arrondi | 0.4 | 0.5 | 0.6 | 1.4 | 1.5 | 1.6 |
---|---|---|---|---|---|---|---|
rmNearest | 0 | 0 | 1 | 1 | 2 | 2 | |
rmDown | 0 | 0 | 0 | 1 | 1 | 1 | |
rmUp | 1 | 1 | 1 | 2 | 2 | 2 | |
rmTruncate | 0 | 0 | 0 | 1 | 1 | 1 | |
0 | 0 | 0 | 1 | 1 | 1 | ||
0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | ||
0.0 | 0.0 | 1.0 | 1.0 | 2.0 | 2.0 | ||
0.0 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | ||
1 | 1 | 1 | 2 | 2 | 2 | ||
0 | 0 | 0 | 1 | 1 | 1 | ||
rmNearest | 0 | 0 | 1 | 1 | 2 | 2 | |
rmDown | 0 | 0 | 0 | 1 | 1 | 1 | |
rmUp |
1 | 1 | 1 | 2 | 2 | 2 | |
rmTruncate |
0 | 0 | 0 | 1 | 1 | 1 | |
FmtBcd.RoundAt(x,0) (obsolète) |
'0' | '1' | '1' | '1' | '2' | '2' |
Exemples de nombres négatifs
Le tableau suivant donne des exemples d'arrondi de nombres négatifs :
Nom | Mode d'arrondi | -0.4 | -0.5 | -0.6 | -1.4 | -1.5 | -1.6 |
---|---|---|---|---|---|---|---|
rmNearest | 0 | 0 | -1 | -1 | -2 | -2 | |
rmDown | -1 | -1 | -1 | -2 | -2 | -2 | |
rmUp | 0 | 0 | 0 | -1 | -1 | -1 | |
rmTruncate | 0 | 0 | 0 | -1 | -1 | -1 | |
System.Trunc(x) | 0 | 0 | 0 | -1 | -1 | -1 | |
System.Int(X) | 0.0 | 0.0 | 0.0 | -1.0 | -1.0 | -1.0 | |
Math.RoundTo(x,0) | 0.0 | 0.0 | -1.0 | -1.0 | -2.0 | -2.0 | |
Math.SimpleRoundTo(x,0) | 0.0 | -1.0 | -1.0 | -1.0 | -2.0 | -2.0 | |
Math.Ceil(x) | 0 | 0 | 0 | -1 | -1 | -1 | |
Math.Floor(x) | -1 | -1 | -1 | -2 | -2 | -2 | |
rmNearest | 0 | 0 | -1 | -1 | -2 | -2 | |
rmDown | -1 | -1 | -1 | -2 | -2 | -2 | |
rmUp | 0 | 0 | 0 | -1 | -1 | -1 | |
rmTruncate | 0 | 0 | 0 | -1 | -1 | -1 | |
FmtBcd.RoundAt(x,0) (obsolète) |
'-0' | '-1' | '-1' | '-1' | '-2' | '-2' |
Exemples du paramètre chiffre avec RoundTo et SimpleRoundTo
Le chiffre (D) indique la puissance de dix à laquelle vous voulez arrondir la valeur donnée. Le chiffre peut prendre toute valeur de l'intervalle –20 à 20. Ces exemples utilisent D = 0, -1 ... -5.
Nom | 0 | -1 | -2 | -3 | -4 | -5 |
---|---|---|---|---|---|---|
Math.RoundTo(2.15625, D) | 2.0 | 2.2 | 2.16 | 2.156 | 2.1562 | 2.15625 |
Math.SimpleRoundTo(2.15625, D) | 2.0 | 2.2 | 2.16 | 2.156 | 2.1563 | 2.15625 |
Voir aussi
- Problèmes d'arrondi des nombres à virgule flottante
- Routines de comparaison des nombres à virgule flottante
- Routines de contrôle des nombres à virgule flottante
- System.Math.SetFPURoundMode
- System.Math.SetSSERoundMode
- System.Math.SetRoundMode
- System.Round