Difference between revisions of "Embedded Programming Tips and Tricks"
(→Fast Division) |
(→Fast Division) |
||
Line 4: | Line 4: | ||
For example<br> | For example<br> | ||
− | Y = Y >> 1 Will result in a divide by 2<br> | + | ''Y = Y >> 1 Will result in a divide by 2<br>'' |
or<br> | or<br> | ||
− | X = X >> 4 Will result in a divide by 16<br> | + | ''X = X >> 4 Will result in a divide by 16<br>'' |
By adding a multiplication you can achieve other, more complex, divisions.<br> | By adding a multiplication you can achieve other, more complex, divisions.<br> | ||
For example<br> | For example<br> | ||
− | Z = Z * 3;<br> | + | ''Z = Z * 3;<br>'' |
− | Z = Z >> 4; (div 16)<br> | + | ''Z = Z >> 4; (div 16)<br>'' |
Will result in a division of 5.33 (16/3 = 5.33)<br> | Will result in a division of 5.33 (16/3 = 5.33)<br> |
Revision as of 22:36, 12 November 2011
Fast Division
On microcontrollers without a divide instruction very fast division can be done by bit shifting a variable right.
Each shift does a divide by two.
For example
Y = Y >> 1 Will result in a divide by 2
or
X = X >> 4 Will result in a divide by 16
By adding a multiplication you can achieve other, more complex, divisions.
For example
Z = Z * 3;
Z = Z >> 4; (div 16)
Will result in a division of 5.33 (16/3 = 5.33)
Be sure to do the multiply first, otherwise bits will be lost.
Also be sure the variable size is large enough to store the multiplied value.