Numerical C

Mark Plotnick mp at whuxle.UUCP
Sat Apr 28 10:37:23 AEST 1984


mark at elsie asks

    BTW: What is the origin of the double-precision only nature of C?

Since several people have asked about this, here's the answer from
the archives.  Apologies to those who have already seen it.

    From physics!alice!research!dmr Wed Sep  8 23:22:25 1982
    Subject: float/double in C
    Newsgroups: net.unix-wizards
    Several people have correctly quoted the manual as calling for evaluation
    of expressions on (single-precision) floats in double precision.  The
    rule was made for 3 reasons.
    
    1) To make certain that floating-point function arguments and return values
       were always double (thus avoiding multiple library routines and constant
       need for casts.)
    
    2) Because the PDP-11 makes it horribly difficult to mix modes otherwise
       (yes, I admit it).
    
    3) Because it is numerically more desirable to evaluate single-precision
       expressions in double precision, then truncate the result.
    
    These are in order of importance.  Now, the people who actually use C for
    numerical work seem to feel that on the VAX, at least, they would gladly
    give up reason 3 in favor of increasing the speed of evaluation of expressions
    involving single-precision numbers.  I am inclined to look kindly on this
    reasoning, providing that the first reason above (which is paramount) is
    observed.  That is, if one wants to compile
    	double a; float b,c;
    	a = b+c;
    into
    	addf3	b,c,r0
    	cvtfd	r0,a
    one has committed a very venial sin.  However, the sin would be mortal
    if one got the wrong answer from sin(b) where b was declared "float."
    
    The real problem with the VAX compiler that was originally complained
    about is that through a bug it had the worst of both worlds.  It did
    the arithmetic in single precision and also generated useless conversion
    instructions that made the whole calculation slower than if it had been
    double in the first place.  I understand that this bug has been fixed
    in recent versions.
    
    		Dennis Ritchie
    
    P.S.  I am quite aware that reasons 1,2,3 above can also be adduced
    in a discussion of shorts vs. longs.  That is a whole other story.
    
    P.P.S.  The sinning pun above actually was unintended-- I noticed it only
    during proofreading.
    
    



More information about the Comp.lang.c mailing list