# Fortran Modern alternatives to historical features Arithmetic if statement

## Example

Arithmetic `if` statement allows one to use three branches depending on the result of an arithmetic expression

``````if (arith_expr) label1, label2, label3
``````

This `if` statement transfers control flow to one of the labels in a code. If the result of `arith_expr` is negative `label1` is involved, if the result is zero `label2` is used, and if the result is positive last `label3` is applied. Arithmetic `if` requires all three labels but it allows the re-use of labels, therefore this statement can be simplified to a two branch `if`.

Examples:

``````if (N * N - N / 2) 130, 140, 130

if (X) 100, 110, 120
``````

Now this feature is obsolete with the same functionality being offered by the `if` statement and `if-else` construct. For example, the fragment

``````    if (X) 100, 110, 120
100 print*, "Negative"
goto 200
110 print*, "Zero"
goto 200
120 print*, "Positive"
200 continue
``````

may be written as the `if-else` construct

``````if (X<0) then
print*, "Negative"
else if (X==0) then
print*, "Zero"
else
print*, "Positive"
end if
``````

An `if` statement replacement for

``````    if (X) 100, 100, 200
100 print *, "Negative or zero"
200 continue
``````

may be

``````if (X<=0) print*, "Negative or zero"
``````