[Info-vax] Roadmap

John Reagan xyzzy1959 at gmail.com
Sun Jan 6 15:00:26 EST 2019


On Sunday, January 6, 2019 at 11:16:49 AM UTC-5, geze... at rlgsc.com wrote:
> On Sunday, January 6, 2019 at 6:56:16 AM UTC-5, geze... at rlgsc.com wrote:
> > On Saturday, January 5, 2019 at 9:19:06 PM UTC-5, Arne Vajhøj wrote:
> > > On 1/5/2019 8:23 PM, Dave Froble wrote:
> > > > On 1/5/2019 1:48 PM, John Reagan wrote:
> > > >>        The format of the REAL_SIZE qualifier is as follows:
> > > >>
> > > >>           /REAL_SIZE={SINGLE}
> > > >>                      {DOUBLE}
> > > >>                      {GFLOAT}
> > > >>                      {SFLOAT}
> > > >>                      {TFLOAT}
> > > >>                      {XFLOAT}
> > > 
> > > >> So Dave's "OPTION SIZE = ( INTEGER WORD , REAL DOUBLE )" which was 
> > > >> originally used to say "I want extra precision on my REALs" locks into 
> > > >> you Dfloat on Itanium.
> > > 
> > > >> What a horrible design decision.  So people who didn't say anything on 
> > > >> Itanium, get fast Sfloat but the moment you want more precision and 
> > > >> blindly say "REAL DOUBLE", you get your extra precision (but no extra 
> > > >> range) and a performance hit.
> > > 
> > > > Maybe the D_FLOAT isn't so bad, if you're not doing a lot of work with it.
> > > 
> > > Basic is probably not a favorite language for number crunchers, so
> > > most likely the practical impact is minimal.
> > > 
> > > It is possible though to create an example showing a difference:
> > > 
> > > $ type dbl.bas
> > >          option type = explicit
> > >          declare long constant n = 10000000
> > >          external long function pas$clock2
> > >          dim real x(n)
> > >          declare long j, i, t1, t2
> > >          t1 = pas$clock2()
> > >          for j = 1 to 10
> > >            x(1) = 1.0
> > >            for i = 2 to n
> > >              x(i) = (x(i - 1) * 2 + 2) / 2
> > >            next i
> > >          next j
> > >          t2 = pas$clock2()
> > >          print using "#### (##########.#)"; (t2 - t1); x(n)
> > >          end
> > > $ bas/real=double dbl
> > > $ lin dbl
> > > $ r dbl
> > > 5810 (  10000000.0)
> > > $ bas/real=tfloat dbl
> > > $ lin dbl
> > > $ r dbl
> > > 3000 (  10000000.0)
> > > 
> > > (forgive me for any basic Basic blunders - it is not a language
> > > I am using)
> > > 
> > > Arne
> > 
> > Arne,
> > 
> > BASIC is still popular in some quarters, where it is used for serious systems. I have had more than a few clients who meet this description.
> > 
> > In many ways, interoperability of one form or another is the most important use of the different formats. Some have historical data files. Some have mixed-architecture OpenVMS clusters. Others exchange binary data with other systems, on the same or different machine, of the same or different organization.
> > 
> > OpenVMS standards also mean that these differences can arise due to different parts of the same software image being written in different languages.
> > 
> > It is thus not a debate of "which is better", but a debate of "which is needed". This situation argues for provision of both defaults (e.g., compiler switches, implicit declarations) and explicit data types, as well as the obvious cross-type conversions.
> > 
> > - Bob Gezelter, http://www.rlgsc.com
> 
> A clarification:
> 
> C/C++ has had long-time challenges with the use of keywords such as "long", "double", etc.
> 
> In the case of floating point, perhaps all (repeat ALL) OpenVMS compilers should support a non-standard keyword "IEEE754" as an adjunct to REAL and DOUBLE. A "C"-ish example would be:
> 
>           IEEE754 float X;
>           IEEE754 double Y;
> 
> in FORTRAN:
> 
>           IEEE754 REAL*4 X;
>           IEEE754 REAL*8 Y;
> 
> This would allow the clarity in documenting mixed representation programs, e.g., programs which read/write one format while working internally in another. Often, such situations are, as I have noted elsewhere, not a voluntary choice. Historical data exists, libraries expect certain formats, etc.
> 
> Doing this consistently across multiple compilers is, I admit, a chore. However, it is also a problem best addressed in a consistent manner, than ad hoc for each different compiler.
> 
> My apologies to John for adding to his work queue.
> 
> - Bob Gezelter, http://www.rlgsc.com

Already done years ago for Pascal.

REAL - single-precision, compiler choice for format
DOUBLE - double-precision, compiler choice for format
QUADRUPLE - quad-preicsion, compiler choice for format
F_FLOAT
S_FLOAT (not on VAX)
D_FLOAT
G_FLOAT
T_FLOAT (not on VAX)
X_FLOAT (not on VAX)
H_FLOAT (VAX only)

and matching %?_FLOAT directives to give an explicit format to floating constants.  It lets you use %F_FLOAT to call LIB$WAIT on OpenVMS Itanium while still using the default of S_FLOAT everywhere else.

And Pascal allows both VAX and IEEE formats to be used in the same routine but you can't let them touch. :)




More information about the Info-vax mailing list