Search code examples
fortranprecisionbitfortran90

What does "real*8" mean?


The manual of a program written in Fortran 90 says, "All real variables and parameters are specified in 64-bit precision (i.e. real*8)."

According to Wikipedia, single precision corresponds to 32-bit precision, whereas double precision corresponds to 64-bit precision, so apparently the program uses double precision.

But what does real*8 mean?

I thought that the 8 meant that 8 digits follow the decimal point. However, Wikipedia seems to say that single precision typically provides 6-9 digits whereas double precision typically provides 15-17 digits. Does this mean that the statement "64-bit precision" is inconsistent with real*8?


Solution

  • As indicated in comments, real*8 isn't standard Fortran. This FAQ entry has more details. That said, once we're into the non-standard realm...

    The 8 refers to the number of bytes that the data type uses.

    So a 32-bit integer is integer*4 along the same lines. (But is also non-standard.)

    A quick search found this guide to Fortran data types, which includes:

    The "real4" statement specifies the variable names to be single precision 4-byte real numbers which has 7 digits of accuracy and a magnitude range of 10 from -38 to +38. The "real" statement is the same as "real4" statement in nearly all 32-bit computers.

    and

    The "real8" statement specifies the variable names to be double precision 8-byte real numbers which has 15 digits of accuracy and a magnitude range of 10 from -308 to +308. The "double precision" statement is the same as "real8" statement in nearly all 32-bit computers.