Fixing Fortran 77 Output Bugs with Negative Exponents

  • Context: Fortran 
  • Thread starter Thread starter conquertheworld5
  • Start date Start date
  • Tags Tags
    Fortran Output
Click For Summary
SUMMARY

The discussion focuses on a bug encountered in Fortran 77 when outputting floating-point numbers with negative exponents. Specifically, the user is experiencing an issue where the 'E' character is omitted from the output for negative exponents with three digits, resulting in incorrect formatting such as ".223414-200" instead of ".23414E-200". This behavior aligns with the Fortran 77 standard, which specifies that the 'E' is omitted for exponents whose modulus exceeds 99. The user seeks advice on both the cause of this issue and potential solutions to ensure proper output formatting.

PREREQUISITES
  • Understanding of Fortran 77 syntax and formatting
  • Familiarity with floating-point representation in programming
  • Basic knowledge of legacy code maintenance
  • Experience with debugging output issues in Fortran
NEXT STEPS
  • Research Fortran 77 output formatting rules
  • Explore alternative formatting options in Fortran 77
  • Investigate the implications of floating-point precision in Fortran
  • Learn about debugging techniques for legacy Fortran code
USEFUL FOR

Fortran developers, legacy code maintainers, and anyone troubleshooting output formatting issues in scientific computing applications.

conquertheworld5
Messages
22
Reaction score
0
I recently inherited some legacy code written in fortran77 which I'm going to be modifying quite a bit, and at this stage I find that I'm continually getting stuck on small fortran quirks... Just wondering if I could get some advice on this particular problem.

I'm outputting the values of several arrays one element at a time since I'm already looping over all the elements for other reasons:


Code:
write(5,101) x(j),z(i),dp(i,j)
101 format(2e15.5,1e15.5)


I get some nice columns as expected in my ascii file:
Code:
.10790E+03   .92222E+02  .53132E-02
.10790E+03   .94909E+02  .12401E-12
.10790E+03   .97909E+02  .43214E-50

The problem is that the third column occasionally has values that have 3-digit negative exponents and for some reason the E is being left out. So instead of .23414E-200, I'm getting .223414-200. I've tried increasing the number of characters and the number of significant digits in the format statement but no matter what I do, it doesn't print the E for any negative exponent with more than two digits.
Anyone know:
1) Why this is happening?
2) How to get it to print the E?

Also, I recognize that these are SMALL numbers, and they probably reflect some other problem in the code somewhere. So when I figure that out, I probably won't have to worry about this problem, but it's bugging me that I can't get the E to print with the numbers as is...
 
Technology news on Phys.org
I think its part of the Fortran 77 standard to do this. If you look here: http://www.fortran.com/F77_std/rjcnf0001-sh-13.html#sh-13.5.9.2.2 the table indicates that the 'e' is omitted for exponents whose modulus is greater than 99
 
Thanks!
 

Similar threads

  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 8 ·
Replies
8
Views
5K
  • · Replies 3 ·
Replies
3
Views
4K
  • · Replies 29 ·
Replies
29
Views
6K
  • · Replies 9 ·
Replies
9
Views
4K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 4 ·
Replies
4
Views
1K
  • · Replies 22 ·
Replies
22
Views
5K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 6 ·
Replies
6
Views
3K