human
Nombres "à virgule flottante" J'ai essayé de regarder la page Wikipedia normale et putain de surcharge. Je cherchais à les utiliser en Python , comme suggéré par le jeu de tutoriels [ Learn Python The Hard Way ] ( URL_0 ) . Explique comme si j'avais cinq ans.
gpt
Lors de la programmation, si vous avez besoin d'un nombre, comme 2 ou 27 ou -3, vous utilisez un nombre entier. Ceci est juste une représentation binaire d'un nombre entier. Pour que l'ordinateur soit rapide, ces nombres sont limités par le nombre de bits d'un mot informatique. Par exemple , sur une machine 32 bits , les entiers sont représentés par 32 bits en binaire , ce qui correspond à une plage de - ( 2 ^ 31 ) à ( 2 ^ 31 - 1 ) . C'est environ -2 milliards à +2 milliards. Eh bien , et si vous voulez un nombre décimal , comme 3,25 ? Ou un nombre supérieur à 2 milliards ? C'est quand nous utilisons la virgule flottante. Au lieu d'être représenté comme un nombre binaire (c'est-à-dire, 5 = 101) nous le stockons comme une *mantisse* et un *exposant*. Par exemple, dans un certain schéma à virgule flottante de 32 bits, vous aurez peut-être une mantisse de 21 bits, un exposant de 10 bits et un bit pour positif/négatif. La mantisse est le nombre , et l'exposant est la puissance de 2 pour multiplier ce nombre par . ( c'est-à-dire mantisse * 2^exposant ) . Ce n'est pas la meilleure explication d' ELI5 donc voici un exemple en mathématiques 8 bits ( divisé en octets de 4 bits pour être facile à lire ) : Format entier : le premier bit est 0 pour positif et 1 pour négatif , les 7 bits suivants sont les nombre en binaire. Entier +5 : 0000 0101 Entier -3 : 1000 0011 Entier +8 : 0000 1000 Entier -8 : 1000 1000 Pour les flottants , le premier bit sera à nouveau le bit négatif / positif , les trois suivants seront l' exposant , et le dernier quatre seront la mantisse. Flottant +0.25 : 0110 0001 - > + 1 * 2 ^ -2 = 1 * 0.25 = 0.25 Flottant -2.50 : 1101 0101 - > - 5 * 2 ^ -1 = 5 * 0.5 = 2.5 Flottant +5.00 : 0001 0101 - > + 5 * 2 ^ + 1 = 5 * 1 = 5 Vous remarquerez que je n'ai pas assez de précision pour représenter 0,1 avec ce schéma , donc si j'essayais de représenter cela, je devrais juste me rapprocher le plus possible Je pourrais . C'est pourquoi lorsque vous écrivez quelque chose comme 3 * 0,1 dans un ordinateur, vous obtenez généralement quelque chose comme 0,30000000000000000012321 au lieu de 0,3. Le moyen de contourner cette limitation ( et si vous avez besoin de représenter des nombres VRAIMENT grands ) est d' utiliser une représentation BigDecimal qui est beaucoup plus lente mais dont la précision est garantie . REMARQUE : dans les vrais ordinateurs, je pense que la mantisse et l'exposant sont disposés différemment, et les entiers sont généralement représentés en complément à 2, et il existe plusieurs autres concepts comme NaN que j'ai laissés de côté par souci de simplicité. EDIT : mise en forme