Modern variable precision and integer multipliers

Click For Summary

Discussion Overview

The discussion revolves around the compatibility of older Fortran syntax, particularly the use of real*8, with modern Fortran environments and standards. Participants explore issues related to double precision calculations, implicit data conversions, and the implications of using simpler definitions for constants like pi.

Discussion Character

  • Technical explanation
  • Debate/contested

Main Points Raised

  • One participant questions whether using real*8 will maintain full double precision in calculations, particularly when using integer values in arithmetic operations.
  • Another participant suggests that double precision typically provides 15 digits of precision, but notes that all operands must fall within this range to avoid precision issues.
  • Concerns are raised about the compatibility of real*8 with newer Fortran compilers, with a request for clarification on whether this older syntax is still supported.
  • There is a discussion about whether a simpler definition of pi affects its precision, with one participant suggesting that testing both definitions could provide insight.

Areas of Agreement / Disagreement

Participants express uncertainty regarding the compatibility of real*8 with modern compilers and whether using simpler definitions for constants like pi results in any loss of precision. No consensus is reached on these issues.

Contextual Notes

Participants mention implicit data conversions and the potential for precision loss when mixing different data types, but do not resolve the implications of these conversions in the context of the discussed code examples.

Who May Find This Useful

This discussion may be useful for programmers working with Fortran, particularly those transitioning from older syntax to modern standards, and those interested in precision issues in numerical computations.

avikarto
Messages
56
Reaction score
9
I learned Fortran from ancient people who disregard modern standards. As such, my code consists mainly of that older syntax. I am wondering how well this meshes with current Fortran environments, specifically regarding double precision calculations. This comes up mainly because I have been told that real*8 and similar declarations should be abandoned in favor of KIND.

For example, in the following code section
Fortran:
real*8 x,y,z
x=12.3456
y=2*x
z=2.d0*x

will y maintain full double precision, or will a statement like z be required?

Similarly, if the fractional nature of the initial variable is defined only implicitly,
Fortran:
real*8 pi,y,z
pi=4*atan(1)
y=2*pi
z=2.d0*pi

does this change the nature of y or z?

Or, for that matter, does pi maintain an appropriate value here instead of being declared as pi=4.d0*atan(1.d0)?

Thanks.
 
Technology news on Phys.org
If I understand what you are asking: can I use what seems to be an integer value and apply some arithmetic operator to it on a double precision variable without losing precision? In general, yes. Double precision on most systems is 15 digits of precision. That means the two operands and the result all have to fall within those bounds, or things may go wonky, precision-wise.

Promotion: from http://www.cs.uwm.edu/~cs151/Bacon/Lecture/HTML/ch06s09.html FORTRAN class notes.
Implicit Data Conversions
Promotions occur when a two different data types are operands to a mathematical operator. In all cases, the value of the lower ranking type is converted to the higher ranking type.

  1. double complex [ complex(8) ]
  2. complex [ complex(4) ]
  3. double precision [ real(8) ]
  4. real [ real(4) ]
  5. integer(8)
  6. integer [ integer(4) ]
  7. integer(2)

Promotion is defined as taking the variable with least precision and boosting it up to the precision of the other variable.
 
Specifically, is real*8 still fully compatible this way with newer version compilers? Also, do I lose anything with my simpler definition of pi?
 
avikarto said:
Specifically, is real*8 still fully compatible this way with newer version compilers? Also, do I lose anything with my simpler definition of pi?
You can always run a test. Calculate π using REAL*8 and calculate it using the KIND parameter. Compare the two results.
 

Similar threads

  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 25 ·
Replies
25
Views
4K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 20 ·
Replies
20
Views
3K
  • · Replies 59 ·
2
Replies
59
Views
12K
  • · Replies 8 ·
Replies
8
Views
4K
  • · Replies 20 ·
Replies
20
Views
2K
  • · Replies 8 ·
Replies
8
Views
2K