Se si seleziona questa molto bella pagina:ottimizzazione rapida della radice quadrata?
http://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi
Vedrai questo programma:
#define SQRT_MAGIC_F 0x5f3759df
float sqrt2(const float x)
{
const float xhalf = 0.5f*x;
union // get bits for floating value
{
float x;
int i;
} u;
u.x = x;
u.i = SQRT_MAGIC_F - (u.i >> 1); // gives initial guess y0
return x*u.x*(1.5f - xhalf*u.x*u.x);// Newton step, repeating increases accuracy
}
La mia domanda è: C'è un motivo particolare per cui questo non è implementato come:
#define SQRT_MAGIC_F 0x5f3759df
float sqrt2(const float x)
{
union // get bits for floating value
{
float x;
int i;
} u;
u.x = x;
u.i = SQRT_MAGIC_F - (u.i >> 1); // gives initial guess y0
const float xux = x*u.x;
return xux*(1.5f - .5f*xux*u.x);// Newton step, repeating increases accuracy
}
quanto, da smontaggio, vedo uno MUL
meno. C'è qualche motivo per avere lo xhalf
visualizzato?
Se il compilatore genera un multiplo in meno nel secondo caso, sospetto che o (a) non abbiate abilitato le ottimizzazioni o (b) il compilatore faccia schifo. ;-) –
Forse l'autore non è al suo meglio, esegui una panchina, se l'unica differenza è un 'MUL' il tempo dovrebbe essere un po 'meno alto con il tuo codice che con il suo. –
@PaulR Perché 'xhalf' a tutti? Appare solo una volta, perché dovrebbe importare 'xhalf'? – user1095108