Precisione in virgola mobile (fp: preciso vs. fp: veloce)


10

In C o C ++, l'opzione del compilatore di precisione in virgola mobile fa davvero la differenza nei giochi del mondo reale (piccoli / indie)?

Dalle mie osservazioni, l'impostazione di fp: fast è molte volte più veloce di fp: precise e da quello che ho capito qui ( /programming/6889522/fpfast-vs-fpprecise-what-kind-of-errors-can -i-incontro ) la differenza di precisione tra le due opzioni del compilatore cambia solo dalla sedicesima cifra di un numero in virgola mobile.

Qualcuno ha riscontrato un esempio quando si utilizza fp: fast è andato terribilmente male per i giochi 2D o 3D?

Modifica: per chiarire, non sto chiedendo la precisione dei valori in virgola mobile stessi (cioè float vs double vs decimal). Solo sulla precisione relativa all'opzione del compilatore.

Risposte:


11

La tua interpretazione di fp: veloce vs fp: suoni precisi sospetti; Sono sicuro che c'è più di un effetto oltre al semplice arrotondamento dopo il 16 ° decimale. Vi rimando all'articolo di Bruce Dawson sulla precisione in virgola mobile per maggiori dettagli.

In generale, l'errore di precisione in virgola mobile è sicuramente un vero problema nello sviluppo del gioco. È particolarmente problematico per i programmatori di fisica e per i giochi con grandi mondi o lunghi tempi di esecuzione (nell'ordine di settimane o mesi, come un MMO). Gli errori di precisione in virgola mobile si manifestano spesso come instabilità della simulazione e movimento nervoso che peggiora gradualmente nel tempo. Se non vedi questi tipi di artefatti nel tuo gioco e l'incremento delle prestazioni è significativo, allora dovresti assolutamente rimanere fedele a fp: fast.


1
-1 La precisione in virgola mobile non è un grosso problema nello sviluppo del gioco. La scelta di tipi di dati errati e la mancanza di conoscenze e algoritmi numerici è la causa di tutti i problemi menzionati in questo post. Tutti i progetti a cui ho partecipato hanno utilizzato fp: fast senza nessuno dei problemi menzionati.
Maik Semder,

Sì, le nostre conclusioni sono le stesse. Il mio punto era che la precisione in virgola mobile può essere un problema in alcune aree dello sviluppo del gioco, ed è per questo che (in quelle aree) hai bisogno della conoscenza numerica e dei tipi di dati appropriati che hai citato.
postgoodism

+1 sia per l'ottimo link, sia per la risposta che hai dato a maik semder. Ho anche visto persone alle prese con questo tipo di errori, semplicemente perché non sanno che tipo di operazioni dovrebbero usare nei loro codici.
Ali1S232,

@postgoodism Grazie per aver risposto. Non ignorare il tuo contributo. Potrei aspettare un altro giorno o due per vedere se ricevo più risposte.
Inisheer,

@MaikSemder Fondamentalmente usa solo fp:fastallora, a meno che tu non voglia davvero fp:precisese noti vari strani problemi (potresti essere notato in calcoli complessi nei giochi, come la fisica come ha detto @postgoodism). Grazie, me lo chiedevo.
Nikos
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.