Perché i numeri in virgola mobile sono usati spesso in Scienze / Ingegneria?

32

Mentre analizzavo la precisione dei numeri in virgola mobile, ho visto in alcuni punti un'affermazione simile a

" float e double sono ( progettati per / usati spesso ) calcolo tecnico e scientifico "

Da quanto ho capito, la forza dei float e dei doppi è la quantità di memoria che usano per la loro precisione (buona, ma non perfetta).

Mi sembra di avere quasi capito da questa risposta

"I numeri in virgola mobile consentono di modellare le quantità continue"

Non sono ancora convinto di aver capito. Ingegneria e Scienza sembrano entrambi campi in cui vorresti ottenere risultati precisi dai tuoi calcoli, che, dalla mia comprensione, i punti fluttuanti non danno. Non sono nemmeno sicuro di seguire ciò che una "quantità continua" è, esattamente.

Qualcuno può approfondire questa spiegazione e magari dare un esempio?

    
posta DoubleDouble 21.10.2014 - 20:40
fonte

9 risposte

73

Il calcolo in scienze e ingegneria richiede compromessi in termini di precisione, autonomia e velocità. L'aritmetica a punti fissi fornisce precisione e velocità decente, ma sacrifica l'autonomia. BigNum, librerie di precisione arbitrarie, vincono gamma e precisione, ma perdono velocità.

Il nocciolo della questione è che la maggior parte dei calcoli scientifici e ingegneristici richiedono un'alta velocità e una vasta gamma, ma hanno esigenze di precisione relativamente modeste. La costante fisica più ben determinata è nota solo a circa 13 cifre e molti valori sono noti con molta meno certezza. Avere più di 13 cifre di precisione sul computer non aiuterà questo. L'unico neo è che le sequenze di operazioni in virgola mobile possono gradualmente perdere la precisione. Il pane e il burro dell'analisi numerica sta individuando quali problemi sono particolarmente suscettibili a questo e individuando modi intelligenti di riorganizzare la sequenza di operazioni per ridurre il problema.

Un'eccezione a questa è la teoria dei numeri in matematica che deve eseguire operazioni aritmetiche su numeri con milioni di cifre ma con precisione assoluta. I teorici dei numeri numerici usano spesso le librerie BigNum e sopportano i loro calcoli impiegando molto tempo.

    
risposta data 21.10.2014 - 21:12
fonte
29

Quale alternativa proponi?

Le quantità continue sono rappresentate utilizzando numeri reali in matematica. Non esiste un tipo di dati che possa codificare ogni possibile numero reale (perché i valori reali non sono numerabili), quindi significa che possiamo selezionare solo un sottoinsieme di quei numeri reali a cui siamo più interessati.

  • Puoi scegliere tutti i real calcolabili, che è simile a quello dei computer algebra systems (CAS). Il problema è che diventa rapidamente irrealizzabile man mano che il tuo albero di espressione diventa sempre più grande. È anche molto lento: prova a risolvere simbolicamente un enorme sistema di equazioni differenziali in Mathematica e confrontalo con altre implementazioni basate su virgola mobile e vedrai una drammatica differenza di velocità. Inoltre, come hanno fatto notare Jörg W Mittag e Kasperd: non hai nemmeno operazioni di uguaglianza / confronto decidibili.

  • Potresti usare numeri razionali esatti, ma in realtà non funziona per molte applicazioni perché devi calcolare radici quadrate o coseni o logaritmi, ecc. Inoltre, i razionali tendono a diventare sempre più complessi e quindi richiede più spazio da archiviare e tempo da elaborare man mano che esegui sempre più calcoli su di essi.

  • Potresti anche usare decimali di precisione arbitraria, ma anche qualcosa di semplice come la divisione non funzionerà perché ottieni cifre a ripetizione infinita. Puoi anche affrontare il problema dell'aumento della complessità mentre esegui risultati più simili ai numeri razionali, anche se in misura minore.

Quindi a un certo punto dovresti usare le approssimazioni, nel qual caso è esattamente dove i numeri in virgola mobile funzionano meglio. I numeri in virgola mobile sono anche di larghezza fissa (a differenza di tutti gli altri 3 tipi di dati menzionati in precedenza), il che impedisce l'aumento della complessità man mano che esegui sempre più calcoli su di essi.

    
risposta data 22.10.2014 - 04:54
fonte
13

La tua proposta in merito alla scienza è sbagliata, Ingegneria e Scienza diverse dalla Matematica non funzionano con risultati precisi e precisi. Funzionano con un fattore di precisione incorporato nel numero di cifre che mostri.

Il termine chiave che devi capire qui è: cifre significative . Le cifre significative di un numero sono quelle cifre che contengono un significato che contribuisce alla sua precisione.

Il che significa in sostanza se dichiaro che qualcosa è lungo 12 centimetri, in realtà può essere da qualche parte tra 11,5 e 12,5 centimetri di lunghezza. Se tuttavia dichiaro che qualcosa è lungo 12,00 centimetri, può essere tra 11.995 e 12.005 centimetri di lunghezza.

Proprio come un esempio, se prendi un metro e misura il tuo salotto. Anche se potresti scoprire che è largo 6 metri e 25 centimetri, sai che la misura del tuo nastro non è stata sufficientemente accurata da dire nulla sull'accuratezza millimetrica o sull'accuratezza del nano-metro.

    
risposta data 22.10.2014 - 00:44
fonte
6

Nota che i numeri in virgola mobile sono fondamentalmente uguali alla notazione scientifica e engineering , il modo standard per gli umani di scrivere numeri in matematica e scienze. In questi campi, non c'è un grande bisogno di estrema precisione, ma spesso c'è un intervallo enorme .

Per scegliere un esempio casuale dai miei compiti di fisica, di recente ho dovuto lavorare con la massa di un elettrone, che è all'incirca 9.11 * 10 ^ -31 kg. Non mi interessa molto della precisione; potrebbe facilmente essere 9.12 per tutto quello che mi interessa. Ma mi interessa l'esponente e non voglio dover scrivere 0,0000 ... 911 kg, quindi uso la notazione scientifica.

Un ragionamento simile si applica al calcolo scientifico e ingegneristico: c'è una vasta gamma, ma non vogliamo dover archiviare e lavorare con numeri molto grandi, quindi archiviamo un valore normalizzato e un esponente, che è più piccolo e più veloce da lavora con.

    
risposta data 21.10.2014 - 21:47
fonte
5

I numeri in virgola mobile hanno anche diverse proprietà che si prestano bene al calcolo di determinati tipi di risultati scientifici. In particolare, la precisione è inversamente proporzionale alla magnitudine, proprio come nella notazione scientifica, quindi puoi rappresentare sia le piccole differenze vicine allo zero sia le differenze più grandi molto più lontane.

Il documento di Goldberg è probabilmente l'analisi più famosa delle proprietà del floating -point number (e dovrebbe essere richiesto di leggere se ti interessa questo genere di cose), ma i documenti di Kahan penso fare un lavoro migliore per spiegare la logica dietro molti dei sottili problemi di design.

In particolare, la diatriba di Kahan sull'implementazione di Java di virgola mobile , mentre è piuttosto infiammatoria, rende diversi buoni punti sul perché la semantica IEEE-754 è utile, e Molto segno del bit di nulla rumore del sito esplora la logica per la firma zero in notevole profondità.

    
risposta data 22.10.2014 - 00:29
fonte
2

TL; DR Non sappiamo come calcolare la maggior parte delle funzioni con precisione perfetta, non c'è quindi alcun punto che rappresenti i numeri con precisione perfetta.

Tutte le risposte finora mancano il punto più importante: non possiamo calcolare i valori esatti della maggior parte dei numeri. Come caso speciale importante, non possiamo calcolare i valori esatti della funzione esponenziale - per citare solo la funzione irrazionale più importante.

Risposta ingenua alla domanda ingenua

Sembra che la tua domanda sia piuttosto "ci sono librerie aritmetiche esatte, perché non le usiamo al posto dell'aritmetica in virgola mobile?" La risposta è che l'aritmetica esatta funziona su numeri razionali e che:

  • Il numero di Archimede - il nome pedante di π - non è razionale.
  • Molte altre costanti importanti non sono razionali.
  • Molte altre costanti importanti non sono nemmeno conosciute per essere razionali o meno.
  • Per qualsiasi numero razionale diverso da zero x il numero exp (x) è irrazionale.
  • Dichiarazioni simili valgono per radicali, logaritmi e una vasta gamma di funzioni importanti per gli scienziati (distribuzione di Gauss, le sue funzioni CDF, Bessel, funzioni di Eulero, ...).

Il numero razionale è un incidente fortunato. La maggior parte dei numeri non è razionale (vedi il teorema di Baire) in modo da calcolare sui numeri ci porterà sempre fuori dal mondo razionale.

Che cos'è il calcolo e rappresenta un numero?

Potremmo reagire dicendo "OK, il problema è che i numeri razionali non erano una scelta così grande per rappresentare numeri reali". Quindi apriamo i nostri sleavi fork Debian e ideare un nuovo sistema di rappresentazione per numeri reali.

Se vogliamo calcolare i numeri dobbiamo scegliere un sistema di rappresentazione per i numeri reali e descrivere operazioni importanti su di essi - cioè definire cosa significa computing . Poiché siamo interessati al calcolo scientifico, vogliamo rappresentare con precisione tutti i numeri decimali (le nostre misure), i loro quozienti (numeri razionali), i valori delle funzioni esponenziali e alcune costanti divertenti, come il numero di Archimede.

Il problema è che l'unico modo per rappresentare perfettamente i numeri in un tale sistema è usare la forma simbolica, cioè non calcolare nulla e lavorare con espressioni algebriche. Questa è una rappresentazione piuttosto azzoppata dei numeri reali, perché non possiamo confrontare in modo affidabile due numeri (quale è maggiore)? Non possiamo nemmeno rispondere facilmente alla domanda "Il numero indicato è uguale a 0?".

Se cerchi definizioni e problemi matematici più precisi, cerca numeri razionali, numeri trascendenti, le migliori approssimazioni e il teorema di Baire, per esempio.

    
risposta data 22.10.2014 - 10:40
fonte
0

Perché

1) Gli autori affermano che "il calcolo ingegneristico e scientifico" misura le quantità fisiche del mondo reale

2) Le quantità fisiche sono continue e esattamente come si afferma "i numeri in virgola mobile consentono di modellare le quantità continue"

.. e il resto della mia risposta è sintetizzato bene da Rufflewind , quindi non sto andando per ripeterlo qui.

    
risposta data 22.10.2014 - 09:36
fonte
0

I numeri in virgola mobile forniscono una precisione relativa: possono rappresentare numeri che sono al massimo una piccola percentuale (se si desidera chiamare qualcosa come 0.0000000000001% in percentuale) lontano da qualsiasi numero preciso su una vasta gamma di numeri. Condividono questa caratteristica con una regola di diapositiva, sebbene quest'ultima non migliori di qualcosa come 3 cifre di precisione. Tuttavia, era abbastanza sufficiente per elaborare le forze statiche e dinamiche di grandi strutture prima che i computer digitali diventassero un luogo comune per questo, e questo perché le costanti materiali mostrano anche alcune variazioni, e i costrutti che sono ragionevolmente benigni contro le differenze materiali e costruttive tenderanno a per rendere i carichi massimi e i punti deboli ragionevolmente identificabili.

Ora "accuratezza" è una caratteristica utile per molti numeri che rappresentano misure e / o magnitudini di proprietà fisiche.

Non tutto nella scienza / ingegneria appartiene a quella categoria. Ad esempio, se si utilizzano trasformazioni teoriche numeriche per moltiplicare i numeri grandi oi campi di Galois per manipolare i polinomi di correzione dell'errore, non esiste un errore piccolo: qualsiasi errore di bit singolo durante l'elaborazione porterà a risultati del tutto indistinguibili da quelli completamente casuali rumore.

Anche in quelle aree si può lavorare con numeri in virgola mobile (come l'utilizzo di FFT complessi per fare convoluzione) se si tiene traccia dell'accumulo di errori e si assicura che gli errori in virgola mobile non accumulino abbastanza magnitudine per eventualmente persino capovolgere un singolo bit nelle entità reali di cui sono approssimazioni. Per tali approssimazioni, l'elaborazione a punto fisso sarebbe probabilmente più appropriata, ma le unità in virgola mobile nel campo tendono a fornire operazioni più veloci e un numero maggiore di bit utilizzabili.

Anche la programmazione di linguaggi come C o Fortran rende incredibilmente difficile accedere a operazioni di base come la moltiplicazione e divisione a precisione mista o un bit di riporto per addizione / sottrazione, e questi sono elementi basilari per andare oltre gli interi di precisione limitati.

Quindi, se puoi mappare le operazioni a numeri in virgola mobile, tendi ad avere hardware ragionevolmente potente a tua disposizione in questi giorni e puoi ragionevolmente specificare gli algoritmi in uno dei linguaggi di programmazione generici di oggi.

    
risposta data 22.10.2014 - 18:34
fonte
0

Penso che si possa rispondere a questa domanda indirizzando a quali tipi di dati dell'applicazione float / double non sono adatti.

Quando devi assicurarti di poter rappresentare un numero in modo accurato con un numero specifico di cifre, allora i numeri in virgola mobile sono inappropriati, perché rappresentano i numeri come poteri di 2, invece di poteri di 10, così come lo siamo noi rappresentano numeri nel mondo reale.

Quindi un dominio in cui non dovrebbero essere utilizzati i tipi di dati in virgola mobile è quello della finanza *. Per il sistema principale di ad es. una banca, sarebbe del tutto inaccettabile se un importo che avrebbe dovuto essere $ 100000,01 diventasse improvvisamente $ 100000,00 o $ 100000,02.

Un tale problema potrebbe facilmente verificarsi quando si utilizzano i float, specialmente se il numero era il risultato di uno o più calcoli, ad es. calcolare la somma di tutte le transazioni in un account.

Il calcolo tecnico e scientifico sono domini in cui questi errori di arrotondamento relativamente piccoli sono accettabili. Gli utenti sono normalmente consapevoli del fatto che tutti i numeri hanno una precisione limitata e spesso funzionano con un numero di cifre significative . Ma soprattutto hanno una precisione relativa ben definita, cioè forniscono lo stesso numero di cifre significative, sia per numeri molto grandi, sia per numeri molto piccoli.

* Una volta ho lavorato a un'applicazione finanziaria in cui float s era stato utilizzato per rappresentare i valori e, di conseguenza, sono stati introdotti errori di arrotondamento. Fortunatamente, questo bug specifico non era affatto critico, gli utenti si lamentavano degli errori di calcolo nel programma. E questo ha portato a un effetto diverso, molto peggiore: gli utenti hanno iniziato a perdere fiducia nel sistema.

    
risposta data 23.10.2014 - 16:58
fonte

Leggi altre domande sui tag