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?
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?
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.The
D
means "× 10???", or commonly known as thee
in1.e+300
in C#, but it's for double precision.The
DOUBLE PRECISION
statement just defines 3 variables to be of typedouble
.The
DATA
statementtranslates to
in C#. Hence you get
Since
INF
is so large I believe it means "Infinity", in that case it's better to use the real IEEE infinity (double INF = double.PositiveInfinity, ...
).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)
The code is declaring a constant called
INF
(i.e. infinity) with the value 10^300. You would want to substitutedouble.PositiveInfinity
ordouble.MaxValue
.