mirror of https://github.com/rusefi/speeduino.git
Fixes for potential overflows in fast division operations
This commit is contained in:
parent
5d59af7e61
commit
cb7c4cba33
10
math.h
10
math.h
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue