Fortran [Fortran] Integer overflow for a real number?

Click For Summary
The discussion centers on a warning encountered while defining a real number in Fortran, specifically when attempting to assign the value of 2.5 multiplied by 10 raised to the power of 20. The warning indicates an integer overflow, despite the variable being declared as a real number. The issue arises because the compiler interprets the expression 10**20 as an integer calculation, leading to overflow since the maximum integer size is significantly smaller than 10**20. Attempts to resolve the issue by using the KIND setting for real numbers did not succeed, even with the maximum KIND value of 16, which should theoretically accommodate the value range. The solution was found in using E notation (r = 2.5E20), which Fortran recognizes as a valid representation for floating-point numbers, thus avoiding the overflow issue. An alternative expression, r = 2.5 * 10.0**20, would also work, as it ensures the calculation is treated as a real number operation.
avikarto
Messages
56
Reaction score
9
I am trying to define a real number as follows:
Fortran:
real*8 r
r=2.5*10**20

This results in the following warning:
r=2.5*10**20
1
Warning(131): Integer overflow at 1​

First off, I am not even declaring it as an integer, yet the warning is named as such.
After searching around for similar errors, and consulting the g95 manual, I decided to try out the KIND setting:
Fortran:
real(kind=10) r...
considering that (from the g95 manual):
"REAL(KIND=10) for x86-compatible systems. 19 digits of precision, value range 10^±4931"​
Since 20 is clearly less than 4931, I figured that would do it. It did not. I tried bumping the kind as high as the compiler would take it (16) and it still did not clear the warning. 16 even seems to be the appropriate choice of KIND, since
Fortran:
print*,selected_real_kind(20)
returns a value of 16.

I am at a loss for how to resolve this issue. It is strange though, my real*8 variables that are on the order of 10**(-30) work without issue. Any help would be appreciated. Thanks!
 
Technology news on Phys.org
avikarto said:
I am trying to define a real number as follows:
Fortran:
real*8 r
r=2.5*10**20
This should be written as
Code:
r = 2.5E20
Apparently the compiler is calculating 10**20 as in integer value, before multiplying by 2.5. This causes an overflow, assuming an integer is signed four bytes (maximum size is 2147483647). This is a lot smaller than 10**20.

avikarto said:
This results in the following warning:
r=2.5*10**20
1
Warning(131): Integer overflow at 1​

First off, I am not even declaring it as an integer, yet the warning is named as such.
After searching around for similar errors, and consulting the g95 manual, I decided to try out the KIND setting:
Fortran:
real(kind=10) r...
considering that (from the g95 manual):
"REAL(KIND=10) for x86-compatible systems. 19 digits of precision, value range 10^±4931"​
Since 20 is clearly less than 4931, I figured that would do it. It did not. I tried bumping the kind as high as the compiler would take it (16) and it still did not clear the warning. 16 even seems to be the appropriate choice of KIND, since
Fortran:
print*,selected_real_kind(20)
returns a value of 16.

I am at a loss for how to resolve this issue. It is strange though, my real*8 variables that are on the order of 10**(-30) work without issue. Any help would be appreciated. Thanks!
 
  • Like
Likes avikarto
That did it, thanks Mark. Didn't realize that fortran could handle E notation.
 
avikarto said:
That did it, thanks Mark. Didn't realize that fortran could handle E notation.
This should also work: r = 2.5 * 10.0**20, but that's the same as what I wrote using the E notation.
 
Learn If you want to write code for Python Machine learning, AI Statistics/data analysis Scientific research Web application servers Some microcontrollers JavaScript/Node JS/TypeScript Web sites Web application servers C# Games (Unity) Consumer applications (Windows) Business applications C++ Games (Unreal Engine) Operating systems, device drivers Microcontrollers/embedded systems Consumer applications (Linux) Some more tips: Do not learn C++ (or any other dialect of C) as a...

Similar threads

  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 9 ·
Replies
9
Views
5K
  • · Replies 5 ·
Replies
5
Views
5K
  • · Replies 3 ·
Replies
3
Views
2K
Replies
11
Views
15K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 12 ·
Replies
12
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K