The FIXED_POINT statement has the form
where the variables belong to some integer type (INTEGER, LONG, UNSIGNED, BCD, NUMERIC, and so on). These instruct the compiler to treat these variables as containing numbers with n digits after the decimal point rather than true integers.
Thus, where a and b are declared to be FIXED_POINT.3, the calculation of a+b and a-b is not affected (but the result is of type FIXED_POINT.3, not INTEGER), but a*b is calculated as follows using integer arithmetic:
multiply a by b, allowing the result to have twice the length of either variable,
then divide the result by 1000since the integer a is really a*1000, and similarly for b, a*b by integer arithmetic is (a*b)*1000000, which when divided by 1000 is (a*b)*1000, the integer form of what a*b should actually be.
Not every computer can handle double length intermediate results in integer arithmetic in assembly language; the 68000 will produce such results by multiplication, but cannot divide them directly.
The form FIXED_POINT.n/b is also allowed, where b replaces 10 as the item to be taken to the n-th power to determine the scale factor for such integers.