sacar resueltos raiz paso facilmente ejercicios decimales cuadrada con como c optimization

resueltos - ¿Optimización rápida de la raíz cuadrada?



raiz cuadrada ejercicios (1)

Podría ser que las matemáticas de punto flotante heredadas, que usaban registros de 80 bits, fueran más precisas cuando los multiplicadores se vinculaban en la última línea como resultados intermedios cuando se mantenían en registros de 80 bits.

La primera multiplicación en la implementación superior tiene lugar en paralelo a la matemática de enteros que sigue, utilizan diferentes recursos de ejecución. La segunda función, por otro lado, parece más rápida, pero es difícil saber si realmente se debe a lo anterior. Además, el const float xux = x * ux; La declaración reduce el resultado de nuevo a flotación de 32 bits, lo que puede reducir la precisión general.

Puede probar estas funciones de forma directa y compararlas con la función sqrt en math.h (use double no float). De esta manera podrás ver cuál es más rápido y cuál es más preciso.

Si revisas esta muy buena página:

http://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi

Verás este programa:

#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 }

Mi pregunta es: ¿hay alguna razón en particular por la que esto no se implementa como:

#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 }

Como, desde el desmontaje, veo un MUL menos. ¿Hay algún propósito para que aparezca xhalf ?