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,704 of 5,127   
   Lynn McGuire to Steven G. Kargl   
   Re: Is there a way in Fortran to designa   
   03 Oct 24 14:32:28   
   
   From: lynnmcguire5@gmail.com   
      
   On 10/3/2024 10:02 AM, Steven G. Kargl wrote:   
   > On Thu, 03 Oct 2024 02:06:28 -0500, Lynn McGuire wrote:   
   >   
   >> On 10/2/2024 11:27 PM, Steven G. Kargl wrote:   
   >>> On Wed, 02 Oct 2024 14:30:48 -0500, Lynn McGuire wrote:   
   >>>   
   >>>> On 10/2/2024 2:00 AM, Lawrence D'Oliveiro wrote:   
   >>>>> On Tue, 1 Oct 2024 21:58:40 -0500, Lynn McGuire wrote:   
   >>>>>   
   >>>>>> I need many of my integers to be integer*8 in my port to 64 bit.  In   
   >>>>>> C/C++ code, I can say 123456L to mean a long long value, generally 64   
   >>>>>> bit.  Is there a corresponding way to do this in Fortran ...   
   >>>>>   
   >>>>>        integer(kind = 8), parameter :: bigval = 9223372036854775807_8   
   >>>>>        print *, bigval   
   >>>>>   
   >>>>> prints   
   >>>>>   
   >>>>>        9223372036854775807   
   >>>>   
   >>>> Thanks !   
   >>>>   
   >>>> I was afraid of that.  I will have to put _8 in about 100,000 lines of   
   >>>> my F77 code.  And the future conversion to C++ will need special handling.   
   >>>>   
   >>>   
   >>> If you 100,000 lines of C++ without a trailing 'L', you would   
   >>> need to add 'L' to get a long int.  You also only need to add   
   >>> '_8' (or 'L') to those values that would exceed huge(1) in   
   >>> magnitude as integer*4 is a proper subset of integer*8 and   
   >>> Fortran does conversion when required.   
   >>   
   >> If Fortran does an automatic conversion from I*4 to I*8, why does the   
   >> compiler gripe at me that the integer constant does not match the   
   >> subroutine argument type ?   
   >   
   > Well, to begin, you were talking about numeric literal constants.   
   > I doubt you add '_8' (or 'L') to all entities declared as 'integer*4'   
   > (or long int).   
   >   
   > integer*8 i ! 42 is integer*4 and automatically converted to integer*8   
   > i = 42      ! on assignment.   
   > i = 3_8 * 2 ! Mixed-mode math.  2 is magically converted to integer*8   
   >   
   > The compiler is not complaining.  It is informing you of an mismatch   
   > between an actual argument and the dummy argument.  If one is 'integer*4'   
   > and the other 'integer*8', you have 32 undefined bits.   
   >   
   > As the person who gave gfortran the -fdefault-integer-8 option, I hope   
   > your XXX kloc of code uses neither equivalence nor common blocks.   
      
   I have 197 common blocks included from dedicated files and a massive   
   number of equivalences all over the place.  Several of the equivalences   
   are actually in the common block files.  The equivalences have made the   
   eventual C++ conversion of the Fortran code tricky.   
      
   This code is 850,000 lines of F77 code and 50,000 lines of C++ code that   
   dates back to 1965 or so.  Half of the code is Fortran IV and half is   
   F77.  It has been ported to 12 ? different platforms, mostly mainframes   
   in the 1960s, 1970s, 1980s, and 1990s.   
      
   Lynn   
      
   --- 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