2 votes

typage de long en float en utilisant les bibliothèques gcc

J'exécute un programme simple sur une machine Cnetos 6.2.0 version 64 bits.

int main()
{

int b = 1078085270;//1078085218;
float a;
a = (float)(b);

printf("val of a  is %f\n",a);

return 0;
}

La sortie de a est 1078085248. J'ai changé la valeur en 1078085218. J'ai toujours le même résultat. Je n'arrive pas à comprendre pourquoi ou comment la sortie est corrompue ou modifiée ?

Quelqu'un peut-il m'expliquer ?

4voto

Stephen Canon Points 58003

Regardez le nombre 1078085270 en binaire :

b1000000010000100100011010010110

Un flottant à précision simple IEEE-754 n'a que 24 bits de précision, mais ce nombre a plus de 24 bits significatifs, donc quand vous convertissez ce nombre en float il doit être arrondi. Les deux nombres les plus proches représentables en float sont :

b100000001000010010001101 0000000
b100000001000010010001110 0000000

(les espaces indiquent la rupture entre les 24e et 25e chiffres, le point auquel le nombre est arrondi). Comme votre nombre est plus proche du premier nombre, il est arrondi à cette valeur, soit 1078085248 en décimal.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X