Binary scaling

This is an old revision of this page, as edited by Vanished user 34958 (talk | contribs) at 06:30, 30 September 2006 (Application of Binary Scaling Techniques). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Binary scaling

Binary scaling is a technique used mainly by embedded C, DSP and assembler programmers to perform a psuedo floating point using integer arithmetic. It is faster than floating point and is more accurate, but care must be taken not allow overflow.

A position for the virtual binary point is taken, and then subsequent arithetic operations determine the resultants binary point.

This obeys the mathematical laws of Exponentiation.

To give an example, a common way to use integer maths to simulate floating point is to multiply the co-effiecents by 65536. This is currently used in the microwindows utility nxcal to linearise the output of touchscreens.

This will place the binary point at B16.

For instance to represent 1.2 and 5.6 floating point real numbers as B16 one multiplies them by 2 ^ 16 giving

78643B16 and 367001B16

Multiplying these together gives

28862059643B32

The result will however be in B32 (according to the rules of exponentiation)

To convert it back to B16 we need to divide it by 2 ^ 16.

This gives 440400B16, which when converted back to a floating point number (by diving again by 2 ^ 16, but holding the result as floating point) gives 6.71999. The correct floating point result is of course 6.72.

Various scalings maybe used. B0 for instance can be used to represent any number between -1 and 0.999999999.

Binary Angles

Binary angles are mapped using B0, with 0 as 0 degrees, 0.5 as 90 (or pi/4), -1.0 or 0.9999999 as 180 (or pi/2) and 270 as -0.5 (or 3.pi/2). When these binary angles are added using normal twos complement mathematics the rotation of the angles is correct, even when crossing the sign boundary (this of course does away with check like ((if >= 360.0) when handling normal degrees).

File:Binary angles.png
Binary Angles Diagram

Application of Binary Scaling Techniques

Binary scaling techniques were used in the 1970's and 80's for real time computing that was mathematically intensive, such as flight simulation. The code was often commented with the binary scalings of the intermediate results of equations.

Binary scalling is still used in many DSP applications and custom made microprocessors are usually based on binary scaling techniques.

Binary scaling is currently used in the linux microwindows release to linearise touchscreens. It is also used in the DCT used to compress JPEG images in utilities such as the gimp.

Although floating point has taken over to a large degree, where speed and extra accuracy are required, binary scaling is faster and more accurate.