40 lines
634 B
C
40 lines
634 B
C
#include <module.h>
|
|
#include <types.h>
|
|
#include <algo/math/math.h>
|
|
|
|
MODULE(Math);
|
|
|
|
/* denominateur < 2^63 */
|
|
Div64 div64 (uint64 numerateur, uint64 denominateur) {
|
|
uint64 reste = 0;
|
|
uint64 quotient = 0;
|
|
Div64 resultat;
|
|
|
|
int i;
|
|
for (i = 0; i < 64; i++) {
|
|
quotient <<= 1;
|
|
reste <<= 1;
|
|
reste |= (numerateur & 0x8000000000000000L) ? 1 : 0;
|
|
numerateur <<= 1;
|
|
if (reste >= denominateur) {
|
|
quotient |= 1;
|
|
reste -= denominateur;
|
|
}
|
|
}
|
|
|
|
resultat.quotient = quotient;
|
|
resultat.reste = reste;
|
|
|
|
return resultat;
|
|
}
|
|
|
|
|
|
|
|
void initMath (void** etat) {
|
|
*etat = etatMath;
|
|
}
|
|
|
|
void deinitMath (void** etat) {
|
|
*etat = NULL;
|
|
}
|