Convertisseur de base mathématique
Ce circuit permet de convertir un nombre à 4 digits d'une base n vers une base m avec n et m ∈ [2;16].
- Etre en 1.7.2.
- Avoir la distance de rendu à 16 chunks.
- Pour sélectionner la base 16, il faut que le digit affiche 0.
- Le système ne peut pas faire la conversion de 0 d'une base quelconque vers une autre même si cela vaut toujours 0.
- Si vous voulez vérifier le résultat de la conversion, vous pouvez le faire sur cette page:
http://www.dcode.fr/conversion-base-n
- Sélectionner la valeur des digits à rentrer à l'aide des leviers.
- Sélectionner la base d'entrée.
- Sélectionner la base de sortie.
- Lancer le calcul.
- Attendre que la conversion se finisse (extinction de la lampe "processing").
- Avoir la distance de rendu à 16 chunks.
- Pour sélectionner la base 16, il faut que le digit affiche 0.
- Le système ne peut pas faire la conversion de 0 d'une base quelconque vers une autre même si cela vaut toujours 0.
- Si vous voulez vérifier le résultat de la conversion, vous pouvez le faire sur cette page:
http://www.dcode.fr/conversion-base-n
- Sélectionner la valeur des digits à rentrer à l'aide des leviers.
- Sélectionner la base d'entrée.
- Sélectionner la base de sortie.
- Lancer le calcul.
- Attendre que la conversion se finisse (extinction de la lampe "processing").
r=0;
q=0;
for(i=0;i<4;i++){
r=a(i)*n^(i)+r;
}
for(i=0;i<16;i++){
q=q<<4; //4 décalages à gauche car un digit prend 4 bits.
q=quotient(r/m^(15-i))|q;
r=reste(r/m^(15-i));
}
q=0;
for(i=0;i<4;i++){
r=a(i)*n^(i)+r;
}
for(i=0;i<16;i++){
q=q<<4; //4 décalages à gauche car un digit prend 4 bits.
q=quotient(r/m^(15-i))|q;
r=reste(r/m^(15-i));
}
La première optimisation est que le nombre de multiplication dépend de la taille de la valeur à convertir (détecter le rang du dernier digit différent de 0) et de la base entrante.
Pour les bases 2,4,8 et 16 en entrée, il n'y a aucune multiplication soit un saut à l'étape de la division.
La deuxième optimisation est que le nombre de division dépend de la taille de la valeur à convertir (détecter le rang du dernier digit différent de 0) et de la base sortante.
Pour les bases 2,4,8 et 16 en sortie, il n'y a aucune division soit un saut à l'étape de l'affichage du résultat.
Seulement 4 modules par multiplication et par division car un digit à une taille de 4 bits et un module traite un bits.
Toutes ces optimisations permettent de passer d'un temps de calcul toujours égale à 4min25 à un temps de calcul compris entre 0min13s et 3min20s.
Pour les bases 2,4,8 et 16 en entrée, il n'y a aucune multiplication soit un saut à l'étape de la division.
La deuxième optimisation est que le nombre de division dépend de la taille de la valeur à convertir (détecter le rang du dernier digit différent de 0) et de la base sortante.
Pour les bases 2,4,8 et 16 en sortie, il n'y a aucune division soit un saut à l'étape de l'affichage du résultat.
Seulement 4 modules par multiplication et par division car un digit à une taille de 4 bits et un module traite un bits.
Toutes ces optimisations permettent de passer d'un temps de calcul toujours égale à 4min25 à un temps de calcul compris entre 0min13s et 3min20s.
t_max : 3min20s [eeee(15)->2120102222(3)]
t_min : 0min13s [0001(2)->0001(2)]
t_min : 0min13s [0001(2)->0001(2)]
- 107236 blocs
- 92494 poudres
- 8617 torches
- 7008 repeaters
- 92494 poudres
- 8617 torches
- 7008 repeaters
Lien de DL: https://drive.google.com/open?id=0B4Rrn2owLmJ8UTY2ZDRWSi1lNk0
PS : Tout les composants et les programmes ont été fait maison.
Dernière édition: