Routines d'arrondi des nombres à virgule flottante

De RAD Studio
Aller à : navigation, rechercher

Remonter à RTL

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
(intégré)

Extended

Int64

Paramètre RoundMode en cours

System.Trunc
(intégré)

Extended

Int64 Toujours rmTruncate (tronquer vers zéro) Identique à Int. Le type du retour est integer.

System.Int
(intégré)

  • Extended pour 32 bits
  • Double pour 64 bits
  • Extended pour 32 bits
  • Double pour 64 bits
Toujours rmTruncate (tronquer vers zéro) Identique à Trunc. Le type du retour est un nombre à virgule flottante.

System.Math.RoundTo

Extended Extended Oui -20 .. +20 pas de valeur par défaut. Toujours rmNearest (arrondi du banquier)

System.Math.SimpleRoundTo

Single
Double
Extended

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.

System.Math.Ceil

Single
Double
Extended

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

System.Round(x)

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

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)

1 1 1 2 2 2

Math.Floor(x)

0 0 0 1 1 1

FMTBcd.BCDRoundTo(x,0)

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

System.Round(x)

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

FMTBcd.BCDRoundTo(x,0)

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

Exemples de code