Many of the recommendations apply regardless of the programming environment, e.g.,
One of the consequences of that is that an attempt to evaluate an expression like (- 8)1/3 will typically result in an error, as shown in the following FORTRAN example:
| FORTRAN code | REAL X,Y
X=-8.0
Y=1.0/3.0
WRITE (*,*) 'The value of X**Y=',X**Y
END
|
| output | run-time error M6201: MATH - **: DOMAIN error |
Other important paragraphs in this subsection are these dealing with avoiding mixed mode, precision, limiting iterations, and floating point equality.
| FORTRAN code | INTEGER N
PARAMETER (N=10)
INTEGER I
REAL ERROR,H,X,Y
X = 0.5
H = 1.0
DO 10 I=1,N
H = 0.25 * H
Y = (SIN(X+H) - SIN(X))/H
ERROR = ABS(COS(X) - Y)
WRITE (*,*) I,H,Y,ERROR
10 CONTINUE
END
|
| output | 1 2.500000E-01 8.088529E-01 6.872965E-02
2 6.250000E-02 8.620341E-01 1.554842E-02
3 1.562500E-02 8.738014E-01 3.781152E-03
4 3.906250E-03 8.766440E-01 9.386062E-04
5 9.765625E-04 8.773483E-01 2.342581E-04
6 2.441406E-04 8.775240E-01 5.854360E-05
7 6.103516E-05 8.775679E-01 1.461498E-05
8 1.525879E-05 8.775789E-01 3.647725E-06
9 3.814697E-06 8.775817E-01 9.059112E-07
10 9.536743E-07 8.775823E-01 2.502601E-07
|
The same pseudocode implemented in Mathcad:
| Mathcad code |
|
| output | ![]() |
Note the difference between the values from the two implementations. The difference can be attributed to Mathcad's numbers being implemented as 64-bit floating point numbers, just like FORTRAN's DOUBLE PRECISION numbers on IBM-PC-compatibles.
If in the FORTRAN code above, we change REAL to DOUBLE PRECISION, then similar output will result.