2012-02-09 9 views
6

E 'possibile ottenere più di 16 cifre con double precisione senza usare quadruple? Se è possibile, dipende dal compilatore o da qualcos'altro? Perché so che qualcuno ha detto che stava lavorando con precisione double e aveva una precisione di 22 cifre.estesa doppia precisione

risposta

6

Il tipo di dati double precision deriva da Fortran 77 e l'unico requisito per questo tipo è che ha più precisione di real. Non dovresti usarlo più.

In Fortran 90/95 e oltre, sono supportate almeno due dimensioni di numeri reali. La precisione è determinata dal parametro kind, il cui valore dipende dal compilatore.

real(kind=8) :: a, b 

di avere un modo portatile di definire la precisione, è possibile ottenere un valore kind che consente una certa precisione utilizzando:

integer, parameter :: long_double = SELECTED_REAL_KIND(22) 

quindi è possibile dichiarare le variabili come

real(kind=long_double) :: a, b 

ma non è sicuro che il tuo compilatore supporterà tale precisione, nel qual caso la funzione SELECTED_REAL_KIND restituirà un numero negativo.

vedi anche this post

+0

Ma hai scritto "intero". Potrebbe solo "intero" avere 22 cifre, non "doppio"? – Shibli

+0

'long_double' è un numero intero che viene usato per indicare il' tipo' delle variabili 'reali'' a' e 'b' tali da avere almeno la precisione 22 – steabert

+2

@Shibli Spesso è anche utile per ottenere i tipi di galleggianti di precisione singola e doppia sul tuo sistema in modo portatile. Per questo si può usare 'intero, parametro :: sp = tipo (1.e0)' e 'intero, parametro :: dp = tipo (1.d0)'. Puoi quindi dichiarare un float a doppia precisione come 'real (kind = dp) :: double'. – Chris

5

Come la prima risposta Stati, il modo più portatile è quello di specificare la precisione del numero è quello di utilizzare le funzioni intrinseche. Il concetto di design della lingua è che si capisce quale precisione è richiesta per il calcolo e la si richiede, e il compilatore fornisce quella precisione o meglio. Ad esempio, se calcoli che la tua soluzione di equazioni differenziali è stabile con 11 cifre decimali, allora richiedi questo valore e il compilatore fornisce il suo tipo migliore che soddisfi i tuoi requisiti. Questo è un approccio estraneo alla maggior parte dei programmatori, che sono abituati a pensare a quali sono le poche scelte fornite dall'hardware piuttosto che a ciò di cui hanno bisogno, e forse non è così semplice poiché pochi di noi sono analisti numerici.

Se si desidera utilizzare il SELECTED_REAL_KIND intrinseca e ottimizzare per il vostro particolare compilatore e l'hardware, si potrebbe desiderare di sperimentare. Alcune combinazioni forniscono una precisione quadrupolare nel software, che sarà lenta. Un compilatore con precisione doppia e precisione estesa a 10 byte fornirà quel tipo più lungo tramite selected_real_kind (17). Un compilatore che ha una precisione doppia e quadrupla ma non una precisione estesa di 10 byte fornirà precisione quadrupolare tramite selected_real_kind (17) o selected_real_kind (32). (Non sono a conoscenza di alcun compilatore che supporti sia l'estensione a 10 byte sia il quadrupolo). Il compilatore che non ha precisione quadrupolare restituirà -1 per selected_real_kind (32).

Problemi correlati