@souviron34
Avec ton idée, on doit pouvoir utiliser une dichotomie pour optimser les seuils, et utiliser des else, ce qui évite des tests
Je ne pense pas qu'on puisse optimiser les choses au niveau des seuils. On ne peut pas utiliser des else sur ce code.
Si on pose que l'unsigned utilisé a au maximum M chiffres (décimaux), pour un nombre de N chiffres (décimaux), alors, sauf erreur,
1- Pour la méthode avec plein de if, on a M-N tests (il manque un if pour un unsigned de 32 bits) (ou N tests si on codait en ordre et en sens inverse les if).
2- La méthode de Djakisback donne une addition, un test et une division par boucle soit N tests + N additions + N divisions.
3- La méthode tabulée de souviron34 donne un test, 2 additions (et un déréférencement) par boucle soit N tests et 2N additions
4- La méthode "dichotomique" donne un nombre de tests, et d'opérations en log2(M). Le nombre de tests est P+1 si 2^(P-1)< M <= 2^P. Pour passer d'un M de 10 (unsigned de 32 bits)à M de 20 (unsigned de 64 bits), il suffit de rajouter un if(). le nombre d'additions est le nombre de 1 dans la représentation binaire de N-1 et le nombre de divisions est égal au nombre de 1, le lsb exclus, dans la représentation binaire de N-1. Pour un unsigned de 32 bits (M = 10) le pire cas sera pour N = 8 et pour un 64 bits (M=20) pour N = 16.
Si on tabule les pires cas :
unsigned 32 bits unsigned 64 bits
M = 10 M = 20
tests + / tests + /
méthode 1 (if) 9 0 0 19 0 0
méthode 2 (div/10) 10 10 10 20 20 20
méthode 3 (table) 10 20 0 20 40 0
méthode 4 (dicho) 5 3 2 6 4 3
A chacun de choisir en fonction de sa problématique.
Partager