étrangeté des mathématiques en virgule flottanteJ'utilise JMP15.
J'ai récemment réalisé qu'un script que j'utilisais depuis un certain temps contenait une petite erreur qui provenait d'une bizarrerie à virgule flottante illustrée ci-dessous.
Les deux premières lignes calculent le même nombre -> 23.
Lorsque j'utilise la fonction plafond, la première version renvoie 24 et la seconde renvoie 23.
Cela devrait-il se produire?
émission (((1104/2016) * 42));
montrer (((42 * 1104/2016)));
spectacle (plafond ((1104/2016) * 42));
spectacle (plafond ((42 * 1104/2016)));
/ *:
(1104/2016) * 42 = 23;
42 * 1104/2016 = 23;
Plafond ((1104/2016) * 42) = 24;
Plafond (42 * 1104/2016) = 23;
ScriptingRe: étrangeté des mathématiques en virgule flottanteVous avez déjà vu qu'il s'agit d'une bizarrerie à virgule flottante. Si cela se produit, techniquement non, mais il y aura toujours d'étranges "problèmes d'arrondi" en raison des calculs en virgule flottante.
Si vous placez le premier calcul dans une colonne (1104/2016) * 42, changez la largeur de la colonne à 30 (arbitrairement grande), formatez en Decimal fixe avec 20 décimales, vous verrez que le nombre est stocké comme: 23.00000000000000355271 .
Re: étrangeté des mathématiques en virgule flottante2016: 2 × 2 × 2 × 2 × 2 × 3 × 3 × 7
1104: 2 × 2 × 2 × 2 × 3 × 23
42: 2 × 3 × 7
1104/2016 est ( 2 × 2 × 2 × 2 × 3 × 23) / ( 2 × 2 × 2 × 2 × 2 × 3 × 3 × 7)
23 / (2 × 3 × 7) est une fraction répétée en base 10 ET en base 2 (hex, base 16, indiquée avec 4 bits par chiffre hexadécimal):
0,5476190476190476190476190 ... ou 3FE186186186186 ... (Répétition chanceuse de 12 bits pour la visualisation!)
Ces deux éléments sont tronqués et imprécis. La valeur réelle de la représentation hexa base 2 est arrondie à 3FE1861861861862, ce qui est légèrement élevé (3FE est l'exposant). Multiplier par 42, après la fracture, est également légèrement élevé.
(42 × 1104) / 2016 est (( 2 × 3 × 7 ) × ( 2 × 2 × 2 × 2 × 3 × 23)) / ( 2 × 2 × 2 × 2 × 2 × 3 × 3 × 7 )
Multiplier par 42, avant la division, obtient une belle réduction des diviseurs premiers.
Re: étrangeté des mathématiques en virgule flottanteJe pense que je vais encadrer cette réponse