[an error occurred while processing this directive]

HP OpenVMS Systems

ask the wizard
Content starts here

Floating Point Data Validity?

» close window

The Question is:

 
How can I determine if a variable contains an invalid floating point value
 prior to use in Fortran, using VAX F & D type floats. Looking to avoid a
 process crash with the following error: "SYSTEM-F-FLTINV, floating invalid
 operation".
 
 


The Answer is :

 
  While pre-processing the floating point data is certainly a valid
  approach to solving the problem, it does slow the aggregate application
  performance when the data is most commonly found to be correct, when
  compared with no preemptive testing and a signal handler.
 
  While you could use cvt$convert_float -- as described in the OpenVMS RTL
  Library (LIB$) Manual for a test-conversion of the value -- and allow
  the routine to return a condition value of CVT$_NORMAL for valid
  floating-point format conversions and any of a variety of other values
  signaling various data errors -- the most appropriate approach here is
  likely to implement and utilize a signal handler to capture and repair
  the error should it arise.
 
  Fortran compilation with FORTRAN/FLOAT=IEEE/IEEE=DENORM_RESULTS or with
  /FLOAT=IEEE/IEEE=UNDERFLOW_TO_ZERO, or by isolating the potentially-bogus
  floating point math into one or more function calls, would be the
  approach used by the OpenVMS Wizard.  (This for IEEE float, obviously.)
 
  Specifically with VAX formats and format conversions, you will have to
  compile the particular code module(s) with the appropriate floating
  point format selected, or you will have to generate code which knows
  the data format and performs the appropriate conversion.  It is
  certainly possible to select the conversion at run-time (in-line code
  or shareable image activation or otherwise), but you are still required
  to know the format of the particular floating point data involved.
 
  The OpenVMS Wizard would encourage use of IEEE floating point formats
  on OpenVMS Alpha, as the native floating point format on OpenVMS I64
  is IEEE.  (On Alpha systems, there is no particular penalty for using
  the VAX formats, though -- as with any floating point conversions --
  certain of the conversions involved can result in a loss of precision.)

answer written or last revised on ( 24-NOV-2003 )

» close window