En Norme IEEE pour l'arithmétique à virgule flottante (IEEE 754) est la norme la plus largement utilisée pour le calcul à virgule flottante, et est suivie par de nombreuses implémentations matérielles et logicielles, y compris le compilateur C#.
Cela signifie qu'une variable à virgule flottante en C# peut contenir un motif de bits qui représente des créatures étranges telles que PositiveInfinity, NegativeInfinity et Not-a-Number (abrégé en NaN). Selon les règles arithmétiques IEEE 754, n'importe laquelle de ces valeurs flottantes non finies peut être générée par certaines opérations. Par exemple, une opération en virgule flottante invalide, telle que la division de zéro par zéro, donne NaN.
Dans vos exemples spécifiques, vous pouvez voir que C# (contrairement à VB) surcharge l'opérateur / pour signifier soit une division en nombres entiers, soit une division en nombres à virgule flottante, en fonction des types numériques des nombres concernés.
Dans le premier exemple, le compilateur voit 1,0, et utilise donc la division en virgule flottante et place le résultat dans une variable en virgule flottante. Cette variable contient une représentation de l'infini.
Dans le second exemple, le compilateur voit 1, et utilise donc la division entière et place le résultat dans une variable entière. Comme les types intégraux en C# utilisent le système de complément à deux pour la représentation, et n'utilisent pas de modèles de bits spéciaux pour représenter l'infini (ou NaN), le compilateur donne une erreur.
Il existe également d'autres subtilités intéressantes du point flottant . Et cela vaut la peine d'être lu Entrée du blog d'Eric Lippert sur le sujet.
7 votes
+1 bonne question. et en plus des autres réponses, c'est la raison pour laquelle nous avons seulement
float/double.Is(Positive/Nagative)Infinity
alors qu'aucunint.IsInfinity
méthodes.