format interne décimal vb / c #

Quel est le format interne d’une valeur “décimale” en VB ou en C #?

Je ne sais pas si cela compte pour tout ce que je fais immédiatement, mais c’est une de ces choses qu’il est bon de savoir. Par exemple, connaître le nombre de bits et la manière dont les nombres négatifs sont stockés peut signifier que, lorsque vous voyez un nombre négatif apparaître là où vous vous attendiez à un résultat positif, vous pouvez instantanément penser: “Ah, il y a eu un dépassement de capacité” plutôt que d’être dérouté par de profonds mystères noirs .

La réponse à votre question est fournie en texte intégral par la documentation :

Le type de valeur décimale représente des nombres décimaux allant de 79 228,162,144,364,337,593,543,935,335 positif à négatif 79,228,162,514,264,337,593,543,950,335. Le type de valeur décimale convient aux calculs financiers nécessitant un grand nombre de chiffres entiers et fractionnaires significatifs et aucune erreur d’arrondi. Le type décimal n’élimine pas le besoin d’arrondir. Cela minimise plutôt les erreurs dues à l’arrondissement.

Un nombre décimal est une valeur à virgule flottante constituée d’un signe, d’une valeur numérique où chaque chiffre de la valeur est compris entre 0 et 9, et d’un facteur d’échelle indiquant la position d’un point décimal à virgule flottante séparant les parties entière et fractionnaire de la valeur numérique.

La représentation binary d’une valeur décimale consiste en un signe de 1 bit, un nombre entier de 96 bits et un facteur de mise à l’échelle utilisé pour diviser l’entier de 96 bits et spécifier sa partie comme fraction décimale. Le facteur de mise à l’échelle est implicitement le nombre 10, élevé à un exposant compris entre 0 et 28. Par conséquent, la représentation binary d’une valeur décimale est de la forme ((-2 96 à 2 96 ) / 10 (0 à 28) ). , où -2 96 -1 est égal à MinValue et 2 96 -1 à MaxValue. Pour plus d’informations sur la représentation binary des valeurs Decimal et un exemple, voir le constructeur Decimal (Int32 []) et la méthode GetBits .

Le facteur de mise à l’échelle conserve également les zéros de fin dans un nombre décimal. Les zéros à la fin n’affectent pas la valeur d’un nombre décimal dans les opérations arithmétiques ou de comparaison. Cependant, les zéros de fin peuvent être révélés par la méthode ToSsortingng si une chaîne de format appropriée est appliquée.

Et la représentation binary, telle que décrite dans la documentation de GetBits :

La représentation binary d’un nombre décimal consiste en un signe de 1 bit, un nombre entier de 96 bits et un facteur de mise à l’échelle utilisé pour diviser le nombre entier et spécifier sa partie comme fraction décimale. Le facteur d’échelle est implicitement le nombre 10, élevé à un exposant compris entre 0 et 28.

La valeur de retour est un tableau à quatre éléments d’entiers signés 32 bits.

Les premier, deuxième et troisième éléments de la masortingce renvoyée contiennent les 32 bits de poids faible, moyen et élevé du nombre entier de 96 bits.

Le quasortingème élément du tableau renvoyé contient le facteur d’échelle et le signe. Il comprend les parties suivantes:

Les bits 0 à 15, le mot inférieur, sont inutilisés et doivent être zéro.

Les bits 16 à 23 doivent contenir un exposant compris entre 0 et 28, ce qui indique la puissance de 10 pour diviser le nombre entier.

Les bits 24 à 30 sont inutilisés et doivent être zéro.

Le bit 31 contient le signe: 0 signifie positif, et 1 signifie négatif.

Notez que la représentation des bits fait la différence entre un zéro négatif et positif. Ces valeurs sont traitées comme étant égales dans toutes les opérations.

C # et decimal VB.NET font tous deux référence à System.Decimal , qui est bien documenté: System.Decimal

décimal (référence C #)

Le mot clé décimal désigne un type de données 128 bits. Par rapport aux types à virgule flottante, le type décimal a une précision plus grande et une plage plus petite, ce qui le rend approprié pour les calculs financiers et monétaires. La plage approximative et la précision pour le type décimal sont indiquées dans le tableau suivant.

Plage: ± 1,0 × 10−28 à ± 7,9 × 1028 Précision: 28 à 29 chiffres significatifs

Type de données décimal (Visual Basic)

Conserve les valeurs signées 128 bits (16 octets) représentant des nombres entiers de 96 bits (12 octets) mis à l’échelle par une puissance variable de 10. Le facteur de mise à l’échelle spécifie le nombre de chiffres à droite du point décimal; elle va de 0 à 28. Avec une échelle de 0 (aucune décimale), la valeur la plus grande est 79228,162,214,264,337,593,543,950,335 (+/- 7,9228162514264337593543950335E + 28). Avec 28 décimales, la plus grande valeur est +/- 7,9228162514264337593543950335 et la plus petite valeur non nulle est +/- 0.0000000000000000000000000001 (+/- 1E-28).