- http://slacvx.slac.stanford.edu/HELP/GCC
- http://www.progis.de/
- http://www.lp.se/products/gnu.html
-
-=head2 Multinet issues with Perl on VMS
-
-Prior to the release of Perl 5.8.0 it was noted that the regression
-test for lib/Net/hostent (in file [.lib.Net]hostent.t) will fail owing
-to problems with the hostent structure returned by C calls to either
-gethostbyname() or gethostbyaddr() using DEC or Compaq C with a
-Multinet TCP/IP stack. The problem was noted in Multinet 4.3A
-using either Compaq C 6.5 or DEC C 6.0, and with Multinet 4.2A
-using DEC C 5.2, but could easily affect other versions of Multinet.
-A representative of Process Software Inc. has acknowledged a
-bug in the Multinet version of UCX$IPC_SHR for which there is
-an ECO forthcoming. If you see one or more tests in lib/Net/hostent
-fail we recommend that you apply the Multinet ECO when it becomes
-available from:
-
- http://www.multinet.process.com/eco.html
-
-You may determine the version of Multinet that you are running using
-the command:
-
- multinet show /version
-
-from the DCL command prompt.
-
-If you cannot wait for the ECO from Process you might try using
-Perl programming constructs such as:
-
- $address = substr($gethostbyname_addr,0,4);
-
-to temporarily work around the problem, or if you are brave
-and do not mind the possibility of breaking IPv6 addresses,
-you might modify the pp_sys.c file to add an ad-hoc correction
-like so:
-
-
- --- pp_sys.c;1 Thu May 30 14:42:17 2002
- +++ pp_sys.c Thu May 30 12:54:02 2002
- @@ -4684,6 +4684,10 @@
- }
- #endif
-
- + if (hent) {
- + hent->h_length = 4;
- + }
- +
- if (GIMME != G_ARRAY) {
- PUSHs(sv = sv_newmortal());
- if (hent) {
-
-then re-compile and re-test your perl. After the installation
-of the Multinet ECO you ought to back out any such changes though.
+=head2 Floating Point Considerations
+
+Prior to 5.8.0, Perl simply accepted the default floating point options of the
+C compiler, namely representing doubles with D_FLOAT on VAX and G_FLOAT on
+Alpha. Single precision floating point values are represented in F_FLOAT
+format when either D_FLOAT or G_FLOAT is in use for doubles. Beginning with
+5.8.0, Alpha builds now use IEEE floating point formats by default, which in
+VMS parlance are S_FLOAT for singles and T_FLOAT for doubles. IEEE is not
+available on VAX, so F_FLOAT and D_FLOAT remain the defaults for singles and
+doubles respectively. Itanium builds have always used IEEE by default. The
+available non-default options are G_FLOAT on VAX and D_FLOAT or G_FLOAT on
+Alpha or Itanium.
+
+The use of IEEE on Alpha or Itanium introduces NaN, infinity, and denormalization
+capabilities not available with D_FLOAT and G_FLOAT. When using one of those
+non-IEEE formats, silent underflow and overflow are emulated in the conversion
+of strings to numbers, but it is preferable to get the real thing by using
+IEEE where possible.
+
+Regardless of what floating point format you consider preferable, be aware
+that the choice may have an impact on compatibility with external libraries,
+such as database interfaces, and with existing data, such as data created with
+the C<pack> function and written to disk, or data stored via the Storable
+extension. For example, a C<pack("d", $foo)")> will create a D_FLOAT,
+G_FLOAT, or T_FLOAT depending on what your Perl was configured with. When
+written to disk, the value can only be retrieved later by a Perl configured
+with the same floating point option that was in effect when it was created.
+
+To obtain a non-IEEE build on Alpha or Itanium, simply answer no to the
+"Use IEEE math?" question during the configuration. To obtain an option
+different from the C compiler default on any platform, put in the option that
+you want in answer to the "Any additional cc flags?" question. For example, to
+obtain a G_FLOAT build on VAX, put in C</FLOAT=G_FLOAT>.