Dans un article sur MSDN, il est indiqué que le type de données double
a une plage de “-1.79769313486232e308 .. 1.79769313486232e308”. Alors que le type de données long
a seulement une plage de “-9,223,372,036,854,775,808 .. 9,223,372,036,854,775,807”. Comment un double
peut-il contenir tellement plus de données qu’un long
s’ils ont tous les deux une taille de 64 bits?
http://msdn.microsoft.com/en-us/library/cs7y5x0x(v=vs.90).aspx
Le nombre de doubles possibles, et le nombre de longs possibles est le même, ils sont juste dissortingbués différemment *.
Les longs sont uniformément répartis, alors que les flotteurs ne le sont pas. Vous pouvez lire plus ici .
J’écrirais plus, mais pour une raison quelconque, le curseur saute de partout sur mon téléphone.
Edit: Cela pourrait effectivement être plus utile: http://en.wikipedia.org/wiki/Double-precision_floating-point_format#section_1
Edit2: et c’est encore mieux: http://blogs.msdn.com/b/dwayneneed/archive/2010/05/07/fun-with-floating-point.aspx
* Selon ce lien, il semblerait qu’il y ait en réalité plus de longs, étant donné que certains doubles sont perdus en raison de la façon dont les NaN et d’autres numéros spéciaux sont représentés.
long
correspond à un entier signé de 64 bits et double
un nombre à virgule flottante de 64 bits. Regarder leurs types de FCL pourrait être plus logique. long
mappe à System.Int64
et double
mappe à System.Double
.
Une réponse simple consiste à dire que le double
n’a une précision que de 15 à 16 chiffres au total, par opposition à long
qui (en tant que type entier) a une précision absolue dans une limite de chiffres explicite , dans le cas présent 19 chiffres. (Gardez à l’esprit que les chiffres et les valeurs sont sémantiquement différents.)
double
: – / + 0,000,000,000,000,01 à +/- 99.999.999.999.999.9 (à 100% de précision, avec une perte de précision à partir du 16ème chiffre, comme représenté dans “-1.79769313486232e308 .. 1.79769313486232e308”.)
long
: -9,223,372,036,854,775,808 à +9,223,372,036,854,775,807
ulong
: 0 à 18 446 744 073 709 551 615 (1 chiffre de plus que la valeur la plus longue, mais plage de valeurs identique (puisqu’elle a uniquement été décalée pour exclure les rendements négatifs).
En général, les nombres réels de type int sont préférés aux valeurs décimales à virgule flottante, à moins que vous n’ayez explicitement besoin d’une représentation décimale (quel que soit le but).
De plus, vous savez peut-être que les signatures sont préférables aux non – signées , car les premières sont beaucoup moins sujettes aux bogues (considérons la déclaration uint i;
alors i - x;
où x > i
).