Fortran Solving Negative Infinity in Fortran Calculation

  • Thread starter Thread starter nguyenthanhlam
  • Start date Start date
  • Tags Tags
    Fortran Infinity
AI Thread Summary
The discussion revolves around a user encountering negative infinity in the output of their calculations for FAMAX and FPBPMAX. The user, Lam, is trying to understand why this occurs, especially since they expected NaN or positive infinity instead. The calculations involve the use of arrays for FAMAG, FX, FY, and FZ, with FAMAX and FPBPMAX being dimensionless. Key points include confusion over the variable types, as FAMAG is initially treated as a single variable before being used as an array. A suggestion is made that the assignment to FAMAG should specify an array index, which is crucial for proper operation. The discussion highlights that if the MAXVAL function encounters an array of NaNs, it will return negative infinity, which Lam confirms through testing. This indicates a potential issue with how the MAXVAL function is implemented, particularly in relation to IEEE floating point arithmetic, where comparisons involving NaN yield unexpected results.
nguyenthanhlam
Messages
9
Reaction score
0
Dear all,

I can not figure out why I got negative infinity in my output, so please help. Here is my calculation for FAMAX:

FAMAG=SQRT(FX**2+FY**2+FZ**2)

FAMAX=MAXVAL(FAMAG(1:NATOM))

and for FPBPMAX:

FMAGPBP(1:NSYN)=SQRT(FXGTASE(1:NSYN)**2+FYGTASE(1:NSYN)**2+FZGTASE(1:NSYN)**2)

FPBPMAX=MAXVAL(FMAGPBP(1:NSYN))

FMAGPBP(1:NSYN)=SQRT(FXTPASE(1:NSYN)**2+FYTPASE(1:NSYN)**2+FZTPASE(1:NSYN)**2)

FPBPMAX=MAX(MAXVAL(FMAGPBP(1:NSYN)),FPBPMAX)

FMAGPBP(1:NSYN)=SQRT(FXEDASE(1:NSYN)**2+FYEDASE(1:NSYN)**2+FZEDASE(1:NSYN)**2)

FPBPMAX=MAX(MAXVAL(FMAGPBP(1:NSYN)),FPBPMAX)

I expected it crash and got either NaN or Infinity for FAMAX and FPBPMAX at some point. But what I did not expect was FAMAX and FPBPMAX got NEGATIVE infinity when it crashed. Does anyone know why?

Thanks,

Lam
 
Last edited:
Technology news on Phys.org
In the first line, FAMAG is used as a single variable; in the next line, FAMAG all of a sudden has become an array variable. This sudden change can be very confusing. Was FAMAG originally dimensioned as an array variable?
 
SteamKing said:
In the first line, FAMAG is used as a single variable; in the next line, FAMAG all of a sudden has become an array variable. This sudden change can be very confusing. Was FAMAG originally dimensioned as an array variable?

FX,FY,FZ, FAMAG are arrays, but FAMAX is dimensionless. I know I should have used clearly different names to avoid confusion.

Again, FMAGPBP is an array, FPBPMAX is dimensionless.

Lam
 
I think when you assign a value to FAMAG in the first line, you have to assign it to a particular location in the array. You can't write FAMAG = some expression, when you need to write FAMAG (array_index) = some expression.
 
SteamKing said:
I think when you assign a value to FAMAG in the first line, you have to assign it to a particular location in the array.

A statement like FAMAG =SQRT(FX**2+FY**2+FZ**2) should work in Fortran 90/95 , so long as FAMAG, FX, FY, FZ are all arrays with the same dimensions. it is equivalent to a loop (or nested loops fur multi-dimension arrays) to operate on each element of the arrays.

The only thing I can think of is something weird like:
Your implementation of the MAXvAL function starts by setting its return value to negative infinity, and then scans through the array to find larger numbers. But because of the curiosities of IEEE floating point arithmetic, comparisons involving NaN tend to always return "false" (in fact NaN is not even equal to NaN!) So the maximum value of an array consisting entirely of NaNs would be returned as negative infinity. (But if that is the case, it sounds like a bug to me).
 
AlephZero said:
A statement like FAMAG =SQRT(FX**2+FY**2+FZ**2) should work in Fortran 90/95 , so long as FAMAG, FX, FY, FZ are all arrays with the same dimensions. it is equivalent to a loop (or nested loops fur multi-dimension arrays) to operate on each element of the arrays.

The only thing I can think of is something weird like:
Your implementation of the MAXvAL function starts by setting its return value to negative infinity, and then scans through the array to find larger numbers. But because of the curiosities of IEEE floating point arithmetic, comparisons involving NaN tend to always return "false" (in fact NaN is not even equal to NaN!) So the maximum value of an array consisting entirely of NaNs would be returned as negative infinity. (But if that is the case, it sounds like a bug to me).

Yes FAMAG, FX, FY, FZ are in the same dimensions.

And your guessing is right. Maxval(array(1:n)) gives -Infinity if all the elements are NaN. I just did a simple test to confirm this. Thanks a lot.

Lam
 
Thread 'Is this public key encryption?'
I've tried to intuit public key encryption but never quite managed. But this seems to wrap it up in a bow. This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher. Is this how PKE works? No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.
I tried a web search "the loss of programming ", and found an article saying that all aspects of writing, developing, and testing software programs will one day all be handled through artificial intelligence. One must wonder then, who is responsible. WHO is responsible for any problems, bugs, deficiencies, or whatever malfunctions which the programs make their users endure? Things may work wrong however the "wrong" happens. AI needs to fix the problems for the users. Any way to...

Similar threads

Replies
7
Views
9K
Replies
6
Views
2K
Replies
2
Views
2K
Replies
2
Views
2K
Replies
10
Views
2K
Replies
4
Views
3K
Replies
1
Views
1K
Replies
24
Views
2K
Replies
10
Views
3K
Back
Top