(j3.2006) Question about DIM

Cohen Malcolm malcolm
Thu Jan 14 00:50:47 EST 2016


>Without the internal checks, there is little point to DIM.

DIM does not have any internal checks, and none are possible when the result 
is out of range.  You are arguing that the standard should mandate one 
particular wrong answer; this is *NOT* an improvement on the current 
situation, indeed it is a disimprovement since the error is detectable at 
runtime.

> The result for DIM involves a decision:
>
>if (X-Y > 0) then
>  result = x-y
>else
>  result = 0
>end if

No, that is not the case.  The wording of DIM is

    "The value of the result is the maximum of X ? Y and zero."

This is a mathematical definition, not a piece of Fortran code.  There is no 
ambiguity here - when X>=Y the result is specified to be X-Y, and if that is 
out of range that means the program is invalid.

(When the result is in range the result can be computed with no branching on 
many machines, but that's a horse of a different colour.)

Back on the erroneous Fortran code which does not appear in the standard 
anyway:
>One could argue that if X-Y is out of bounds, it is unreasonable to claim 
>that X-Y > 0 evaluates to true.  Rather, in that case the result is 0, 
>which is certainly a representable value.

Since you are arguing Fortran code, if X-Y is out of bounds then it is 
invalid to compute it.  Rather, in that case the result is anything from 
program termination to playing Jingle Bells through the speakers.

>It is probably the case that no one has looked at DIM since we made X-Y>0 a 
>valid syntax for a logical expression.  Which is why I proposed alternate 
>wording that avoids using the expression.

But since the standard ***does not use that expression*** we have already 
successfully avoided it.

Cheers,
-- 
........................Malcolm Cohen, Nihon NAG, Tokyo. 




More information about the J3 mailing list