Based on: Eliminating Clutter - Exercises by Charles Severance, Kevin Dowd
¿Cómo simplificaría usted el siguiente ciclo condicional?
DO I=1,N
A(I) = A(I) * B
IF (I .EQ. N/2) A(I) = 0.
ENDDO
Cronometre el siguiente ciclo en su computadora, con y sin la condición. Ejecútelo con tres conjuntos de datos: uno con todos los valores A(I) menores que SMALL, uno con todos los valores A(I) mayores que SMALL, y un tercero dividido en partes iguales. ¿Cuándo es mejor dejar la prueba en el ciclo, si es el caso?
PARAMETER (SMALL = 1.E-20)
DO I=1,N
IF (ABS(A(I)) .GE. SMALL) THEN
B(I) = B(I) + A(I) * C
ENDIF
ENDDO
Escriba un programa sencillo que invoque a una subrutina sencilla en su ciclo interno. Cronometre la ejecución del programa. Luego dígale al compilador que compile la rutina en línea, y cronometre nuevamente. Finalmente, modifique el código para realizar las operaciones en el cuerpo del ciclo, y cronometre el código. ¿Cuál opción se ejecutó más rápido? Puede que deba revisar el código máquina generado para imaginar el porqué.