================================================================================
Note 21.0 MicroVAX I Floating Point No replies
JAWS::KAISER 106 lines 25-MAR-1985 09:24
--------------------------------------------------------------------------------
+---------------+ +-----------------+
| d i g i t a l | | uNOTE # 021 |
+---------------+ +-----------------+
+----------------------------------------------------+-----------------+
| Title: Floating Point Considerations on MicroVAX I | Date: 10-Jan-85 |
+----------------------------------------------------+-----------------+
| Originator: Christopher DeMers | Page 1 of 2 |
+----------------------------------------------------+-----------------+
The MicroVAX architecture implements a subset of VAX data types. Four
that are part of the VAX architecture but not part of the MicroVAX
architecture are the D_floating, F_floating, G_floating and H_floating
data types. Floating point instructions that use these data types are
likewise not part of the architecture.
The MicroVAX I system implements a proper superset of the MicroVAX
architecture; that is, MicroVAX I uses the MicroVAX architecture, but
implements a few items that are not defined as part of the MicroVAX
architecture. Even though the architecture specifies emulation support
for floating point, the following data types and instructions are
supported in the MicroVAX I microcode:
- F_float
- D_float
- G_float
The F_float data type and instructions are standard on the MicroVAX I.
In addition, the user may specify EITHER D_float or G_float as the
double precision instruction set. The decision to use D_float or
G_float depends on the application.
Both D_float and G_float are double precision floating point data
types/instructions. D_float is compatible with the PDP-11 format and is
the double precision floating point default for many of Digital's
compilers including FORTRAN, PL/I, BASIC and Pascal. Therefore, if the
application has been compiled, say, on a VAX-11/780, with the default
(D_float) and is not to be re-compiled before being run on the MicroVAX
I, then choose the D_float option. The compilers mentioned above have a
switch that allows the generation of G_float instructions. If you wish
to choose the G_float option for your MicroVAX I, the program needs to
be re-compiled with the G_float switch set.
If Macro programs use a specific data type such as G_float, then the
MicroVAX I will need to have the G_float option unless the program is
modified so that the floating point instructions match the option chosen
for the MicroVAX I.
Page 2
Note that even though a program uses one type of double precision
floating point and the MicroVAX I has the other as an option, the
program will run. A feature of the MicroVAX architecture is that all
instructions are executed. The floating point instructions not chosen
as a microcode option are emulated in software. An instruction/data
type mismatch could result in severe performance degradation.
Another reason for choosing one double precision format over another is
the size and accuracy of the data. Both formats are 64 bits long. The
D_float range is 2.9E-37 to 1.7E38. This type gives approximately
sixteen decimal digits precision. G_float "steals" three bits from the
fraction to give the exponent a larger range. The G_float range is
.56E-308 to .9E308 and gives approximately fifteen decimal digits
precision. The range of the number is increased significantly while
only reducing the precision by one decimal digit.
H_float, the only other floating data type in the VAX architecture, is
128 bits long with a range of close to 10E5000 and a precision of
thirty-three decimal digits. H_float is not implemented as part of the
MicroVAX architecture. It is, however, emulated in software.
Data Type Representations
F_Floating
15 7 6 0
+------------+----------+
|S| Exponent | Fraction |
+------------+----------+
| Fraction |
+-----------------------+
31 16
D_Floating G_Floating
15 7 6 0 15 4 3 0
+------------+----------+ +------------+----------+
|S| Exponent | Fraction | |S| Exponent | Fraction |
+------------+----------+ +------------+----------+
| Fraction | | Fraction |
+-----------------------+ +-----------------------+
| Fraction | | Fraction |
+-----------------------+ +-----------------------+
| Fraction | | Fraction |
+-----------------------+ +-----------------------+
63 48 63 48