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