Acabo de entregar esta función en una tarea. Está hecho (por lo tanto, no hay etiqueta de tarea). Pero me gustaría ver cómo se puede mejorar esto.Ayuda para mejorar una función de ensamblaje simple
Esencialmente, la función suma los cuadrados de todos los números enteros entre 1 y el número dado, utilizando la siguiente fórmula:
n(n+1)(2n+1)/6
Dónde n
es el número máximo.
La función siguiente se realiza para detectar cualquier desbordamiento y devolver 0 en caso de que se produzca.
UInt32 sumSquares(const UInt32 number)
{
int result = 0;
__asm
{
mov eax, number //move number in eax
mov edx, 2 //move 2 in edx
mul edx //multiply (2n)
jo end //jump to end if overflow
add eax, 1 //addition (2n+1)
jo end //jump to end if overflow
mov ecx, eax //move (2n+1) in ecx
mov ebx, number //move number in ebx
add ebx, 1 //addition (n+1)
jo end //jump to end if overflow
mov eax, number //move number in eax for multiplication
mul ebx //multiply n(n+1)
jo end //jump to end if overflow
mul ecx //multiply n(n+1)(2n+1)
jo end //jump to end if overflow
mov ebx, 6 //move 6 in ebx
div ebx //divide by 6, the result will be in eax
mov result, eax //move eax in result
end:
}
return result;
}
Básicamente, quiero saber qué puedo mejorar allí. En términos de mejores prácticas principalmente. Una cosa parece obvia: verificación de desbordamiento más inteligente (con una sola comprobación para cualquier entrada máxima que provoque un desbordamiento).
CodeReview no es todavía fuera de beta, pero esto sería un buen candidato, una vez que es. –