Fixes for potential overflows in fast division operations

This commit is contained in:
Josh Stewart 2015-12-13 09:17:55 +11:00
parent 5d59af7e61
commit cb7c4cba33
1 changed files with 5 additions and 5 deletions

10
math.h
View File

@ -22,7 +22,7 @@ Ref: http://www.hackersdelight.org/divcMore.pdf
//Unsigned divide by 10
unsigned int divu10(unsigned int n) {
unsigned int q, r;
unsigned long q, r;
q = (n >> 1) + (n >> 2);
q = q + (q >> 4);
q = q + (q >> 8);
@ -34,8 +34,8 @@ unsigned int divu10(unsigned int n) {
}
//Signed divide by 10
int divs10(int n) {
int q, r;
int divs10(long n) {
long q, r;
n = n + (n>>31 & 9);
q = (n >> 1) + (n >> 2);
q = q + (q >> 4);
@ -48,8 +48,8 @@ int divs10(int n) {
}
//Signed divide by 100
int divs100(int n) {
int q, r;
int divs100(long n) {
long q, r;
n = n + (n>>31 & 99);
q = (n >> 1) + (n >> 3) + (n >> 6) - (n >> 10) +
(n >> 12) + (n >> 13) - (n >> 16);