Efficiency and suitability of using floats, decimals and integers

Everything about the fortran KIND system is a benefit. There are no practical downsides at all. This is one of the best features of the fortran language.

This is maybe a little to brief. The first expression is really more like

(real(64,kind(x)) * x) / real(3,kind(x))

That is, the compiler converts the integer values directly to the kind of the real number in the operation. The way it was written originally might be interpreted as two steps, first conversion to the default real kind, then conversion of that to kind(x), and then the multiplication or division operation. This distinction might be important if precision would be lost with real(i) but not with real(i,kind(x)).

If a programmer is inclined, he can write out the conversions explicitly as above, and the compiler will produce the exact same machine instructions. The only difference is that in one case it is explicit while in the other the default mixed-type and mixed-kind conversion rules are imposed implicitly.

The other feature to note is that if the programmer uses parentheses, then it is clear which order of operations and conversions is done. The compiler is required to respect the parentheses groupings (unlike C, which for a couple of decades was not required to do so). The compiler knows what to do, but a human programmer might not catch all of the subtleties, especially if he programs in several languages with sometimes different semantics and operator precedence. As with the explicit use of type and kind conversion operators, the redundant parentheses do not cost anything, the exact same machine instructions are generated in all cases. As a matter of style, sometimes you will see mixed type expressions written as

(((64) * x) / (3))

This is still using the fortran language default conversion semantics, but the extra parentheses in (64) and (3) are used to draw attention to the type conversion without being too verbose about it. This also occurs when variables are used rather than constants, particularly variables whose types might not be obvious from their names, e.g. (((a) * x) / (b)) for integer a and b.