Domanda

l'aritmetica di precisione arbitraria ha interessato software di analisi numerica ?

Sento che la maggior parte dei software di analisi numerica continua a usare gli stessi float e doppi.

Se ho ragione, mi piacerebbe conoscerne il motivo, poiché secondo me ci sono alcuni calcoli che possono trarre vantaggio dall'uso dell'aritmetica di precisione arbitraria, in particolare se combinata con l'uso della rappresentazione razionale dei numeri , come fatto nella GNU Multi-Precision Library .

Se sbaglio, gli esempi sarebbero belli.

È stato utile?

Soluzione

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 di trigger), perdi il tuo vantaggio di precisione arbitraria.

Quindi se non hai bisogno o non puoi usare quella precisione, perché dedicare tutto quel tempo della CPU su di esso?

Altri suggerimenti

  

Ha un'aritmetica di precisione arbitraria   software di analisi numerica interessato?   Sento quell'analisi numerica   il software continua a utilizzare lo stesso   galleggia e raddoppia.

Esistono diverse sfortunate ragioni per cui la precisione arbitraria (ap) non viene utilizzata più ampiamente.

  • Mancanza di supporto per funzionalità importanti: valori mancanti per NaN / Infinity, nessun numero complesso o funzioni speciali, mancanza o implementazione errata delle modalità di arrotondamento (metà arrotondata non implementata in GMP), mancanza di gestori per importanti eventi (perdita di cifre significative, overflow, underflow ... ok, questo non è nemmeno implementato nella maggior parte delle librerie standard). Perché questo è importante ? Perché senza di ciò devi investire molta energia per formulare il tuo problema con precisione arbitraria (hai mai scritto una libreria numerica complessa o funzioni speciali in ap?), Non puoi riprodurre il tuo doppio risultato perché in ap mancano le funzionalità di cui hai bisogno per tenere traccia delle modifiche.

  • Il 99,9% di tutti i programmatori non è affatto interessato ai numeri. Una delle domande più frequenti qui è: " Why is 0.1 + 0.1 NOT 0.2 ???? AIUTO !!! " Allora perché i programmatori dovrebbero investire tempo di imparare una specifica implementazione di ap e formulare il loro problema in essa? Se i risultati della tua app divergono dai doppi risultati e non hai conoscenza dei numeri, come trovi il bug? La doppia precisione è troppo inesatta? La libreria ap ha un bug? COSA STA SUCCEDENDO ?! Chissà ....

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

  • Dipendenza da benchmark. Wow, il mio computer è più veloce di altri. Come hanno giustamente osservato gli altri commentatori, ap è molto più lento dei tipi di dati a virgola mobile supportati dall'hardware perché è necessario programmarlo con i tipi di dati interi per mano. Uno dei imminenti il pericolo di questo atteggiamento è che i programmatori, totalmente inconsapevoli dei problemi, scelgono soluzioni che emettono numeri senza senso totalmente impressionanti. Sono molto cauto riguardo alla GPGPU. Certo, le schede grafiche sono molto, molto più veloci del processore, ma la ragione è la precisione e l'accuratezza meno . Se si utilizzano float (32 bit) anziché doppi (64 bit), si hanno molti meno bit da calcolare e 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 mal arrotondati per accelerare i tuoi calcoli (il che è davvero ok per la grafica). Elimina quelle fastidiose modalità di implementazione o arrotondamento subnormali. C'è un'ottima ragione per cui i processori non sono così veloci come le GPU.

Posso consigliare la pagina di William Kahans testo del link per alcune informazioni sui problemi in numerici.

Il Wolfram Research Institute ha fatto un enorme sforzo per ottenere l'aritmetica degli intervalli di precisione arbitraria nel nucleo di Mathematica in modo pragmatico e hanno fatto un lavoro eccellente. Mathematica eseguirà in modo trasparente quasi tutti i calcoli con precisione arbitraria.

Se guardi programmi come Mathematica, sospetto fortemente che scoprirai che non usano float e doppi per il loro lavoro. Se guardi la crittografia, scoprirai sicuramente che non usano float e double (ma funzionano principalmente con numeri interi).

È fondamentalmente una sentenza. Le persone che ritengono che i loro prodotti trarranno vantaggio da una maggiore accuratezza e precisione utilizzano software aritmetico di precisione estesa o di precisione arbitraria. Chi non pensa che sia necessaria la precisione non la utilizzerà.

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

In questo modo può usare un tipo di precisione finita appena abbastanza grande per il calcolo.

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

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

Questo articolo di Dirk Laurie presenta un racconto cautelativo sull'uso della precisione variabile.

Sebbene non sia direttamente correlato alla tua domanda, potresti anche voler esaminare questo

scroll top