2010-10-01 8 views
3

J'ai vu ce code flottant autour des intertubes pour déterminer si un appareil Windows Mobile dispose d'un écran VGA (code est dans une méthode d'une classe Form):C# float comparaison à int

SizeF currentScreen = this.CurrentAutoScaleDimensions; 
bool isVGA = currentScreen.Height == 192; 

Est-il possible que isVGA peut être défini sur false même si l'écran est VGA en raison d'une imprécision flottante (la propriété Height est un flottant)?

+0

Donc, je suppose que votre question est en réalité si CurrentAutoScaleDimensions peut renvoyer une valeur flottante non-entier? –

Répondre

4

Pas dans l'exemple que vous présentez, car (nombre conforme à la norme IEEE 754, 32 bits) can accurately represent all integers (whole numbers) whose absolute value is less than or equal to 2^24.

+0

Bonne réponse! Vous êtes allé droit au but. Si j'étais vraiment paranoïaque, je m'inquiéterais si je pouvais être sûr que tout le monde suivrait cette norme. Je suppose qu'il est raisonnable de supposer que tout le monde suivrait au moins la norme suffisamment pour représenter avec précision les petits entiers positifs comme des flotteurs. Est-ce correct? –

+1

@INTPnerd: Il est important de vérifier que votre langage de programmation est conforme à cette norme (extrêmement courante). C# fait, selon la spécification 3.0: * Les deux types à virgule flottante, float et double, sont représentés en utilisant les formats IEEE 754 à simple précision de 32 bits et à double précision de 64 bits. * –

+0

très utile. Merci. –