Double a-t-il une scope plus grande que longue?

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 nonsignées , car les premières sont beaucoup moins sujettes aux bogues (considérons la déclaration uint i; alors i - x;x > i ).