[J3] (SC22WG5.6289) WG5 letter ballot 1 on Fortran 2018 interpretations
Shterenlikht, Anton
anton.shterenlikht at hpe.com
Sun Oct 4 11:07:12 EDT 2020
Yes No Number Title
-Y- --- F18/001 ACOSH principal value specification is wrong
-Y- --- F18/002 Internal procedures in generic interface blocks
-Y- --- F18/003 Pointer association of component of non-definable selector
-Y- --- F18/004 Program execution sequence with failed images
-Y- --- F18/005 Does INPUT_UNIT really identify the same unit as *?
-Y- --- F18/006 Connection of INPUT_UNIT on different images
-Y- --- F18/008 Contradictory assumed-rank requirements
-Y- --- F18/009 Bad examples in IEEE_ARITHMETIC functions
-Y- --- F18/010 Categories of pure procedures
-Y- --- F18/011 Categories of elemental procedures
-Y- --- F18/012 Internal procedure in a generic interface
-Y- --- F18/013 TEAM_NUMBER arguments and intrinsic function are ambiguous
-Y- --- F18/014 Type of OPERATION arguments to the REDUCE intrinsic
-C- --- F18/015 Example in C.6.8 is wrong
-Y- --- F18/016 Host association changes in Fortran 2018
-Y- --- F18/017 Final subroutine invocation order
-Y- --- F18/018 Public namelist and private variable
I have 2 comments on this example code.
Comment 1
---------
21 ! Keep 1% spare images if we have a lot, just 1 if 10-199 images,
22 ! 0 if <10.
23 images_spare = MAX(NUM_IMAGES()/100,0,MIN(NUM_IMAGES()-10,1))
There are 2 problems with this comment and with this code:
1. If NUM_IMAGES() returns 10, images_spare will be 0, not 1.
Only when NUM_IMAGES() is 11, will images_spare becomes 1.
Either the comment must be changed,
or the code should be changed to "MIN(NUM_IMAGES()-9,1)".
2. The use of ",0" in the middle of the expression
does not achieve anything, and is only confusing.
The output of NUM_IMAGES() is non-negative,
hence NUM_IMAGES()/100 is non-negative,
so the result of the expression is unchanged
if that ",0" is removed:
images_spare = MAX( NUM_IMAGES()/100, MIN(NUM_IMAGES()-10,1) )
I prefer to rewrite this line explicitly as:
images_spare = 0
if ( NUM_IMAGES() .GE. 10 ) images_spare = 1
if ( NUM_IMAGES() .GE. 200 ) images_spare = NUM_IMAGES()/100
The example is very complex already - no need to overcomplicate
it further.
Comment 2
---------
Variable name "team_number" is a poor choice because we
have intrinsic function TEAM_NUMBER.
It would be more clear to use this intrinsic in line 88,
i.e. replace
88 IF (team_number == 1) THEN
to
88 IF ( TEAM_NUMBER() == 1) THEN
and give the variable a different name, e.g. "tnum" or "team_num".
More information about the J3
mailing list