Domanda

Da quando avevo bisogno di lavorare con PI (3,1415 ...) in C # ho usato Math.PI per ottenere il valore. Di solito mi basta usare valori come Math.PI/2.0 o 2.0*Math.PI, ma ora ho appena notato che XNA fornisce una classe MathHelper. La cosa bella di questo è che posso chiamare MathHelper.PiOver2 e MathHelper.TwoPi, rendendo così un passo estremamente banale ancora più banale. ; -)

ho assunto queste due classi erano intercambiabili, ma ho notato che Math.PI/2.0 != MathHelper.PiOver2. Ho cercato di ricerca perché questo sarebbe, ma non ho trovato nulla. Così, ho pensato di provare la mia fortuna qui. Per quanto riguarda usando PI, ci sono differenze tra la classe Math e la classe MathHelper? È uno preferito sopra l'altro? O devo solo lasciare abbastanza bene da solo e solo assicurarsi usare costantemente uno o l'altro per tutto il mio programma?

È stato utile?

Soluzione

Come non uguali sono? Se sono sufficientemente vicini, questo potrebbe essere il problema tradizionale test uguaglianza con punti flottante è quasi impossibile.

Inoltre, essi sono dello stesso tipo? Il mio parere è stata la maggior parte dei calcoli di gioco sono stati fatti con i galleggianti, dove, come Math.PI sarebbe un doppio.

EDIT: MathHelper non effettivamente utilizzare carri

Altri suggerimenti

Guardate di cifre:

3,1415926535897900000000000000000 // Math.PI

3,1415930000000000000000000000000 // MathHelper.PI

3,1415926535897932384626433832795 // PI da Windows Calc


1,5707963267949000000000000000000 // Math.PI / 2

1,5707963705062900000000000000000 // MathHelper.PiOver2

1,5707960000000000000000000000000 // MathHelper.Pi / 2

1,5707963267948966192313216916398 // PI / 2 da Windows Calc


Spiegazione del problema: La perdita di precisione

Best PI / 2 = Math.PI / 2

Best PI / 2 non è Math.PI / 2!

In sviluppo del gioco non utilizzare la costante Math.PI, la perdita di precisione è trascurabile, non sarà possibile vedere la differenza nel movimento degli oggetti di gioco ... La prestazione è più importante. Utilizzando il MathHelper.PiOver2 vi farà risparmiare una doppia divisione e una doppia a galleggiare conversione. Questo potrebbe sembra essere molto piccolo aiuto, ma ci sono problemi di calcolo intensive (sistemi di particelle) in cui la differenza è significativa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top