home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.fortran      Putting John Backus on a giant pedestal      5,127 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 4,546 of 5,127   
   Robinn to Steve Lionel   
   Re: what is point of X=1.0D0*X+1.0D0*Y*W   
   27 Nov 23 07:14:33   
   
   From: 32s116e@gmail.invalid   
      
   Steve Lionel wrote:   
   > On 11/23/2023 5:29 AM, Woozy Song wrote:   
   >> Where X and Y are both real, and W is double precision. I presume they   
   >> wanted extra precision for the arithmetic, but then it gets quantised   
   >> back to 32-bit float.   
   >> By the way, this code came from a large oil company with a team of   
   >> programmers.   
   >   
   > The multiplication by 1.0D0 of each term has no effect whatsoever. If   
   > those were removed, the multiplication of Y*W would convert Y to double,   
   > due to "mixed-mode arithmetic" rules, before doing the operation. Then   
   > when X is added, it too would be converted to double before the   
   > addition. Then the whole result would be rounded back to single   
   > precision for the assignment.   
   >   
   > If I were writing this, I'd use the standard conversion intrinsic   
   > functions to make it clear what is happening, as I hate seeing implicit   
   > conversion. For example:   
   >   
   > X = REAL(DBLE(X)+(DBLE(Y)*W))   
   >   
      
   Yeah, I have been doing that recently. Compiled a package with -Wall,   
   and there were shit-tons of implicit conversions. Rather disturbing, as   
   default behaviour for real to integer is INT(), when in a few cases it   
   seemed NINT() would the correct behaviour.   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca