Rilevanza dei calcoli a precisione fissa e arbitraria


10

Vedo pochissime librerie / pacchetti di calcolo in virgola mobile in giro. Date le varie imprecisioni della rappresentazione in virgola mobile, sorge la domanda sul perché non ci siano almeno alcuni campi in cui questa maggiore precisione potrebbe valere la complessità di lavorare con il punto fisso.

Ci sono MAJOR difficoltà nell'usare, per esempio, un risolutore di autovalori a punto fisso? Quanto sarebbero lenti / veloci, inaccurati / precisi?

Correlati: questo e questo


Milind R, grazie per la tua domanda. Penso che la tua domanda sia interessante, ma probabilmente inappropriata per il sito. Vi esorto a consultare le FAQ del sito per assistenza. Quando guardo la tua domanda, ho l'impressione che sia l'inizio di un rant, anche se penso che siano presenti gli elementi di una domanda appropriata per il sito. Vale la pena chiedere se ci sono molte applicazioni dell'aritmetica intera e dell'aritmetica in virgola fissa nella scienza computazionale, e chiedere un confronto di quelle aritmetiche con il virgola mobile. Incoraggio a modificare il tuo post.
Geoff Oxberry

Sì, è nato da un rant, ma l'ho definito come una ricerca di una giustificazione per lo status quo. La mia domanda, come puoi supporre, riguarda il motivo per cui non possiamo avere un grande spostamento verso la matematica a numeri interi e fissi in numerazione intensiva. Potete per favore modificarlo per mio conto? Ci ho davvero provato, ma non so come la mia domanda non sia appropriata.
Milind R

5
Penso che ci sia una risposta tecnica obiettiva a questo: se si esegue quasi tutti i calcoli scientifici (diciamo, una soluzione lineare), il numero di bit necessari per la memorizzazione esatta aumenta esponenzialmente nel tempo. Pertanto, per un lavoro utile è necessario un forte sostegno per inesattezza.
Geoffrey Irving,

@MilindR: la comunità della geometria computazionale è stata interessata a calcoli con numeri reali altamente performanti ed esatti allo stesso tempo. Mi immagino che tutte le questioni pratiche relative a voi possono essere osservati in questo settore di ricerca. Un esempio che potresti cercare è la libreria LEDA.
shuhalo,

@GeoffreyIrving Che dire degli zeri nelle matrici triangolari? Non possono essere memorizzati come nient'altro che inesatto punto mobile in errore?
Milind R

Risposte:


5

L'uso dell'aritmetica in virgola fissa può essere appropriato in determinate circostanze. Generalmente per il calcolo scientifico (almeno nel senso che la maggior parte delle persone ci pensa) non è appropriato a causa della necessità di esprimere le ampie gamme dinamiche incontrate. Si citano i problemi di autovalori come esempio, ma molto spesso nella scienza si è interessati ai più piccoli autovalori di una matrice (diciamo, nel calcolare lo stato fondamentale di un sistema quantistico). L'accuratezza di piccoli autovalori sarà generalmente piuttosto peggiorata rispetto a grandi autovalori se si utilizza il punto fisso. Se la matrice contiene voci che variano in base al rapporto, gli autovalori piccoli potrebbero essere del tutto inesprimibili nella precisione di lavoro. Questo è un problema con la rappresentazione dei numeri; questi argomenti valgono indipendentemente da come si eseguono i calcoli intermedi. Potresti eventualmente elaborare un ridimensionamento da applicare ai risultati calcolati, ma ora hai appena inventato il virgola mobile. È facile costruire matrici i cui elementi sono ben educati, ma i cui autovalori sono estremamente mal comportati (comeMatrici di Wilkinson , o anche matrici con voci interamente intere ). Questi esempi non sono così patologici come potrebbero sembrare, e molti problemi all'avanguardia della scienza coinvolgono matrici molto mal comportate, quindi usare un punto fisso in questo contesto è una Bad Idea (TM).

