1270 lines
37 KiB
HTML
1270 lines
37 KiB
HTML
|
<!-- DFUM_035.HTML continuation of C4$:[SAVAGE.HTML.UM]DFUM.HTML -->
|
||
|
<html><head>
|
||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||
|
<title>DIGITAL Fortran 90</title>
|
||
|
</head>
|
||
|
<body bgcolor="white">
|
||
|
<font color="maroon">
|
||
|
<h1 align="center">DIGITAL Fortran 90<br>User Manual for <br> DIGITAL UNIX Systems</h1>
|
||
|
</font>
|
||
|
|
||
|
<hr>
|
||
|
<table border="2">
|
||
|
<tbody><tr>
|
||
|
<td align="center" bgcolor="lightgoldenrodyellow" width="100"><a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_034.html#bottom_034">Previous</a>
|
||
|
</td><td align="center" bgcolor="cyan" width="100"><a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_contents.html">Contents</a>
|
||
|
</td><td align="center" bgcolor="lightskyblue" width="100"><a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_index.html">Index</a>
|
||
|
</td></tr></tbody></table>
|
||
|
|
||
|
<hr>
|
||
|
|
||
|
<a name="sec_complex16"><h2>9.4.6 COMPLEX (KIND=8) or COMPLEX*16 Representation</h2></a>
|
||
|
<a name="index_x_2968"></a>
|
||
|
|
||
|
<p>
|
||
|
Intrinsic COMPLEX (KIND=8) or COMPLEX*16 (same as DOUBLE COMPLEX) data
|
||
|
is 16 contiguous bytes containing a pair of REAL*8 values stored in
|
||
|
IEEE T_float format.
|
||
|
|
||
|
</p><p>
|
||
|
The low-order eight bytes contain REAL (KIND=8) data that represents
|
||
|
the real part of the complex data. The high-order eight bytes contain
|
||
|
REAL (KIND=8) data that represents the imaginary part of the complex
|
||
|
data, as shown in <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_035.html#fig_complex_16">Figure 9-10</a>.
|
||
|
<a name="fig_complex_16"></a>
|
||
|
</p><p>
|
||
|
<strong>Figure 9-10 COMPLEX (KIND =8) or COMPLEX*16
|
||
|
Representation</strong>
|
||
|
</p><hr>
|
||
|
<img src="dfum_035-Dateien/zk-9818.gif">
|
||
|
|
||
|
<p>
|
||
|
The limits and underflow characteristics for REAL (KIND=8) apply to the
|
||
|
two separate real and imaginary parts of a COMPLEX (KIND=8) or
|
||
|
COMPLEX*16 number. Like REAL (KIND=8) or REAL*8 numbers, the sign bit
|
||
|
representation is 0 (zero) for positive numbers and 1 for negative
|
||
|
numbers.
|
||
|
</p><p>
|
||
|
<strong>For More Information:</strong>
|
||
|
<br>
|
||
|
|
||
|
</p><ul>
|
||
|
<li>On converting unformatted data, see <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_035.html#ch_conv">Chapter 10</a>.
|
||
|
</li><li>On defining constants and assigning values to variables, see the
|
||
|
<em>DIGITAL Fortran Language Reference Manual</em>.
|
||
|
</li><li>On intrinsic functions related to the various data types, such as
|
||
|
SELECTED_REAL_KIND, see the <em>DIGITAL Fortran Language Reference Manual</em>.
|
||
|
</li><li>On VAX (OpenVMS) floating-point data types (provided for those
|
||
|
converting OpenVMS data), see <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_044.html#sec_fltng_pt_vax">Section A.4.3</a>.
|
||
|
</li><li>On the
|
||
|
<font size="+1"><tt>f90</tt></font>
|
||
|
command options that control the size of REAL and COMPLEX declarations
|
||
|
(without a kind parameter or size specifier), see <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_011.html#sec_option_real">Section 3.63</a>.
|
||
|
</li><li>On the
|
||
|
<font size="+1"><tt>f90</tt></font>
|
||
|
command options that control the size of DOUBLE PRECISION declarations,
|
||
|
see <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_008.html#sec_option_double">Section 3.25</a>.
|
||
|
</li><li>On IEEE binary floating-point, see ANSI/IEEE Standard 754-1985.
|
||
|
</li></ul>
|
||
|
|
||
|
<a name="sec_fltng_pt_exc"><h2>9.4.7 Exceptional Floating-Point Representations</h2></a>
|
||
|
<a name="index_x_2969"></a>
|
||
|
<a name="index_x_2970"></a>
|
||
|
<a name="index_x_2971"></a>
|
||
|
<a name="index_x_2972"></a>
|
||
|
|
||
|
<p>
|
||
|
<strong>Exceptional values</strong> usually result from a computation
|
||
|
and include plus infinity, minus infinity, NaN, and denormalized
|
||
|
numbers.
|
||
|
|
||
|
</p><p>
|
||
|
Floating-point numbers can be one of the following:
|
||
|
|
||
|
</p><ul>
|
||
|
<li><strong>Alpha finite number</strong>---A floating-point number that
|
||
|
represents a valid number (bit pattern) within the normalized ranges of
|
||
|
a particular data type, including --<em>max</em> to
|
||
|
--<em>min</em>,---zero, +zero, +<em>min</em> to +<em>max</em>. <br>For
|
||
|
any native IEEE floating-point data type, the values of <em>min</em> or
|
||
|
<em>max</em> are listed in <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_034.html#sec_real4">Section 9.4.2</a> (single precision),
|
||
|
<a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_034.html#sec_real8">Section 9.4.3</a> (double precision), and <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_034.html#sec_real16_x">Section 9.4.4</a> (extended
|
||
|
precision). <br>Special bit patterns that are <em>not</em> Alpha finite
|
||
|
numbers represent exceptional values.
|
||
|
</li><li><strong>Infinity</strong>---An IEEE floating-point bit pattern
|
||
|
<a name="index_x_2973"></a>
|
||
|
<a name="index_x_2974"></a>
|
||
|
<a name="index_x_2975"></a>
|
||
|
that represents plus or minus infinity. DIGITAL Fortran 90 identifies
|
||
|
infinity values with the letters "Infinity" or asterisks
|
||
|
(******) in output statements (depends on field width) or certain
|
||
|
hexadecimal values (fraction of 0 and exponent of all 1 values).
|
||
|
</li><li><strong>Not-a-Number (NaN)</strong>---An IEEE floating-point bit
|
||
|
pattern that
|
||
|
<a name="index_x_2976"></a>
|
||
|
<a name="index_x_2977"></a>
|
||
|
<a name="index_x_2978"></a>
|
||
|
represents something other than a number. DIGITAL Fortran 90 identifies NaN
|
||
|
values with the letters "NaN" in output statements. A NaN can
|
||
|
be a signaling NaN or a quiet NaN:
|
||
|
|
||
|
<ul>
|
||
|
<li>A quiet NaN might occur as a result of a calculation, such as 0./0.
|
||
|
and has an exponent of all 1 values and initial fraction bit of 1.
|
||
|
</li><li>A signaling NaN must be set intentionally (does not result from
|
||
|
calculations) and has an exponent of all 1 values and initial fraction
|
||
|
bit of 0 (with one or more other fraction bits of 1).
|
||
|
</li></ul>
|
||
|
</li><li><strong>Denormal</strong>---Identifies an IEEE floating-point bit
|
||
|
pattern
|
||
|
<a name="index_x_2979"></a>
|
||
|
<a name="index_x_2980"></a>
|
||
|
<a name="index_x_2981"></a>
|
||
|
<a name="index_x_2982"></a>
|
||
|
that represents a number whose value falls between zero and the
|
||
|
smallest finite (normalized) number for that data type. The exponent
|
||
|
field contains all zeros. <br>For negative numbers, denormalized
|
||
|
numbers range from the next representable value larger than minus zero
|
||
|
to the representable value that is one bit less than the smallest
|
||
|
finite (normalized) negative number. For positive numbers, denormalized
|
||
|
numbers range from the next representable value larger than positive
|
||
|
zero to the representable value that is one bit less than the smallest
|
||
|
finite (normalized) positive number.
|
||
|
<a name="index_x_2983"></a>
|
||
|
<a name="index_x_2984"></a>
|
||
|
<a name="index_x_2985"></a>
|
||
|
</li><li><strong>Zero</strong>---Can be the value +0 (all zero bits, also
|
||
|
called true zero)
|
||
|
<a name="index_x_2986"></a>
|
||
|
or -0 (all zero bits except the sign bit, such as Z<font size="+1"><tt>'</tt></font>8000000000000000<font size="+1"><tt>'</tt></font>).
|
||
|
</li></ul>
|
||
|
|
||
|
<p>
|
||
|
A NaN or infinity value might result from a calculation that contains a
|
||
|
divide by zero, overflow, or invalid data.
|
||
|
|
||
|
</p><p>
|
||
|
A denormalized number occurs when the result of a calculation falls
|
||
|
within the denormalized range for that data type (subnormal value).
|
||
|
|
||
|
</p><p>
|
||
|
To control floating-point exception handling at run time for the main
|
||
|
program, use the appropriate
|
||
|
<font size="+1"><tt>-fpe<em>n</em></tt></font>
|
||
|
option. The callable
|
||
|
<font size="+1"><tt>for_set_fpe</tt></font>
|
||
|
routine allows further control for subprogram use or conditional use
|
||
|
during program execution.
|
||
|
|
||
|
</p><p>
|
||
|
If an exceptional value is used in a calculation, an unrecoverable
|
||
|
exception can occur unless you specify the appropriate
|
||
|
<font size="+1"><tt>-fpe<em>n</em></tt></font>
|
||
|
option or use the
|
||
|
<font size="+1"><tt>for_set_fpe</tt></font>
|
||
|
routine. Denormalized numbers can be processed as is, set equal to zero
|
||
|
with program continuation or a program stop, and generate warning
|
||
|
messages (see <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_008.html#sec_option_fpe">Section 3.33</a>).
|
||
|
|
||
|
</p><p>
|
||
|
<a name="index_x_2987"></a>
|
||
|
<a name="index_x_2988"></a>
|
||
|
<a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_035.html#tab_except">Table 9-2</a> lists the hexadecimal (hex) values of the IEEE
|
||
|
exceptional floating-point numbers in Alpha systems, for S_float
|
||
|
(single precision), T_float (double precision), and X_float (extended
|
||
|
precision) formats: </p><p>
|
||
|
|
||
|
<table border="3">
|
||
|
<caption><a name="tab_except"><strong>Table 9-2 Exceptional Floating-Point Numbers</strong></a></caption>
|
||
|
<tbody><tr bgcolor="lightseagreen">
|
||
|
<th align="center">Exceptional Number </th>
|
||
|
<th align="center">Hex Value </th>
|
||
|
</tr>
|
||
|
<tr bgcolor="lightseagreen">
|
||
|
<th colspan="2" align="left">S_float Representation </th>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Infinity (+)
|
||
|
</td>
|
||
|
<td>
|
||
|
Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
7F800000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Infinity (--)
|
||
|
</td>
|
||
|
<td>
|
||
|
Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
FF800000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Zero (+0)
|
||
|
</td>
|
||
|
<td>
|
||
|
Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
00000000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Zero (--0)
|
||
|
</td>
|
||
|
<td>
|
||
|
Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
80000000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Quiet NaN (+)
|
||
|
</td>
|
||
|
<td>
|
||
|
From Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
7FC00000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
to Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
7FFFFFFF
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Quiet NaN (--)
|
||
|
</td>
|
||
|
<td>
|
||
|
From Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
FFC00000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
to Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
FFFFFFFF
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Signaling NaN (+)
|
||
|
</td>
|
||
|
<td>
|
||
|
From Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
7F800001
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
to Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
7FBFFFFF
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Signaling NaN (--)
|
||
|
</td>
|
||
|
<td>
|
||
|
From Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
FF800001
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
to Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
FFBFFFFF
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="lightseagreen">
|
||
|
<th colspan="2" align="left">T_float Representation </th>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Infinity (+)
|
||
|
</td>
|
||
|
<td>
|
||
|
Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
7FF0000000000000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Infinity (--)
|
||
|
</td>
|
||
|
<td>
|
||
|
Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
FFF0000000000000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Zero (+0)
|
||
|
</td>
|
||
|
<td>
|
||
|
Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
0000000000000000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Zero (-0)
|
||
|
</td>
|
||
|
<td>
|
||
|
Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
8000000000000000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Quiet NaN (+)
|
||
|
</td>
|
||
|
<td>
|
||
|
From Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
7FF8000000000000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
to Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
7FFFFFFFFFFFFFFF
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Quiet NaN (--)
|
||
|
</td>
|
||
|
<td>
|
||
|
From Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
FFF8000000000000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
to Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
FFFFFFFFFFFFFFFF
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Signaling NaN (+)
|
||
|
</td>
|
||
|
<td>
|
||
|
From Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
7FF0000000000001
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
to Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
7FF7FFFFFFFFFFFF
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Signaling NaN (--)
|
||
|
</td>
|
||
|
<td>
|
||
|
From Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
FFF0000000000001
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
to Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
FFF7FFFFFFFFFFFF
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="lightseagreen">
|
||
|
<th colspan="2" align="left">X_float Representation </th>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Infinity (+)
|
||
|
</td>
|
||
|
<td>
|
||
|
Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
7FFF0000000000000000000000000000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Infinity (--)
|
||
|
</td>
|
||
|
<td>
|
||
|
Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
FFFF0000000000000000000000000000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Zero (+0)
|
||
|
</td>
|
||
|
<td>
|
||
|
Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
000000000000000000000000000000000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Zero (--0)
|
||
|
</td>
|
||
|
<td>
|
||
|
Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
800000000000000000000000000000000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Quiet NaN (+)
|
||
|
</td>
|
||
|
<td>
|
||
|
From Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
7FFF80000000000000000000000000000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
to Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Quiet NaN (--)
|
||
|
</td>
|
||
|
<td>
|
||
|
From Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
FFFF80000000000000000000000000000
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
to Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Signaling NaN (+)
|
||
|
</td>
|
||
|
<td>
|
||
|
From Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
7FFF00000000000000000000000000001
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
to Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
7FFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
Signaling NaN (--)
|
||
|
</td>
|
||
|
<td>
|
||
|
From Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
FFFF00000000000000000000000000001
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
to Z
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
FFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||
|
<font size="+1">
|
||
|
<tt>'</tt>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
</tbody></table>
|
||
|
|
||
|
</p><p>
|
||
|
DIGITAL Fortran 90 supports IEEE exception handling, allowing you to test
|
||
|
for infinity by using a comparison of floating-point data (such as
|
||
|
generating positive infinity by using a calculation like x=1.0/0 and
|
||
|
comparing x to the calculated number).
|
||
|
|
||
|
</p><p>
|
||
|
The appropriate
|
||
|
<font size="+1"><tt>f90</tt></font>
|
||
|
command
|
||
|
<font size="+1"><tt>-fpe<em>n</em></tt></font>
|
||
|
options or calling the
|
||
|
<font size="+1"><tt>for_set_fpe</tt></font>
|
||
|
routine with appropriate arguments allows program continuation when a
|
||
|
calculation results in a divide by zero, overflow, or invalid data
|
||
|
arithmetic exception, generating an exceptional value (a NaN or
|
||
|
Infinity (+ or --)).
|
||
|
|
||
|
</p><p>
|
||
|
<a name="index_x_2989"></a>
|
||
|
<a name="index_x_2990"></a>
|
||
|
<a name="index_x_2991"></a>
|
||
|
To test for a NaN when DIGITAL Fortran 90 allows continuation for
|
||
|
arithmetic exceptions, you can use the ISNAN intrinsic function.
|
||
|
|
||
|
</p><p>
|
||
|
For example, you might use the following code to test a DOUBLE
|
||
|
PRECISION (REAL (KIND=8)) value:
|
||
|
<a name="index_x_2992"></a>
|
||
|
|
||
|
</p><p>
|
||
|
<table border="0">
|
||
|
<tbody><tr>
|
||
|
<td bgcolor="blanchedalmond">
|
||
|
<br>
|
||
|
<font color="mediumblue"><pre> DOUBLE PRECISION A, B, F
|
||
|
A = 0.
|
||
|
B = 0.
|
||
|
|
||
|
! Perform calculations with variables A and B
|
||
|
.
|
||
|
.
|
||
|
.
|
||
|
|
||
|
! f contains the value to check against a particular NaN
|
||
|
|
||
|
F = A / B
|
||
|
|
||
|
IF (ISNAN(F)) THEN
|
||
|
WRITE (6,*) '--> Variable F contains a NaN value <--'
|
||
|
ENDIF
|
||
|
|
||
|
! Inform user that f has the hardware quiet NaN value
|
||
|
|
||
|
! Perform calculations with variable F (or stop program early)
|
||
|
|
||
|
END PROGRAM
|
||
|
</pre>
|
||
|
</font>
|
||
|
</td></tr></tbody></table>
|
||
|
|
||
|
</p><p>
|
||
|
<a name="index_x_2993"></a>
|
||
|
<a name="index_x_2994"></a>
|
||
|
<a name="index_x_2995"></a>
|
||
|
This program might be compiled with
|
||
|
<font size="+1"><tt>-fpe2</tt></font>
|
||
|
or
|
||
|
<font size="+1"><tt>-fpe4</tt></font>
|
||
|
to allow:
|
||
|
|
||
|
</p><ul>
|
||
|
<li>Continuation when a NaN (or other exceptional value) is encountered
|
||
|
in a calculation
|
||
|
</li><li>A summary message explaining the number and types of arithmetic
|
||
|
exceptions encountered:
|
||
|
|
||
|
<p>
|
||
|
<table border="0">
|
||
|
<tbody><tr>
|
||
|
<td bgcolor="blanchedalmond">
|
||
|
<br>
|
||
|
<font color="mediumblue"><pre>% <strong>f90 -fpe2 isnan.for</strong>
|
||
|
% <strong>a.out</strong>
|
||
|
forrtl: error: floating invalid
|
||
|
--> Variable F contains a NaN value <--
|
||
|
forrtl: info: 1 floating invalid traps
|
||
|
</pre>
|
||
|
</font>
|
||
|
</td></tr></tbody></table>
|
||
|
|
||
|
</p></li></ul>
|
||
|
|
||
|
<p>
|
||
|
The FP_CLASS intrinsic function is also available to check for
|
||
|
exceptional values (see the <em>DIGITAL Fortran Language Reference Manual</em> and the file
|
||
|
<font size="+1"><tt>/usr/include/fordef.f</tt></font>
|
||
|
).
|
||
|
</p><p>
|
||
|
<strong>For More Information:</strong>
|
||
|
<br>
|
||
|
|
||
|
</p><ul>
|
||
|
<li>On using the
|
||
|
<font size="+1"><tt>f90</tt></font>
|
||
|
command
|
||
|
<font size="+1"><tt>-fpe<em>n</em></tt></font>
|
||
|
options and the
|
||
|
<font size="+1"><tt>for_set_fpe</tt></font>
|
||
|
routine to control arithmetic exception handling, see <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_008.html#sec_option_fpe">Section 3.33</a>.
|
||
|
</li><li>On Alpha exceptional values, see <em>Alpha Architecture Reference Manual</em>.
|
||
|
</li><li>On IEEE binary floating-point exception handling, see the <em>IEEE
|
||
|
Standard for Binary Floating-Point Arithmetic</em> (ANSI/IEEE Standard
|
||
|
754-1985) and <font size="+1"><tt>ieee(3)</tt></font>.
|
||
|
</li></ul>
|
||
|
|
||
|
<a name="sec_char_rep"><h1><font color="maroon">9.5 Character Representation</font></h1></a>
|
||
|
<a name="index_x_2996"></a>
|
||
|
<a name="index_x_2997"></a>
|
||
|
|
||
|
<p>
|
||
|
A character string is a contiguous sequence of bytes in memory, as
|
||
|
shown in <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_035.html#fig_character">Figure 9-11</a>.
|
||
|
<a name="fig_character"></a>
|
||
|
</p><p>
|
||
|
<strong>Figure 9-11 CHARACTER Data Representation</strong>
|
||
|
</p><hr>
|
||
|
<img src="dfum_035-Dateien/zk-0809.gif">
|
||
|
|
||
|
<p>
|
||
|
A character string is specified by two attributes: the address A of the
|
||
|
first byte of the string, and the length L of the string in bytes. The
|
||
|
length L of a string is in the range 1 through 65,535.
|
||
|
</p><p>
|
||
|
<strong>For More Information:</strong>
|
||
|
<br>
|
||
|
|
||
|
</p><ul>
|
||
|
<li>On defining constants, assigning values to variables, using
|
||
|
substring expressions, and concatenation, see the <em>DIGITAL Fortran Language Reference Manual</em>.
|
||
|
</li><li>On intrinsic functions related to the various data types, see the
|
||
|
<em>DIGITAL Fortran Language Reference Manual</em>.
|
||
|
</li></ul>
|
||
|
|
||
|
<a name="sec_holrith_rep"><h1><font color="maroon">9.6 Hollerith Representation</font></h1></a>
|
||
|
<a name="index_x_2998"></a>
|
||
|
<a name="index_x_2999"></a>
|
||
|
|
||
|
<p>
|
||
|
Hollerith constants are stored internally, one character per byte. When
|
||
|
Hollerith constants contain the ASCII representation of characters,
|
||
|
they resemble the storage of character data (see <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_035.html#fig_character">Figure 9-11</a>).
|
||
|
|
||
|
</p><p>
|
||
|
When Hollerith constants store numeric data, they usually have a length
|
||
|
of one, two, four, or eight bytes and resemble the corresponding
|
||
|
numeric data type.
|
||
|
</p><p>
|
||
|
<strong>For More Information:</strong>
|
||
|
<br>
|
||
|
|
||
|
</p><ul>
|
||
|
<li>On defining constants and assigning values to variables, see the
|
||
|
<em>DIGITAL Fortran Language Reference Manual</em>.
|
||
|
</li><li>On intrinsic functions related to the various data types, see the
|
||
|
<em>DIGITAL Fortran Language Reference Manual</em>.
|
||
|
</li></ul>
|
||
|
|
||
|
<p>
|
||
|
</p><hr size="5">
|
||
|
<font color="maroon">
|
||
|
<a name="ch_conv"><h1>Chapter 10<br>Converting Unformatted Numeric Data</h1></a>
|
||
|
</font>
|
||
|
|
||
|
<p>
|
||
|
This chapter describes how you can use DIGITAL Fortran 90 to read and write
|
||
|
unformatted numeric data in certain nonnative formats, including big
|
||
|
endian IEEE and VAX floating-point formats.
|
||
|
|
||
|
</p><p>
|
||
|
On DIGITAL UNIX systems, DIGITAL Fortran 90 supports the following little
|
||
|
endian floating-point formats in memory:
|
||
|
|
||
|
<table border="3">
|
||
|
<tbody><tr bgcolor="lightseagreen">
|
||
|
<th align="center">Floating-Point Size </th>
|
||
|
<th align="center">Format in Memory </th>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
KIND=4
|
||
|
</td>
|
||
|
<td>
|
||
|
IEEE S_float
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
KIND=8
|
||
|
</td>
|
||
|
<td>
|
||
|
IEEE T_float
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
KIND=16
|
||
|
</td>
|
||
|
<td>
|
||
|
DIGITAL IEEE style X_float
|
||
|
</td>
|
||
|
</tr>
|
||
|
</tbody></table>
|
||
|
|
||
|
</p><p>
|
||
|
If your program needs to read or write unformatted data files
|
||
|
containing a floating-point format that differs from the format in
|
||
|
memory for that data size, you can request that the unformatted data be
|
||
|
converted.
|
||
|
|
||
|
</p><p>
|
||
|
Converting unformatted data is generally faster than converting
|
||
|
formatted data and is less likely to lose precision for floating-point
|
||
|
numbers.
|
||
|
|
||
|
<a name="sec_float_convert_endian"></a></p><h1><a name="sec_float_convert_endian"><font color="maroon">10.1 Endian Order of Numeric Formats</font></a></h1>
|
||
|
|
||
|
<p>
|
||
|
<a name="index_x_3000"></a>
|
||
|
<a name="index_x_3001"></a>
|
||
|
<a name="index_x_3002"></a>
|
||
|
<a name="index_x_3003"></a>
|
||
|
<a name="index_x_3004"></a>
|
||
|
<a name="index_x_3005"></a>
|
||
|
<a name="index_x_3006"></a>
|
||
|
<a name="index_x_3007"></a>
|
||
|
<a name="index_x_3008"></a>
|
||
|
<a name="index_x_3009"></a>
|
||
|
<a name="index_x_3010"></a>
|
||
|
<a name="index_x_3011"></a>
|
||
|
<a name="index_x_3012"></a>
|
||
|
Data storage in different computers use a convention of either
|
||
|
<strong>little endian</strong> or <strong>big endian</strong> storage.
|
||
|
The storage convention generally applies to numeric values that span
|
||
|
multiple bytes, as follows:
|
||
|
|
||
|
</p><ul>
|
||
|
<li><strong>Little endian</strong> storage occurs when:
|
||
|
|
||
|
<ul>
|
||
|
<li>The least significant bit (LSB) value is in the byte with the
|
||
|
lowest address.
|
||
|
</li><li>The most significant bit (MSB) value is in the byte with the
|
||
|
highest address.
|
||
|
</li><li>The address of the numeric value is the byte containing the LSB.
|
||
|
Subsequent bytes with higher addresses contain more significant bits.
|
||
|
</li></ul>
|
||
|
</li><li><strong>Big endian</strong> storage occurs when:
|
||
|
|
||
|
<ul>
|
||
|
<li>The least significant bit (LSB) value is in the byte with the
|
||
|
highest address.
|
||
|
</li><li>The most significant bit (MSB) value is in the byte with the lowest
|
||
|
address.
|
||
|
</li><li>The address of the numeric value is the byte containing the MSB.
|
||
|
Subsequent bytes with higher addresses contain less significant bits.
|
||
|
</li></ul>
|
||
|
</li></ul>
|
||
|
|
||
|
<p>
|
||
|
<a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_035.html#fig_endian">Figure 10-1</a> shows the difference between the two byte-ordering
|
||
|
schemes.
|
||
|
<a name="fig_endian"></a>
|
||
|
</p><p>
|
||
|
<strong>Figure 10-1 Little and Big Endian Storage of an INTEGER
|
||
|
Value</strong>
|
||
|
</p><hr>
|
||
|
<img src="dfum_035-Dateien/zk-6654a.gif">
|
||
|
|
||
|
<p>
|
||
|
Moving data files between big endian and little endian computers
|
||
|
requires that the data be converted.
|
||
|
|
||
|
<a name="sec_float_convert"></a></p><h1><a name="sec_float_convert"><font color="maroon">10.2 Native and Supported Nonnative Numeric Formats</font></a></h1>
|
||
|
|
||
|
<p>
|
||
|
<a name="index_x_3013"></a>
|
||
|
<a name="index_x_3014"></a>
|
||
|
<a name="index_x_3015"></a>
|
||
|
<a name="index_x_3016"></a>
|
||
|
<a name="index_x_3017"></a>
|
||
|
<a name="index_x_3018"></a>
|
||
|
<a name="index_x_3019"></a>
|
||
|
<a name="index_x_3020"></a>
|
||
|
<a name="index_x_3021"></a>
|
||
|
<a name="index_x_3022"></a>
|
||
|
<a name="index_x_3023"></a>
|
||
|
<a name="index_x_3024"></a>
|
||
|
<a name="index_x_3025"></a>
|
||
|
<a name="index_x_3026"></a>
|
||
|
<a name="index_x_3027"></a>
|
||
|
<a name="index_x_3028"></a>
|
||
|
DIGITAL Fortran 90 provides the capability for programs to read and write
|
||
|
unformatted data (originally written using unformatted I/O statements)
|
||
|
in
|
||
|
<a name="index_x_3029"></a>
|
||
|
several nonnative floating-point formats and in big endian INTEGER or
|
||
|
floating-point format.
|
||
|
|
||
|
</p><p>
|
||
|
When reading a nonnative unformatted format, the nonnative format on
|
||
|
disk must be converted to native format in memory. Similarly, native
|
||
|
data in memory can be written to a nonnative unformatted format. If a
|
||
|
converted nonnative value is outside the range of the native data type,
|
||
|
a run-time message appears (listed in <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_033.html#tab_runtime_errors">Table 8-2</a>).
|
||
|
|
||
|
</p><p>
|
||
|
Supported native and nonnative floating-point formats include:
|
||
|
|
||
|
</p><ul>
|
||
|
<li>Standard IEEE little endian floating-point formats<sup>1</sup> and
|
||
|
little endian integers. These formats are found on DIGITAL UNIX (Alpha)
|
||
|
systems, DIGITAL OpenVMS Alpha systems, Microsoft® Windows
|
||
|
NT<sup>tm</sup> systems, IBM-compatible PC systems, and DIGITAL ULTRIX
|
||
|
RISC systems. On DIGITAL UNIX systems, these are the native (in memory)
|
||
|
floating-point and integer formats.
|
||
|
<a name="index_x_3030"></a>
|
||
|
<a name="index_x_3031"></a>
|
||
|
<a name="index_x_3032"></a>
|
||
|
<a name="index_x_3033"></a>
|
||
|
</li><li>Standard IEEE big endian floating-point formats<sup>1</sup> and big
|
||
|
endian integers found on most Sun systems, most Hewlett-Packard systems
|
||
|
(such as HP-UX systems), and IBM's RISC System/6000 systems.
|
||
|
</li><li>DIGITAL VAX little endian floating-point formats and little endian
|
||
|
integers supported by DIGITAL Fortran for OpenVMS VAX systems and
|
||
|
DIGITAL Fortran for OpenVMS Alpha systems.
|
||
|
</li><li>Big endian proprietary floating-point formats and big endian
|
||
|
integers associated with CRAY (CRAY systems).
|
||
|
</li><li>Big endian proprietary floating-point formats and big endian
|
||
|
integers associated with IBM (the IBM's System\370 and similar systems).
|
||
|
</li></ul>
|
||
|
|
||
|
<p>
|
||
|
<a name="index_x_3034"></a>
|
||
|
<a name="index_x_3035"></a>
|
||
|
<a name="index_x_3036"></a>
|
||
|
The native memory format uses little endian integers and little endian
|
||
|
IEEE floating-point formats, as follows:
|
||
|
|
||
|
</p><ul>
|
||
|
<li>INTEGER and LOGICAL declarations of one, two, four, or eight bytes
|
||
|
(intrinsic kinds 1, 2, 4, and 8). You can specify the integer data
|
||
|
length by using an explicit data declaration (kind parameter or size
|
||
|
specifier). All INTEGER and LOGICAL declarations without a kind
|
||
|
parameter or size specifier will be four bytes in length. To request an
|
||
|
8-byte size for all INTEGER and LOGICAL declarations without a kind
|
||
|
parameter or size specifier, use an
|
||
|
<font size="+1"><tt>f90</tt></font>
|
||
|
command-line option (see <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_034.html#sec_int_options">Section 9.2.1</a>).
|
||
|
</li><li>IEEE S_float format for single-precision 4-byte REAL and 8-byte
|
||
|
COMPLEX declarations (KIND=4). You can specify the real or complex data
|
||
|
length by using an explicit data declaration (kind parameter or size
|
||
|
specifier). For all REAL or COMPLEX declarations without a kind
|
||
|
parameter or size specifier, this is the default size unless you use an
|
||
|
<font size="+1"><tt>f90</tt></font>
|
||
|
command-line option to request double-precision sizes (see
|
||
|
<a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_034.html#sec_realcomplex_option">Section 9.4.1</a>).
|
||
|
</li><li>IEEE T_float format for double-precision 8-byte REAL and 16-byte
|
||
|
COMPLEX declarations (KIND=8). You can specify the real or complex data
|
||
|
length by using an explicit data declaration (kind parameter or size
|
||
|
specifier). To request double-precision sizes for all REAL or COMPLEX
|
||
|
declarations without a kind parameter or size specifier, you can use an
|
||
|
<font size="+1"><tt>f90</tt></font>
|
||
|
command-line option (see <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_034.html#sec_realcomplex_option">Section 9.4.1</a>).
|
||
|
</li><li>DIGITAL IEEE style X_float format for extended-precision 16-byte
|
||
|
REAL declarations (KIND=16). You can specify the real data length by
|
||
|
using an explicit data declaration (kind parameter or size specifier).
|
||
|
To request extended-precision sizes for all DOUBLE PRECISION
|
||
|
declarations, you can use an
|
||
|
<font size="+1"><tt>f90</tt></font>
|
||
|
command-line option (see <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_034.html#sec_realcomplex_option">Section 9.4.1</a>).
|
||
|
</li></ul>
|
||
|
|
||
|
<p>
|
||
|
<a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_035.html#tab_nonnative_float">Table 10-1</a> lists the keywords for the supported unformatted file
|
||
|
data formats. Use the appropriate keyword after the
|
||
|
<font size="+1"><tt>-convert</tt></font>
|
||
|
option (such as
|
||
|
<font size="+1"><tt>-convert cray</tt></font>
|
||
|
) or as an environment variable value (see <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_036.html#sec_nonnative_method">Section 10.4</a>).
|
||
|
<a name="index_x_3037"></a>
|
||
|
<a name="index_x_3038"></a>
|
||
|
<a name="index_x_3039"></a>
|
||
|
<a name="index_x_3040"></a>
|
||
|
<a name="index_x_3041"></a>
|
||
|
<a name="index_x_3042"></a>
|
||
|
<a name="index_x_3043"></a>
|
||
|
</p><p>
|
||
|
<a name="index_x_3044"></a>
|
||
|
|
||
|
<table border="3">
|
||
|
<caption><a name="tab_nonnative_float"><strong>Table 10-1 Unformatted Numeric Formats, Keywords, and Supported Data Types</strong></a></caption>
|
||
|
<tbody><tr bgcolor="lightseagreen">
|
||
|
<th align="center">Recognized Keyword<sup>1</sup> </th>
|
||
|
<th align="center">Description </th>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
BIG_ENDIAN
|
||
|
</td>
|
||
|
<td>
|
||
|
Big endian integer data of the appropriate INTEGER size (one, two, or
|
||
|
four bytes) and big endian IEEE floating-point formats for REAL and
|
||
|
COMPLEX single- and double-precision numbers. INTEGER (KIND=1) or
|
||
|
INTEGER*1 data is the same for little endian and big endian.
|
||
|
<a name="index_x_3045">
|
||
|
</a>
|
||
|
<a name="index_x_3046">
|
||
|
</a>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
CRAY
|
||
|
</td>
|
||
|
<td>
|
||
|
Big endian integer data of the appropriate INTEGER size (one, two,
|
||
|
four, or eight bytes) and big endian CRAY proprietary floating-point
|
||
|
format for
|
||
|
<a name="index_x_3047">
|
||
|
</a>
|
||
|
REAL and COMPLEX single- and double-precision numbers.
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
FDX
|
||
|
</td>
|
||
|
<td>
|
||
|
Native little endian integers of the appropriate INTEGER size (one,
|
||
|
two, four, or eight bytes) and the following little endian DIGITAL
|
||
|
proprietary floating-point formats:
|
||
|
<ul>
|
||
|
<li>VAX F_float for REAL (KIND=4) and COMPLEX (KIND=4)
|
||
|
<a name="index_x_3048">
|
||
|
</a>
|
||
|
<a name="index_x_3049">
|
||
|
</a>
|
||
|
</li><li>VAX D_float for REAL (KIND=8) and COMPLEX (KIND=8)
|
||
|
</li><li>IEEE style X_float for REAL (KIND=16)
|
||
|
</li></ul>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
FGX
|
||
|
</td>
|
||
|
<td>
|
||
|
Native little endian integers of the appropriate INTEGER size (one,
|
||
|
two, four, or eight bytes) and the following little endian DIGITAL
|
||
|
proprietary floating-point formats:
|
||
|
<ul>
|
||
|
<li>VAX F_float for REAL (KIND=4) and COMPLEX (KIND=4)
|
||
|
<a name="index_x_3050">
|
||
|
</a>
|
||
|
<a name="index_x_3051">
|
||
|
</a>
|
||
|
</li><li>VAX G_float for REAL (KIND=8) and COMPLEX (KIND=8)
|
||
|
</li><li>IEEE style X_float for REAL (KIND=16)
|
||
|
</li></ul>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
IBM
|
||
|
</td>
|
||
|
<td>
|
||
|
Big endian integer data of the appropriate INTEGER size (one, two, or
|
||
|
four bytes) and big endian IBM proprietary (System\370 and similar)
|
||
|
floating-point format for
|
||
|
<a name="index_x_3052">
|
||
|
</a>
|
||
|
REAL and COMPLEX single- and double-precision numbers.
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
LITTLE_ENDIAN
|
||
|
</td>
|
||
|
<td>
|
||
|
Native little endian integers of the appropriate INTEGER size (one,
|
||
|
two, four, or eight bytes) and the following native little endian IEEE
|
||
|
floating-point formats:
|
||
|
<ul>
|
||
|
<li>S_float for REAL (KIND=4) and COMPLEX (KIND=4)
|
||
|
<a name="index_x_3053">
|
||
|
</a>
|
||
|
<a name="index_x_3054">
|
||
|
</a>
|
||
|
</li><li>T_float for REAL (KIND=8) and COMPLEX (KIND=8)
|
||
|
</li><li>IEEE style X_float for REAL (KIND=16)
|
||
|
</li></ul>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
NATIVE
|
||
|
</td>
|
||
|
<td>
|
||
|
No conversion occurs between memory and disk. This is the default for
|
||
|
unformatted files.
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
VAXD
|
||
|
</td>
|
||
|
<td>
|
||
|
Native little endian integers of the appropriate INTEGER size (one,
|
||
|
two, four, or eight bytes) and the following little endian VAX DIGITAL
|
||
|
proprietary floating-point formats:
|
||
|
<ul>
|
||
|
<li>VAX F_float for REAL (KIND=4) and COMPLEX (KIND=4)
|
||
|
<a name="index_x_3055">
|
||
|
</a>
|
||
|
<a name="index_x_3056">
|
||
|
</a>
|
||
|
</li><li>VAX D_float for REAL (KIND=8) and COMPLEX (KIND=8)
|
||
|
</li><li>VAX H_float for REAL (KIND=16)
|
||
|
</li></ul>
|
||
|
</td>
|
||
|
</tr>
|
||
|
<tr bgcolor="blanchedalmond">
|
||
|
<td>
|
||
|
VAXG
|
||
|
</td>
|
||
|
<td>
|
||
|
Native little endian integers of the appropriate INTEGER size (one,
|
||
|
two, four, or eight bytes) and the following little endian VAX DIGITAL
|
||
|
proprietary floating-point formats:
|
||
|
<ul>
|
||
|
<li>VAX F_float for REAL (KIND=4) and COMPLEX (KIND=4)
|
||
|
<a name="index_x_3057">
|
||
|
</a>
|
||
|
<a name="index_x_3058">
|
||
|
</a>
|
||
|
</li><li>VAX G_float for REAL (KIND=8) and COMPLEX (KIND=8)
|
||
|
</li><li>VAX H_float for REAL (KIND=16)
|
||
|
</li></ul>
|
||
|
</td>
|
||
|
</tr>
|
||
|
</tbody></table>
|
||
|
</p><hr>
|
||
|
<sup>1</sup>When using the data type as a <font size="+1"><tt>-convert</tt></font> keyword option on the <font size="+1"><tt>f90</tt></font> command line, the data type keyword must be
|
||
|
in lowercase, such as <font size="+1"><tt>-convert big_endian</tt></font>.
|
||
|
<br>
|
||
|
<hr>
|
||
|
|
||
|
<p>
|
||
|
While this solution is not expected to fulfill all floating-point
|
||
|
conversion needs, it provides the capability to read and write various
|
||
|
types of unformatted nonnative floating-point data.
|
||
|
</p><p>
|
||
|
<strong>For More Information:</strong>
|
||
|
<br>
|
||
|
|
||
|
</p><ul>
|
||
|
<li>On porting OpenVMS Fortran data files to a DIGITAL UNIX system for
|
||
|
use by DIGITAL Fortran 90, see <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_044.html#sec_compat_vms">Section A.4</a>.
|
||
|
</li><li>Ranges and the format of native IEEE floating-point data types, see
|
||
|
<a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_034.html#tab_datatype_summ">Table 9-1</a> and <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_034.html#sec_fltng_pt">Section 9.4</a>.
|
||
|
</li><li>Ranges and the format of VAX floating-point data types, see
|
||
|
<a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_044.html#sec_fltng_pt_vax">Section A.4.3</a>.
|
||
|
</li><li>Specifying the size of INTEGER declarations (without a kind) using
|
||
|
an
|
||
|
<font size="+1"><tt>f90</tt></font>
|
||
|
command option, see <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_034.html#sec_int_options">Section 9.2.1</a>.
|
||
|
</li><li>Specifying the size of LOGICAL declarations (without a kind) using
|
||
|
an
|
||
|
<font size="+1"><tt>f90</tt></font>
|
||
|
command option, see <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_034.html#sec_logical_rep">Section 9.3</a>.
|
||
|
</li><li>Specifying the size of REAL or COMPLEX declarations (without a
|
||
|
kind) using an
|
||
|
<font size="+1"><tt>f90</tt></font>
|
||
|
command option, see <a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_034.html#sec_realcomplex_option">Section 9.4.1</a>.
|
||
|
</li><li>Data declarations and other DIGITAL Fortran 90 language information,
|
||
|
see the <em>DIGITAL Fortran Language Reference Manual</em>.
|
||
|
</li></ul>
|
||
|
|
||
|
<p>
|
||
|
</p><center>
|
||
|
<table bgcolor="lightskyblue" border="0" width="75%">
|
||
|
<tbody><tr>
|
||
|
<td>
|
||
|
<center><font color="black" size="+2"><strong>Note </strong></font></center>
|
||
|
<hr noshade="noshade" size="1">
|
||
|
<font color="black">
|
||
|
<h4><strong><sup>1</sup> </strong> IEEE floating-point formats are
|
||
|
defined in the IEEE Standard for Binary Floating-Point Arithmetic,
|
||
|
ANSI/IEEE Standard 754-1985, Institute of Electrical and Electronics
|
||
|
Engineers, August 1985.</h4>
|
||
|
</font>
|
||
|
</td>
|
||
|
</tr>
|
||
|
</tbody></table>
|
||
|
</center>
|
||
|
<p>
|
||
|
|
||
|
<a name="bottom_035"></a>
|
||
|
</p><p>
|
||
|
</p><hr>
|
||
|
<table border="2">
|
||
|
<tbody><tr>
|
||
|
<td align="center" bgcolor="lightgoldenrodyellow" width="100"><a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_034.html#bottom_034">Previous</a>
|
||
|
</td><td align="center" bgcolor="aquamarine" width="100"><a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_036.html">Next</a>
|
||
|
</td><td align="center" bgcolor="cyan" width="100"><a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_contents.html">Contents</a>
|
||
|
</td><td align="center" bgcolor="lightskyblue" width="100"><a href="http://www.hpc.unimelb.edu.au/doc/f90lrm/dfum_index.html">Index</a>
|
||
|
</td></tr></tbody></table>
|
||
|
|
||
|
|
||
|
</body></html>
|