stranezza della matematica in virgola mobileSto usando JMP15.
Di recente mi sono reso conto che una sceneggiatura che ho usato per qualche tempo ha avuto un piccolo errore che deriva da una stranezza a virgola mobile che è illustrata di seguito.
Le prime due righe calcolano lo stesso numero -> 23.
Quando utilizzo la funzione soffitto, la prima versione restituisce 24 e la seconda restituisce 23.
Questo dovrebbe succedere?
visualizzare (((1104/2016) * 42));
visualizzare (((42 * 1104/2016)));
spettacolo (soffitto ((1104/2016) * 42));
spettacolo (soffitto ((42 * 1104/2016)));
/ *:
(1104/2016) * 42 = 23;
42 * 1104/2016 = 23;
Soffitto ((1104/2016) * 42) = 24;
Soffitto (42 * 1104/2016) = 23;
ScriptingRi: stranezza della matematica in virgola mobileHai già visto che si tratta di una stranezza a virgola mobile. Dovrebbe accadere, tecnicamente no, ma ci saranno sempre strani "problemi di arrotondamento" a causa di calcoli in virgola mobile.
Se inserisci il primo calcolo in una colonna (1104/2016) * 42, modifica la larghezza della colonna in 30 (arbitrariamente grande), formatta in Decimale fisso con 20 cifre decimali e vedrai che il numero è memorizzato come: 23.0000000000000000355271 .
Ri: stranezza della matematica in virgola mobile2016: 2 × 2 × 2 × 2 × 2 × 3 × 3 × 7
1104: 2 × 2 × 2 × 2 × 3 × 23
42: 2 × 3 × 7
1104/2016 è ( 2 × 2 × 2 × 2 × 3 × 23) / ( 2 × 2 × 2 × 2 × 2 × 3 × 3 × 7)
23 / (2 × 3 × 7) è una frazione ripetuta nella base 10 E nella base 2 (esadecimale, base 16, mostrata con 4 bit per cifra esadecimale):
,5476190476190476190476190 ... o 3FE186186186186 ... (fortunata ripetizione a 12 bit per la visualizzazione!)
Entrambi sono troncati e imprecisi. Il valore effettivo per la rappresentazione della base esadecimale 2 è arrotondato a 3FE1861861861862, che è leggermente alto (3FE è l'esponente). Moltiplicare per 42, dopo la divisione, è anche leggermente alto.
(42 × 1104) / 2016 è (( 2 × 3 × 7 ) × ( 2 × 2 × 2 × 2 × 3 × 23)) / ( 2 × 2 × 2 × 2 × 2 × 3 × 3 × 7 )
Moltiplicare per 42, prima del divario, ottiene una buona riduzione dei divisori primi.
Ri: stranezza della matematica in virgola mobilePenso che inquadrerò quella risposta