← Back to Technotes

#79: Integer Math Data Types

Author: Dan Strnad (rev. Jim Luther)
Year: 1990

... describes the format of Fixed and Frac data types and operations performed on numerical data types in the Integer Math Toolset.

View raw text file

Apple II
Technical Notes
_____________________________________________________________________________
                                                  Developer Technical Support

Apple IIGS
#79:    Integer Math Data Types

Revised by:    Jim Luther                                            May 1990
Written by:    Dan Strnad                                          March 1990

This Technical Note describes the format of Fixed and Frac data types used by 
the Integer Math tool set and operations performed on the Integer Math 
numerical data types.
Revised since March 1990:  Fixed original date, bit numbering of diagrams, and 
a multiplication sign in the equation.
_____________________________________________________________________________

As stated in Volume 1 of the Apple IIgs Technical Reference, the Integer Math 
tool set provides the following numerical data types:

    Integers
    Longints
    Fixed
    Frac
    Extended

The precise format of the Fixed and Frac data types is not provided in the 
reference manual, so this Note details these formats.

The format for the Fixed data type is stated in the manual as being a 32-bit 
signed value with 16 bits of fraction.  This means that the low-order 16 bits 
of the Fixed format data value are considered as a fraction of 2^16, which is 
the binary number represented by a one followed by 16 zeroes ($10000).  In 
other words, a Fixed value is the same as a long integer value whose binary 
point has been moved to the left 16 places.  In this representation, if the 
low-order part of the Fixed format data value were $8000, the fractional value 
would be equal to 1/2.  A low-order part of $C000 would represent a fractional 
part equal to 3/4.  Therefore the highest value that a Fixed can contain is 
32,767 and 65,535/65,536; the least value is equal to -32768.

     31         30         29                     18         17         16
 __________ __________ __________ ___________ __________ __________ __________
|          |          |          |           |          |          |          |
|  -32768  |  16384   |   8192   |    ...    |    4     |    2     |    1     |
|          |          |          |           |          |          |          |
|__________|__________|__________|___________|__________|__________|__________|
                                high-order word

     15         14         13                     2          1          0
 __________ __________ __________ ___________ __________ __________ __________
|    1     |    1     |    1     |           |    1     |    1     |    1     |
|    -     |    -     |    -     |    ...    |  -----   |  -----   |  -----   |
|    2     |    4     |    8     |           |  16384   |  32786   |  65536   |
|__________|__________|__________|___________|__________|__________|__________|
                                low-order word

                           Figure 1-Fixed Data Type

The format for the Frac data type is stated in the manual as being a 32-bit 
signed value with 30 bits of fraction.  This means that the low-order 30 bits 
of the Frac format data value are considered as a fraction of 2^30, which is 
the binary number represented by a one followed by 30 zeroes ($40000000).  In 
other words, a Frac value is the same as a long integer value whose binary 
point has been moved to the left 30 places.  The high-order 2 bits of the Frac 
format data value are treated as follows.  The high bit has a value of -2 and 
the low bit has a value of 1.  Therefore the highest value that a Frac can 
contain  is 1 and ((2^30)-1)/2^30; the least value is equal to -2. 

     31         30         29                     18         17         16
 __________ __________ __________ ___________ __________ __________ __________
|          |          |    1     |           |    1     |    1     |    1     |
|    -2    |    1     |    -     |    ...    |   ----   |   ----   |  -----   |
|          |          |    2     |           |   4096   |   8192   |  16384   |
|__________|__________|__________|___________|__________|__________|__________|
                                high-order word

     15         14         13                     2          1          0
 __________ __________ __________ ___________ __________ __________ __________
|    1     |    1     |    1     |           |    1     |    1     |    1     |
|  -----   |  -----   |  ------  |    ...    |--------- |--------- |----------|
|  32768   |  65536   |  131072  |           |268435456 |536870912 |1073741824|
|__________|__________|__________|___________|__________|__________|__________|
                                low-order word

                           Figure 2-Frac Data Type

Note that for Longints, Fixed, and Frac values, the hex representations of the 
largest and smallest data values are $7FFFFFFF and $80000000, respectively.

A property of the Fixed and Frac data types is that two Fixed or two Frac 
values may be added or subtracted just as if they were 32-bit integers.  To 
demonstrate this, imagine scaling the numbers by a given factor to make them 
integers.  After adding the numbers, the sum could be scaled back down by the 
same factor.  This follows from the distributive property of multiplication 
over addition, which allows one to make the inference shown in the equations 
which follow.  In these equations, V1 and V2 are both either Fixed or Frac 
values. The value for C being discussed, which illustrates the ability to 
scale Fixed and Frac values, is 2^16 for Fixed values of V1 and V2, or 2^30 
for Frac values of V1 and V2.

        (C * V1) + (C * V2)     C * (V1 + V2)
        ___________________  =  _____________  = V1 + V2
                 C                    C

Similarly, two Fixed or two Frac values may be compared, as Longints are 
compared, with one another.  In general, the comparison, addition, and 
subtraction operations used for  long integers may also be performed on any 
two Fixed or any two Frac values.


Further Reference
_____________________________________________________________________________
  o  Apple IIGS Technical Reference Manual
  o  Apple Numerics Manual, Second Edition