Básicamente para cosas como esta (no código real):¿Es seguro multiplicar un flotante/doble por 0.5 en lugar de dividir por 2 en C# y C++?
for(int i = 0; i < 1000000000; ++i)
{
Vert v0 = mesh.polygons[i].edges[0].vert0;
Vert v1 = mesh.polygons[i].edges[0].vert1;
Vector3 center = (v0.pos + v1.pos)/2;
}
v0.pos
es de tipo Vector3<float, float, float>
, pero podría ser Vector3<double, double, double>
.
¿Es seguro acaba de hacer ?:
Vector3 center = (v0.pos + v1.pos) * 0.5;
Esto podría parecer como la optimización prematura, pero esto tiene que ser lo más rápido posible que se pidió a los mil millones de puntos (nube de puntos).
¿Qué sucede cuando se mide el rendimiento de ambas opciones? No puede hablar de optimización en este nivel sin * medir * el resultado en su plataforma objetivo. –
Mídalo de cualquier manera. Pero su compilador 'debería' ya revertir a cambio de bit para dividir por 2. – CaffGeek
De acuerdo con Greg. Además, tenga en cuenta que debe centrarse en la corrección antes de la velocidad.La mayoría de las veces, el compilador optimizará gran parte de esto para usted (especialmente cuando usa literales). – TheBuzzSaw