Maison  >  Article  >  développement back-end  >  Questions sur les opérations à virgule flottante PHP et js

Questions sur les opérations à virgule flottante PHP et js

一个新手
一个新手original
2017-10-12 09:15:081243parcourir

javascript

0,1 + 0,2 Pourquoi n'est-il pas égal à 0,3 ? (Résultat correct : 0,30000000000000004)

0,8 * 7 Pourquoi n'est-il pas égal à 5,6 (Résultat correct : 5,6000000000000005)

PHP

var_dump(intval(0.58 * 100));

Le résultat correct est 57, pas 58

Les problèmes causés par les opérations en virgule flottante

En fait, ces résultats ne sont pas bogues de langage, mais sont liés au langage. Concernant le principe d'implémentation, tous les nombres dans js sont unifiés en tant que Nombre, y compris les entiers, qui sont en fait tous des types doubles.

Et PHP fera la distinction entre int et float. Quelle que soit la langue, tant que des opérations en virgule flottante sont impliquées, il existe des problèmes similaires, vous devez donc y prêter attention lorsque vous les utilisez.

Principe binaire à virgule flottante

Selon la norme internationale IEEE 754, tout nombre binaire à virgule flottante V peut être exprimé sous la forme suivante :

V = (-1)s * M * E 

    1. (-1)s 表示符号位,当s=0,V为正数;当s=1,V为负数。
    2. M表示有效数字,大于等于1,小于2。
    3. 2E 表示指数位。

Par exemple : décimal -5,0, écrit en binaire est -101,0, ce qui équivaut à -1,01×22. Alors, s=1, M=1,01, E=2.
IEEE 754 stipule que pour un nombre à virgule flottante de 32 bits, le bit le plus élevé est le bit de signe s, les 8 bits suivants sont l'exposant E et les 23 bits restants sont le chiffre significatif M.

Questions sur les opérations à virgule flottante PHP et js

Pour un nombre à virgule flottante de 64 bits, le bit le plus élevé est le bit de signe S, les 11 bits suivants sont l'exposant E et les 52 bits restants sont le chiffre significatif M.

Questions sur les opérations à virgule flottante PHP et js

IEEE 754 comporte des dispositions spéciales pour le chiffre significatif M et l'exposant E.

Comme mentionné précédemment, 1≤M490f01de293ed30456b9eb196fdfbf26

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn