Precisão de ponto flutuante (fp: preciso vs. fp: rápido)


10

Em C ou C ++, a opção do compilador de precisão de ponto flutuante realmente faz diferença nos jogos do mundo real (pequenos / independentes)?

Pelas minhas observações, definir fp: fast é muitas vezes mais rápido que fp: preciso e pelo que entendi aqui ( /programming/6889522/fpfast-vs-fpprecise-what-kind-of-errors-can -i-encontro ) a diferença de precisão entre as duas opções do compilador muda apenas do 16º dígito de um número de ponto flutuante.

Alguém encontrou um exemplo ao usar o fp: fast deu muito errado para jogos em 2D ou 3D?

Edit: Para esclarecer, não estou perguntando sobre a precisão dos valores de ponto flutuante (ex: float vs double vs decimal). Somente sobre precisão relacionada à opção do compilador.

Respostas:


11

Sua interpretação de fp: fast vs fp: sons precisos suspeitos; Tenho certeza de que há mais efeito do que apenas arredondar o erro após a décima sexta casa decimal. Refiro-lhe o artigo de Bruce Dawson sobre precisão de ponto flutuante para obter mais detalhes.

Em geral, o erro de precisão de ponto flutuante é definitivamente um problema real no desenvolvimento de jogos. É especialmente problemático para programadores de física e para jogos com mundos grandes ou com longos períodos de execução (da ordem de semanas ou meses, como um MMO). Os erros de precisão de ponto flutuante costumam se manifestar como instabilidade da simulação e movimento nervoso, que pioram gradualmente com o tempo. Se você não estiver vendo esse tipo de artefato em seu jogo, e o aumento de desempenho for significativo, então definitivamente deve ser seguro ficar com fp: fast.


1
A precisão do ponto flutuante -1 não é um grande problema no desenvolvimento de jogos. A escolha de tipos de dados incorretos e a falta de conhecimento e algoritmos numéricos é a causa de todos os problemas mencionados neste post. Todos os projetos que participei usavam o fp: fast sem nenhum dos problemas mencionados.
Maik Semder

Sim, nossas conclusões são as mesmas. Meu argumento era que a precisão do ponto flutuante pode ser um problema em certas áreas do desenvolvimento de jogos, e é por isso que (nessas áreas) você precisa do conhecimento numérico e dos tipos de dados adequados mencionados.
Postgoodism

+1 nos dois ótimos links e na resposta que você deu a maik semder. Também vi pessoas lutando com esse tipo de erro, simplesmente porque não sabem que tipo de operações devem usar em seus códigos.
Ali1S232

@postgoodism Obrigado por responder. Não ignorando sua entrada. Só posso esperar mais um ou dois dias para ver se recebo mais respostas.
Inisheer

@MaikSemder Basicamente, use apenas fp:fastentão, a menos que você realmente queira, fp:precisese notar vários problemas estranhos (pode ser percebido em cálculos complexos em jogos, como a física, como disse o @postgoodism). Obrigado, estava pensando sobre isso.
Nikos
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.