Sto scrivendo del codice per un sistema molto limitato in cui l'operatore mod è molto lento. Nel mio codice deve essere usato un modulo circa 180 volte al secondo e ho pensato che rimuoverlo il più possibile avrebbe aumentato significativamente la velocità del mio codice, dal momento che un ciclo del mio mainloop non viene eseguito in 1/60 di un secondo come dovrebbe Mi chiedevo se fosse possibile ri-implementare il modulo usando solo i bit shift come è possibile con la moltiplicazione e la divisione. Quindi qui è il mio codice finora in C++ (se posso eseguire un modulo utilizzando assembly sarebbe ancora meglio). Come posso rimuovere il modulo senza utilizzare la divisione o la moltiplicazione?re implementare modulo usando i bit shift?
while(input > 0)
{
out = (out << 3) + (out << 1);
out += input % 10;
input = (input >> 8) + (input >> 1);
}
EDIT: In realtà mi sono reso conto che ho bisogno di farlo molto più di 180 volte al secondo. Visto che il valore di input può essere un numero molto grande fino a 40 cifre.
180 volte/secondo ... su quale hardware? Non è niente su un moderno processore non incorporato. – Mysticial
Su un processore a 16 bit. So che non è nulla, ma c'è un sacco di altro codice la necessità di finire in 1/60 di secondo e il modulo deve accadere tre volte per ogni ciclo del mainloop. Voglio spremere più velocità possibile. – PgrAm
Il modulo soddisfa qualsiasi tipo di proprietà? Stai usando lo stesso modulo molte volte. Se nessuno dei due è il caso, dubito che tu possa fare qualcosa di meglio delle istruzioni della divisione hardware. – Mysticial