2009-07-30 9 views
6

Ha arbitrary-precision arithmetic interessato numerical analysis software?Dispone di software di analisi numerica affetta da aritmetica di precisione arbitraria?

Ritengo che la maggior parte del software di analisi numerica continui a utilizzare gli stessi float e double.

Se ho ragione, mi piacerebbe sapere il motivo, perché secondo me ci sono alcuni calcoli che possono beneficiare dell'uso dell'aritmetica di precisione arbitraria, in particolare quando è combinato con l'uso del numero razionale rappresentazione, come è stato fatto su GNU Multi-Precision Library.

Se sbaglio, gli esempi potrebbero essere belli.

+0

Cosa calcoli stai pensando quando si dice che potrebbero beneficiare di aritmetica precisione arbitraria? –

+0

Avevo una funzione statistica iterativa che otteneva risultati molto bizzarri dopo un gran numero di operazioni, il passaggio a una precisione più alta ha solo ritardato il problema. la soluzione era usare aritmetica di precisione arbitraria. –

risposta

7

La precisione arbitraria è lenta. Molto lento. E nel momento in cui usi una funzione che produce un valore irrazionale (come la maggior parte delle funzioni trigonometriche), perdi il tuo vantaggio di precisione arbitrario.

Quindi, se non è necessario o non è possibile utilizzare tale precisione, perché dedicare tutto il tempo della CPU?

+0

Questo è stato anche il mio istinto – Draemon

+3

Yup. Un sacco di analisi numeriche non è tanto di ottenere la risposta come farlo in fretta. È usato su alcuni problemi terribilmente grandi, e il rallentamento di un ordine di grandezza o più non è visto come fattibile. –

+0

Per la tua risposta, presumo che la velocità sia un fattore, ma sospetto che con i computer veloci di oggi e una libreria molto ottimizzata (gmp), non sia molto lento.Credo che su un valore irrazionale non si perda il vantaggio di precisione arbitrario, poiché è possibile archiviarlo nel modo più preciso che si desidera, più preciso che su un arbitrario fisso. Una soluzione ancora più complicata ai numeri irrazionali derivanti da tali funzioni trigonometriche può essere l'uso del calcolo simbolico. –

1

Se si guardano programmi come Mathematica, ho il forte sospetto che scopriresti che non usano i float e i doppi per il loro lavoro. Se guardi alla crittografia, troverai sicuramente che non usano float e double (ma stanno comunque lavorando principalmente con gli interi).

Si tratta fondamentalmente di una sentenza. Le persone che ritengono che il loro prodotto trarrà beneficio da una maggiore accuratezza e precisione utilizzano software aritmetico di precisione estesa o arbitraria. Coloro che non pensano che la precisione sia necessaria non la useranno.

+0

Sì, secondo http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic alcuni software di computer algebra usano aritmetica di precisione arbitraria (almeno in una certa misura) –

1

La precisione arbitraria non funziona bene con i valori irrazionali. Credo che capovolgere il tutto aiuterebbe il software di analisi numerica. Invece di capire come sia necessaria la precisione per il calcolo, dovresti dire al software cosa vuoi che sia la precisione finale e capirà tutto.

In questo modo è possibile utilizzare un tipo di precisione finita abbastanza grande per il calcolo.

+0

Solo per reiterare, il calcolo di precisione arbitrario può essere fatto per algebrico numeri (come sqrt (2)). Il problema arriva quando vogliamo calcolare numeri trascendenti, come sqrt (Pi). – SplittingField

1

È molto raro che tu abbia bisogno di una risposta esatta a un problema numerico: è quasi sempre il caso che tu abbia bisogno del risultato con una certa precisione. È anche il caso che le operazioni siano più efficienti se eseguite da hardware dedicato. Presi insieme significa che c'è una pressione sull'hardware per fornire implementazioni che abbiano una precisione sufficiente per i problemi più comuni.

Quindi la pressione economica ha creato una soluzione efficiente (ad esempio basata su hardware) per i casi comuni.

7

Ha aritmetico arbitrario di precisione software di analisi numerica interessato? Ritengo che la maggior parte del software di analisi numerica continui ad usare lo stesso float e raddoppia.

