Spiegazione della precisione in virgola mobile per i clienti [chiuso]

23

Qual è il modo migliore per spiegare il problema dell'arrotondamento in virgola mobile a clienti ?

Lo so

link

così come le voci nelle FAQ C ++ e in varie altre pagine rivolte a sviluppatori e scienziati, ma c'è una pagina web, un articolo o una spiegazione, rivolta a clienti "regolari" con un background matematico o scientifico limitato? (per cui i riferimenti sopra riportati cadono in modo piatto).

Se fosse mantenuto o provenisse da un'istituzione o corporazione ben nota e riconosciuta, tanto meglio, dato che, come alcuni di voi potrebbero aver vissuto, può essere un po 'complicato spiegarlo da soli.

    
posta Eric Grange 17.05.2011 - 09:34
fonte

8 risposte

8

Trovo che un modo semplice per spiegare questo è quello di dimostrarlo . Spiega come dividere x di un numero, quindi moltiplicando per lo stesso numero dovresti tornare di nuovo a x - chiedere al cliente di concordare che questo dovrebbe sempre essere il caso. Quindi fai il vecchio (100 / 3) * 3 su una calcolatrice; mostra che il valore non, come ti aspetteresti, ritorna a 100. Quando la maggior parte delle persone vede la matematica apparentemente semplice "abbattere", tende a "prendere" il pericolo di numeri in virgola mobile dove la precisione è importante (anche se in un intuitivo modo, piuttosto che al livello basso in cui va l'articolo in cui punti).

Sfortunatamente la maggior parte dei calcolatori semi-decenti (sicuramente tutti quelli scientifici che ho visto, e più di alcuni di quelli di base) oggi sono in grado di gestirli - presumo stiano memorizzando cifre extra oltre a ciò che può essere visualizzato e arrotondato - Quindi controlla quanto è intelligente la tua calcolatrice prima di farlo davanti al tuo cliente.

    
risposta data 17.05.2011 - 09:46
fonte
5

Non penso ci siano scorciatoie. Devi:

  • Comprendi cos'è il virgola mobile e come si comporta.

Oppure, se è troppo richiesto, devi solo:

  • Accetta che il computer non ti fornisca risultati numerici esatti.

Forse un esempio con numeri irrazionali aiuta (anche se i problemi in virgola mobile si applicano anche ai numeri razionali): sqrt(2) ~ 1.414 . Quindi 1.414^2 = 1.999396 . Indipendentemente dal numero di cifre che prendi, non tornerai mai indietro al% originale di% co_de. Ok, 4 cifre significative corrette possono essere accettabili, ma poi considera cosa succede quando si accumula questo tipo di "errori di arrotondamento". Ecco dove il vero pericolo è.

    
risposta data 17.05.2011 - 09:49
fonte
5

In primo luogo, determina di cosa si lamentano. Le transazioni finanziarie devono essere eseguite con precisione, con il giusto numero di cifre decimali e le giuste regole di arrotondamento. Questo in genere significa mantenere numeri interi di unità monetarie e assicurarsi che l'aritmetica sia fatta bene.

In alternativa, potrebbero lamentarsi dei display con sovraesposizione e ridurre il numero di output di cifre significative potrebbe essere tutto ciò che è necessario.

Per i numeri in generale, puoi sempre provare a trovare un decimale a tre cifre x tale che x * 3 sia 10. Questo mostra i principi di base.

Ci sono due problemi rimanenti. Uno è che determinati numeri possono essere espressi esattamente in decimale ma non in binario (3,15, per esempio). Sarà difficile da spiegare alle persone non tecniche, e la cosa migliore è cercare di evitarlo, non fornendo cifre sufficientemente significative da farle apparire. L'altro è il cliente che ne sa un po ', abbastanza da sapere che l'aritmetica del computer non è sempre esatta e non abbastanza da comprendere che l'aritmetica decimale non è sempre esatta. Ho discusso con alcuni di questi e non ho nulla di utile da segnalare.

    
risposta data 17.05.2011 - 16:15
fonte
3

I numeri in virgola mobile nei computer usano il binario, quindi, proprio come abbiamo un sistema numerico con un, decine, centinaia e decimi, centesimi colonne, i numeri in virgola mobile nei computer in realtà hanno un, due, quattro e metà, quarti e colonne di ottavi. Se il cliente ha dimestichezza con piedi / pollici, ricorda loro come di solito usi le frazioni di base 2 di un pollice per la misurazione.

Ora prova a memorizzare 10 centesimi come combinazione di metà, quarti, ottavi di dollaro. Semplicemente non funziona:

.00011001100110011. . . ( si ripete all'infinito )

È come prendere un nastro di misurazione imperiale standard e provare a misurare un decimo di pollice. Non puoi farlo in modo accurato. Non esiste alcuna rappresentazione di 1/10 come X / Y in cui X e Y sono numeri interi e Y è una potenza di 2.

Ecco perché abbiamo i tipi di dati decimali che usano 4 bit per memorizzare ogni cifra decimale , quindi torniamo alla rappresentazione di base 10. Il trade-off è nello spazio e nelle prestazioni (circa un colpo di performance del 100%, da quello che ho letto).

    
risposta data 17.05.2011 - 14:10
fonte
1

Dite loro che proprio come il loro conto in banca non può contenere 4.4423425908459032890413 ... dollari (è $ 4,44 o $ 4,45, niente in mezzo), il computer non può facilmente memorizzare un numero con precisione arbitraria. Le imperfezioni dello storage portano a imperfezioni dei calcoli.

(È un po 'ingannevole, ma dovrebbe dare loro un'idea di quale sia il problema.)

    
risposta data 17.05.2011 - 10:02
fonte
1

2/3

Chiedi loro di scrivere la risposta esatta a due divisi per 3.
Dal momento che la risposta 'va avanti per sempre' puoi indicarlo.

Usare 1/3 funzionerebbe anche, ma 2/3 è forse un esempio leggermente migliore dato che l'arrotondamento ti dà (ad esempio) .6666667 mentre .3333333 sembra che possa essere troncato.

    
risposta data 30.08.2015 - 12:48
fonte
0

When doing calculations computers usually use approximations to numbers (like rather than using 1000000.7 they use 1000000) because using approximations is much faster. The problem with that is that when you do calculations with approximations you get approximations back. Usually that works pretty well, but sometimes it leads to unexpected results.

    
risposta data 17.05.2011 - 14:03
fonte
0

Alcuni calcoli sono fatti secondo alcune regole legali. Ad esempio, se si desidera calcolare la quantità di imposte sul reddito da versare su un reddito annuo imponibile di € 79.245,18 in Germania, esiste una sola risposta corretta. Hai capito bene o ti sbagli. Se hai capito bene, non devi spiegare come funziona l'aritmetica in virgola mobile. Se ti sbagli, non devi spiegare come funziona l'aritmetica in virgola mobile, devi correggere il codice rotto.

A volte visualizzi risultati che non sembrano giusti. Ad esempio, se converti US $ 13,297,46 nel Regno Unito £ con due cifre decimali, e quindi converti tale importo di UK £ in US $, potresti non ottenere US $ 13,297,46 ma US $ 13,297,45 o US $ 13,297,47. Questo non ha nulla a che fare con l'aritmetica in virgola mobile. È un problema inevitabile e sarà meglio essere in grado di spiegare perché è inevitabile. (Dovresti anche sapere perché il problema non si verifica quando converti da UK £ a US $ e viceversa).

Ci sono altri possibili risultati che non sembrano giusti. Se si convertono i numeri in percentuali, le percentuali dovrebbero aumentare fino al 100%, ma potrebbero non esserlo. Se visualizzi quattro percentuali con due decimali, le quattro percentuali visualizzate potrebbero aumentare fino al 99,99% o 100,01%. Niente a che vedere con l'aritmetica in virgola mobile. Dovresti essere in grado di spiegare il perché.

Successivamente, ci sono situazioni in cui l'uso incauto dell'aritmetica in virgola mobile porta a risultati inappropriati. Ad esempio, a + b + c di solito non è lo stesso di b + c + a. Se ciò causa un problema, non c'è nulla da spiegare, è qualcosa che risolvi.

    
risposta data 30.08.2015 - 12:04
fonte

Leggi altre domande sui tag