tags:

views:

80

answers:

4

I'm translating some Fortran to our C# app and I'm trying to figure out what a bit of Fortran means at the top of a function.

  DOUBLE PRECISION INF, DMIN, D12

  DATA INF/1.D+300/

What would the value of INF be?

Thanks

+2  A: 

The code is declaring a constant called INF (i.e. infinity) with the value 10^300. You would want to substitute double.PositiveInfinity or double.MaxValue.

Gabe
+1  A: 
KennyTM
+1  A: 

The value would be 1.0e300, but I'm sure that what is intended is that it be set to the largest double value that can be expressed on the current CPU. so in C# that would be double.PositiveInfinity rather than some hard-coded value.

John Knoeller
+1  A: 

The code is in the style of FORTRAN IV or FORTRAN 77 rather than Fortran 90/95/2003.

Double Precision declares the variables to be double the precision of a regular real. I'm not sure that the FORTRAN standards of that era were extremely precise about what that meant, since there was a greater variety of numeric hardware then. Today, it will virtually always obtain an 8-byte real. The Data statement initializes the variable INF. The use of "D" in the constant "1.D+300", instead of E, is old FORTRAN to specify that the constant is double precision.

The Fortran (>=90) way of obtaining the largest positive double is:

INF = huge (1.0D+0)

M. S. B.