Ci sono diversi spiacevoli motivi per cui la precisione arbitraria (ap) non viene utilizzata in modo più esteso .

  • Mancanza di supporto per le funzioni importanti: valori mancanti per NaN/Infinities, numeri complessi o funzioni speciali, la mancanza o buggy attuazione di modalità di arrotondamento (semitondo, anche non implementato in GMP), mancanza di gestori per eventi importanti (perdita di cifre significative, overflow, underflow ... ok, questo non è nemmeno implementato nella maggior parte delle librerie standard). Perché è così importante? Perché senza quello devi investire molta energia per formulare il tuo problema con precisione arbitraria (mai scritto una libreria di numeri complessi o funzioni speciali in ap?), Non puoi riprodurre il tuo doppio risultato perché ap manca delle funzionalità che ti servono per tracciare le modifiche .

  • Al 99,9% di tutti i programmatori non interessa affatto il numero. Una delle domande più frequenti è: "Perché 0.1 + 0.1 NON 0.2 ???? HELP !!!" Quindi, perché i programmatori dovrebbero investire tempo per apprendere un'implementazione specifica di ap e formularne il problema? Se i risultati dell'AP divergono dai risultati doppi e non si ha conoscenza dei numeri, come si trova l'errore? La precisione doppia è troppo inesatta? La libreria di ap ha un bug? COSA STA SUCCEDENDO ?! Chi lo sa ...

  • Molti esperti numerici che fanno sanno come calcolare scoraggiare l'uso di ap. Frustati dalle implementazioni hardware di FP, insistono sul fatto che la riproducibilità è comunque "impossibile" da implementare e che i dati di input hanno quasi sempre solo cifre significative. Quindi analizzano principalmente la perdita di precisione e riscrivono le routine critiche per minimizzarlo.

  • Dipendenza dal benchmark. Wow, il mio computer è più veloce di altri. Come gli altri commentatori hanno giustamente osservato, ap è molto più lento dei tipi di dati in virgola mobile supportati dall'hardware perché è necessario programmarlo con i tipi di dati interi per mano. Uno dei pericoli imminenti di questo atteggiamento è che i programmatori, totalmente inconsapevoli dei problemi, scelgono soluzioni che sputano numeri senza senso totalmente impressionanti. Sono molto cauto riguardo a GPGPU. Certo, le schede grafiche sono molto, molto più veloci del processore, ma la ragione è che less precisione e precisione. Se usi float (32 bit) invece di double (64 bit), hai molto meno bit da calcolare e da trasferire. L'occhio umano è molto tollerante ai guasti, quindi non importa se uno o due risultati sono off-limits. Diamine, come costruttore di hardware puoi usare calcoli imprecisi e male arrotondati per accelerare i tuoi calcoli (che è davvero ok per la grafica). Buttare via quelle fastidiose implementazioni subnormali o arrotondamenti. C'è una buona ragione per cui i processori non sono così veloci come le GPU.

posso consigliare William Kahans pagina link text per alcune informazioni sui problemi numerici.

+0

Grazie per la risposta, come si può perdere cifre significative, traboccare, underflow con precisione arbitraria? –

+1

Oh, è facile. Overflow: Immaginate arcotangente (1/x) che è 90 ° o pi/2 per x == 0. il doppio può calcolare che per ritorno infinito positivo che è un argomento valido per arcotangente. Quindi hai bisogno di overflow e infinito in ap per gestire questi casi. La perdita di cifre significative si verifica con espressioni algebriche (sqrt!) E trascendentali: avendo un numero infinito di cifre è necessario arrotondarle. Se si sottraggono numeri che sono molto vicini (ad esempio la differenziazione numerica), la perdita di cifre significative a volte non può essere prevenuta. exp (-x) può facilmente causare underflow anche con ap. –

+0

@Thorsten, grazie per la tua risposta molto informativa. –

2

L'Istituto di ricerca Wolfram ha compiuto un enorme sforzo per ottenere un aritmetico dell'intervallo di precisione arbitraria nel nucleo di Mathematica in modo pragmatico e hanno svolto un lavoro eccellente. Mathematica eseguirà in modo trasparente quasi tutti i calcoli con precisione arbitraria.

1

Questo paper di Dirk Laurie presenta un ammonimento sull'uso della precisione variabile.

+0

Grazie @ J.M. , un documento interessante in effetti. (La giuria ha parlato) –

0

Anche se non direttamente legati alla tua domanda si potrebbe anche voler guardare a questo paper da l Trefethen