Difference between revisions of "Embedded Programming Tips and Tricks"

From EEVblog Electronics Resource Wiki
Jump to: navigation, search
(Fast Division)
(Fast Division)
Line 8: Line 8:
 
   ''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 a limited number of extra divisions.<br>
  
 
For example<br>
 
For example<br>

Revision as of 23:01, 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 a limited number of extra 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.