7

Ottimizzando un gioco che stiamo sviluppando, stiamo entrando nella fase in cui ogni ciclo CPU ha vinto. Utilizziamo i radianti per il calcolo della posizione di oggetti che circondano altri oggetti e voglio tagliare l'inutile accuratezza nelle mie tabelle di ricerca. Per questo, facciamo un uso pesante di un Pi predefinito. Quanto dovrebbe essere accurato questo Pi?Come determinare la precisione di Pi (π)

Quindi, la mia domanda è:

  • Quanto è accurato sufficientemente accurata?
  • O meglio ancora, come determinare la precisione necessaria?
+12

non capisco come la precisione del PI influenzerà i cicli di calcolo, qualsiasi operazione con un doppio valore avrà la stessa durata di tempo, a prescindere di quanto sia preciso o io sn't. Cosa mi manca? Grazie. –

+1

Penso che forse l'intervistatore non l'ha capito e ha pensato che un valore veramente accurato richiedesse più tempo per moltiplicarsi o qualcosa. – mquander

+2

@ mquander - Hai ragione. Non avevo idea che funzionasse in quel modo. – Kriem

risposta

18

Si potrebbe anche solo rendere accurato quanto qualsiasi rappresentazione in virgola mobile è possibile memorizzare. Non ci vorrà più tempo per eseguire calcoli usando un numero in virgola mobile più preciso dello stesso tipo.

La precisione è generalmente misurata come numero di cifre significative; dovrai decidere tu stesso quante cifre di precisione ti interessano. Se utilizzi un valore meno preciso per pi, l'inaccuratezza di quel valore si propagherà agli altri calcoli in cui si trova.

+3

+1 per usare semplicemente l'intera rappresentazione in virgola mobile. Qualcosa in più sarà troncato, niente di meno è sciocco - perché introdurre un errore intenzionale senza alcun beneficio? – Eclipse

+0

Cosa succede se la decisione da prendere è tra virgola mobile e doppia? –

+1

Quindi quasi sicuramente scegli il float, perché float è abbastanza preciso, ma dovrai analizzare lo scenario di utilizzo particolare (come hai dimostrato nella tua risposta) per determinare se effettivamente hai bisogno della precisione del doppio. – mquander

0

Non è chiaro cosa stai facendo. Stai cercando le coordinate in base ad un angolo? In questo caso l'accuratezza di Pi non ha alcuna importanza. Importante è la dimensione della tabella di ricerca e naturalmente la precalcoli con la massima accuratezza possibile. Un'ulteriore accuratezza non costa un tempo di esecuzione aggiuntivo, ma stai pensando di cambiare il tipo di dati da singolo a doppio.

+0

Questo è esattamente quello che sto facendo.In che modo l'accuratezza di Pi non ha importanza? – Kriem

1

Se si sta eseguendo il calcolo preliminare e lo si memorizza, è sufficiente utilizzare la libreria matematica sul sistema per calcolarlo una volta nel modo più preciso possibile. Una buona opzione è:

double PI = (16.0 * atan(1/5)) - (4.0 * atan(1/239)); 

che vi darà un valore abbastanza precisa per il PI, che è possibile calcolare in fase di avvio e il riutilizzo, se necessario. È difficile ottenere una versione più accurata di quella che è facilmente riutilizzabile.

+4

Perché non basta un hardcode come costante? – mquander

+0

@mquander Nel caso in cui cambi = D – DevinB

+3

Oh, nessun problema: basta caricare la costante da un file di configurazione XML! – mquander

0

Se si calcola il valore per renderlo il più accurato possibile per la memorizzazione, ma per ottenere la sensazione reale di quale precisione sia effettivamente necessaria, è necessario esaminare le formule e l'accuratezza degli altri componenti e assicurarsi che la la precisione che hai per i match pi che per gli altri componenti. L'analisi numerica ti darà molti indizi.

6

A titolo di confronto: penso che la NASA usi la precisione pi di 7 decimali per poterla inserire nello spazio.

Prima di tutto è necessario determinare quanto devono essere accurati i calcoli della posizione, ossia quanto accurate devono essere le formule nel programma che dipende da Pi. Abbiamo bisogno di iniziare lì per sapere quanto è più accurato il tuo obiettivo.

Una volta determinato, è possibile utilizzare probabilmente analisi numeriche più o meno semplici per determinare la precisione di cui si ha bisogno per il valore pi. Posso aiutarti, ma ho bisogno delle formule di posizione per farlo :)

Modifica: ho il sospetto che le tue formule dipendono linearmente da pi, cioè che non stai usando qualche funzione oscura f (x, y, z, pi) dove pi è quadrato o simile. In tal caso, l'accuratezza della formula è un fattore moltiplicato per la precisione pi, ad es. k * eps (PI). Altrimenti è fondamentalmente un fattore moltiplicato per la derivata di f rispetto al pi greco. Senza contare la precisione di tutti gli altri parametri f dipende da!

Cheers!

3

Dipende da quanti significant digits si hanno nel calcolo. Data la formula

C = pi * d

se volete sapere quanti pollici nella circonferenza di un cerchio uno miglia di diametro, avresti bisogno di sei cifre di pi per mantenere la l'accuratezza che si desidera, dal momento che ci sono 63.360 pollici in un miglio, e ci sarebbe 199,051 pollici nella circonferenza. Poiché nella risposta ci sono sei cifre significative, ho bisogno di sei cifre di pi per calcolarla con la precisione necessaria.

3,14 * 63.360 = 198950,4

3,142 * 63.360 = 199077,12

3,1416 * 63.360 = 199051,776

3,14159 * 63.360 = 199051,1424

Come potete vedere, ho avuto la risposta giusta in questo caso con solo 5 cifre di pi, ma non sarà sempre così. Hai bisogno di almeno un numero di cifre pari a p che hai cifre significative per assicurati di avere una precisione sufficiente per.

+0

Sembra ragionevole. Penso che prima devi vedere il numero più grande che appare nei tuoi calcoli e quindi controllare le cifre significative. – xxxxxxx

-1

La Bibbia dice che il valore di Pi è 3 (link). Così, naturalmente, si deve solo usare quella :)

+0

Hai letto il link? Evidenzia chiaramente la tua affermazione. – Kevin

+0

scusate eccone un altro: http://gospelofreason.wordpress.com/2007/06/13/god-said-pi-3-stand-by-your-beliefs-dammit/ – Yogi

+0

BTW spero che tu mi renda conto sto solo scherzando. – Yogi

-1

nuova formula per il pi

Pi=2.m.sin(90/m) 

Pi=3.m.sin(60/m) 

Pi=4.m.sin(45/m) 

Pi=5.m.sin(36/m) 

Per milioni in tutto il valore della PI libera calcolatrice XP, XM, ... .. raccomandare m = 1.0E + 10 milioni di il successo della calcolatrice è necessario installare netframework2.0

http://harry-j-smith-memorial.com/index.html