Difference between revisions of "Embedded Programming Tips and Tricks"
(Created page with "===Fast Division=== 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 X = X...") |
(→Fast Division) |
||
Line 1: | Line 1: | ||
===Fast Division=== | ===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. | Each shift does a divide by two. | ||
+ | |||
For example | For example | ||
− | |||
Y = Y >> 1 Will result in a divide by 2 | Y = Y >> 1 Will result in a divide by 2 | ||
− | + | or | |
X = X >> 4 Will result in a divide by 16 | X = X >> 4 Will result in a divide by 16 | ||
− | |||
By adding a multiplication you can achieve other, more complex, divisions. | By adding a multiplication you can achieve other, more complex, divisions. | ||
For example | For example | ||
− | |||
Z = Z * 3; | Z = Z * 3; | ||
Z = Z >> 4; (div 16) | Z = Z >> 4; (div 16) | ||
− | |||
Will result in a division of 5.33 (16/3 = 5.33) | Will result in a division of 5.33 (16/3 = 5.33) |
Revision as of 22:35, 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.