Potresti sostenere che conosci l'entità dei risultati e non vuoi sprecare bit sull'esponente, quindi parliamo degli intermedi. L'uso del punto fisso generalmente aggraverà gli effetti di cancellazioni e rotondità catastrofiche, a meno che non si faccia davvero molta fatica per lavorare con maggiore precisione. La penalità delle prestazioni sarebbe enorme e suppongo che l'uso di una rappresentazione in virgola mobile con la stessa larghezza di bit della mantissa sarebbe più veloce e più preciso.

Un'area in cui il punto fisso può brillare è in alcune aree del calcolo geometrico. Soprattutto se hai bisogno di un'aritmetica esatta o conosci in anticipo l'intervallo dinamico di tutti i numeri, il punto fisso ti consente di sfruttare tutti i bit della tua rappresentazione. Ad esempio, supponete di voler calcolare l'intersezione di due linee e in qualche modo i punti finali delle due linee sono normalizzati per stare nel quadrato dell'unità. In questo caso, il punto di intersezione può essere rappresentato con più bit di precisione rispetto all'uso di un numero in virgola mobile equivalente (che sprecherà i bit sull'esponente). Ora, quasi certamente, i numeri intermedi richiesti in questo calcolo devono essere calcolati con maggiore precisione, o almeno eseguiti con molta attenzione (come quando si divide il prodotto di due numeri per un altro numero, è necessario fare molta attenzione al riguardo ). A questo proposito, il punto fisso è più vantaggioso dal punto di vista della rappresentazione piuttosto che dal punto di vista computazionale, e vorrei andare fino al punto di dire che questo è generalmente vero quando è possibile stabilire limiti superiori e inferiori definiti sulla gamma dinamica dei risultati dell'algoritmo . Questo succede raramente.

Pensavo che le rappresentazioni in virgola mobile fossero rozze o imprecise (perché sprecare bit su un esponente ?!). Ma col tempo ho capito che è davvero una delle migliori rappresentazioni possibili per numeri reali. Le cose in natura si presentano su scale log, quindi i dati reali finiscono per coprire una vasta gamma di esponenti. Inoltre, per ottenere la massima precisione relativa possibile, è necessario lavorare sulle scale dei registri, rendendo più naturale la localizzazione di un esponente. L'unico altro contendente per una rappresentazione "naturale" è l' indice di livello simmetrico . Tuttavia, l'addizione e la sottrazione sono molto più lente in quella rappresentazione e manca il supporto hardware di IEEE 754. Una quantità enorme di pensiero è stata messa negli standard in virgola mobile, da un pilastro di algebra lineare numerica. Penserei che sappia qual è la "giusta" rappresentazione dei numeri.


4

Come esempio del perché l'aritmetica esatta / a virgola fissa viene usata così raramente, considera questo:

  • Nel metodo degli elementi finiti, come in quasi tutti gli altri metodi in uso nell'informatica scientifica, arriviamo a sistemi lineari o non lineari che sono solo approssimazioni al mondo reale. Ad esempio, nella FEM, il sistema lineare da risolvere è solo un'approssimazione dell'equazione differenziale parziale originale (che può, di per sé, essere solo un'approssimazione del mondo reale). Quindi perché fare uno sforzo enorme per risolvere qualcosa che è solo un'approssimazione?

  • La maggior parte degli algoritmi che usiamo oggi sono di natura iterativa: metodo di Newton, gradienti coniugati, ecc. Terminiamo queste iterazioni ogni volta che siamo certi che l'accuratezza dell'iterativo approssimativo alla soluzione del problema sia sufficiente. In altre parole, terminiamo prima di avere la soluzione esatta. Come prima, perché usare l'aritmetica esatta per uno schema iterativo quando sappiamo che stiamo solo calcolando approssimazioni?


È frustrante ammetterlo, ma sì, la tua risposta in sostanza crocifigge l'uso su larga scala del calcolo esatto. Immagino che presto non vedrò più il retro float.
Milind R

@MilindR: Non sono del tutto sicuro su cosa stai mirando. Sembra che tu abbia un martello e sei frustrato dal fatto che nessuno abbia un chiodo o pensi che un martello sia uno strumento utile. Ma non è perché non ci piaci: abbiamo pensato a questi problemi da molto tempo e abbiamo semplicemente deciso che il cacciavite che abbiamo è lo strumento giusto. Non trovo nulla di frustrante (a meno che tu non abbia un martello) in quanto è solo un approccio pragmatico - perché usare l'aritmetica esatta quando facciamo solo approssimazioni?
Wolfgang Bangerth,

È frustrante perché un problema perfettamente normale potrebbe essere così mal condizionato da essere effettivamente insolubile. Come anche perché l'ideale della precisione arbitraria sembrava così promettente, rispetto alla natura inesatta del virgola mobile, dalla memorizzazione del valore alla sua emissione.
Milind R

Il problema è che gli errori di arrotondamento sono estremamente difficili da analizzare. L'ho capito il giorno in cui ho iniziato a studiare l'analisi numerica e l'algebra lineare numerica. Quindi un sistema che evita completamente il problema, rendendo il condizionamento un problema, dovrebbe prendere d'assalto il mondo, giusto? era il pensiero. Ovviamente capisco i limiti, ma sembravano più come irritanti che come rompitori. Un po 'come la maggiore difficoltà nel ridurre i transistor nei processori. Sì, è difficile da analizzare, ma Intel lo fa ancora.
Milind R

1
Se un problema è così mal condizionato che è difficile da risolvere, la sua soluzione non è stabile alle perturbazioni. Questo è un problema con il problema originale, non con la rappresentazione in virgola mobile. Sì, forse puoi ottenere una soluzione al problema usando la rappresentazione esatta. Ma la soluzione non è stabile e quindi probabilmente non avrà nulla a che fare con ciò che stai davvero cercando. Stai abbaiando sull'albero sbagliato se pensi che la rappresentazione dei numeri sia il problema.
Wolfgang Bangerth,

3

Se guardi questa libreria per l'arrotondamento corretto: CRlibm , vedrai nella documentazione che in generale, gli algoritmi devono essere dimostrati accurati (con prove motivate). Perché? La stabilità e la velocità di convergenza di un risultato di una funzione non ha una risposta "taglia unica". In breve, non c'è "nessun pranzo gratuito": devi lavorare per dimostrare che il tuo ragionamento è corretto. Ciò è dovuto al comportamento delle funzioni da modellare, non all'hardware sottostante (sia che si utilizzino unità intere o in virgola mobile, sebbene sì, entrambi abbiano "gotchas", come overflow / underflow, numeri denormali, ecc.) Anche se il risultato stai cercando convergenze in un numero intero, l'algoritmo utilizzato per trovare il risultato non è necessariamente molto stabile.

Eigen è una libreria C ++ che ha una varietà di algoritmi per risolvere matrici, ognuna con proprietà diverse. Questa pagina contiene una tabella che discute i compromessi tra velocità e precisione per i vari algoritmi utilizzati per risolvere una matrice. Sospetto che la libreria Eigen possa fare quello che vuoi. :-)


Grazie .. Link molto istruttivo e piacevole. Ma l'uso del punto fisso insieme a un'estensione limitata dell'arrotondamento non produce risultati più precisi? Dal momento che la rappresentazione stessa è esatta per cominciare, a differenza del virgola mobile?
Milind R

1
Ti suggerisco di attaccare il tuo problema da un altro punto di vista. Nell'introduzione alla logica, apprendi che ci sono tre parti nella soluzione di un problema: definizioni, ragionamento e conclusione / risultato. Probabilmente sei (come la maggior parte di noi) molto abituato a lavorare principalmente sulla fase di "definizione" del problem solving - di solito puoi "definire" il tuo problema; tuttavia, se ti senti frustrato, a volte hai riscontrato un tipo di problema più difficile che richiede più lavoro nella parte "ragionamento".
mda

Ti capisco solo vagamente ... Non riesco a vedere dove posso "definire" questo problema, il ragionamento è essenziale.
Milind R

Diversi anni dopo, ti capisco davvero :-)
Milind R

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.