No. double_t
è almeno uguale a come doppio; vale a dire, potrebbe essere lo stesso del doppio. Nota 190 nello standard C99 rende chiaro intento:
I tipi float_t e double_t sono destinati ad essere tipi più efficienti del attuazione larghezza almeno pari come float e double, rispettivamente.
Come notato da Michael Burr, non è possibile impostare FLT_EVAL_METHOD
.
Se si desidera il tipo a virgola mobile più ampio su qualsiasi sistema disponibile utilizzando solo C99, utilizzare long double
. Basta essere consapevoli del fatto che su alcune piattaforme sarà lo stesso di double
(e potrebbe anche essere lo stesso di float
).
Inoltre, se si "lavora con metodi numerici", si dovrebbe essere consapevoli che per molti (quasi) metodi numerici, l'errore di approssimazione del metodo è molto più grande dell'errore di arrotondamento di doppia precisione, quindi spesso non c'è beneficio per l'utilizzo di tipi più ampi. Esistono delle eccezioni, ovviamente. Su quale tipo di metodi numerici stai lavorando, in particolare?
Edit: seriamente, sia (a) basta usare long double
e chiamare un giorno o (b) prendere un paio di settimane per capire come floating-point è effettivamente implementata su piattaforme che si sta targeting, e quali sono i requisiti di precisione effettivi per gli algoritmi che stai implementando.
fonte
2010-04-16 18:17:18
Grazie. È lungo il doppio più largo di double_t? Questo mi confonde. – yCalleecharan
@yCalleecharan: su alcune piattaforme, sì, su alcune piattaforme, no. Ad esempio, su OSX/Intel, 'double' e' double_t' sono IEEE-754 double, mentre 'long double' è il x86 double extended type, che ha più precisione. Su una piattaforma in cui l'aritmetica in virgola mobile è codegenata all'unità x87 per impostazione predefinita (Windows, forse?), 'Double_t' potrebbe essere uguale a' long double'. È improbabile che 'double_t' sarà * più largo * di' long double' (anche se non impossibile, IIRC). –
Per quanto riguarda i metodi numerici che sto usando, è solo un semplice metodo del 4 ° ordine di Runge Kutta per l'integrazione di un insieme di ODE. Ho dovuto non dimensionare le mie equazioni per ottenere valori "carini" poiché le equazioni sono non lineari e la non linearità può portare a fenomeni di caos. Sto usando strumenti non lineari come un diagramma di biforcazione e una mappa a poincare. Poiché le soluzioni delle ODE sono sensibili, sto cercando di lavorare con la massima precisione possibile. – yCalleecharan