Ho appena consegnato questa funzione in un compito. È fatto (quindi nessun tag di compiti a casa). Ma mi piacerebbe vedere come questo può essere migliorato.Contribuire a migliorare una semplice funzione di assemblaggio
In sostanza, la funzione somma i quadrati di tutti i numeri interi compresi tra 1 e il numero dato, utilizzando la seguente formula:
n(n+1)(2n+1)/6
Dove n
è il numero massimo.
La funzione riportata di seguito consente di rilevare eventuali overflow e restituire 0 in caso contrario.
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;
}
Fondamentalmente, voglio sapere cosa posso migliorare lì. Per lo più in termini di best-practice. Una cosa sembra ovvia: un controllo di overflow più intelligente (con un singolo controllo per qualunque input massimo causerebbe un overflow).
CodeReview non è ancora dalla fase beta, ma questo sarebbe un buon candidato una volta che è. –