PIPS
|
Go to the source code of this file.
Macros | |
#define | DIVIDE_MAX_A 7 |
#define | DIVIDE_MAX_B 8 |
Functions | |
Value | divide_fast (Value a, Value b) |
package arithmetique More... | |
Value | divide_slow (Value a, Value b) |
#define DIVIDE_MAX_A 7 |
#define DIVIDE_MAX_B 8 |
package arithmetique
INTLIBRARY int divide(int a, int b): calcul du divide de a par b; le reste (qui n'est pas retourne) est toujours positif; il est fourni par la fonction modulo()
Il y a quatre configuration de signe a traiter:
definition d'une look-up table pour les valeurs de a appartenant a [-DIVIDE_MAX_A..DIVIDE_MAX_A] et pour les valeurs de b appartenant a 1..DIVIDE_MAX_B
Serait-il utile d'ajouter une test b==1 pour supprimer une colonne?
Serait-il utile de tester b > a pour renvoyer 0 ou -1 tout de suite?
b == 1 2 3 4 5 6 7 8
a == - 7
a == - 6
a == - 5
a == - 4
a == - 3
a == - 2
a == - 1
a == 0
a == 1
a == 2
a == 3
a == 4
a == 5
a == 6
a == 7
translation de a pour acces a la look-up table par indice positif: la == a + DIVIDE_MAX_A >= 0
valeur du quotient C
serait-il utile d'optimiser la division de a=0 par b? Ou bien cette routine n'est-elle jamais appelee avec a=0 par le package vecteur?
direct table look up
shift a for the table
this is just divide_slow
Definition at line 51 of file divide.c.
References assert, DIVIDE_MAX_A, DIVIDE_MAX_B, int_to_value, value_ge, value_le, value_notzero_p, value_pdiv, VALUE_TO_INT, and value_uminus.
Definition at line 114 of file divide.c.
References value_pdiv.