En antes de que poder centrarnos derivados direccionales y los gradientes, necesitamos introducir un marco general en el cual poder describir exacto estos dos modos de A.D. Esencialmente, identificamos los programas con secuencias de instrucciones, ellos mismos identificado con funciones compuestas.
Los programas contienen estructuras de control, lo cual es esencialmente discreto y por lo tanto no diferenciable. Identificamos un programa como el conjunto de todas las secuencias de instrucciones posibles en tiempo de ejecución. Por supuesto hay muchas secuencias de ese tipo, y por lo tanto nunca las construimos todas explícitamente. El control es sólo cómo uno le indica al programa en ejecución cambiar de una secuencia a otra. Por ejemplo, este pequeño trozo de programa:
if (x <= 1.0) then printf("x too small\n"); else { y = 1.0; while (y <= 10.0) { y = y*x; x = x+0.5; } }
se ejecutará según el control como una de las secuencias de instrucciones siguientes:
printf("x too small\n"); y = 1.0; y = 1.0; y = y*x; x = x+0.5; y = 1.0; y = y*x; x = x+0.5; y = y*x; x = x+0.5; y = 1.0; y = y*x; x = x+0.5; y = y*x; x = x+0.5; y = y*x; x = x+0.5;
y así en adelante.
Cada uno de estas secuencias es "diferenciable". El nuevo programa generado por diferenciación automática contiene por supuesto un cierto control, tal que cada uno de sus secuencias de instrucciones en tiempo de ejecución calcula la derivada de la secuencia de instrucciones correspondiente en el programa inicial. Así, el programa diferenciado parecerá probablemente (sea por sobrecarga o por transformación del código fuente):
if (x <= 1.0) then printf("x too small\n"); else { y = 1.0; dy = 0.0; while (y <= 10.0) { dy = dy*x + y*dx; y = y*x; x = x+0.5; } }
Sucede a veces, como en este ejemplo, que el control en sí mismo depende de las variables diferenciadas. En ese caso, un cambio pequeño de los valores iniciales puede dar lugar a un cambio del control. Aquí, un cambio pequeño de x puede cambiar el número de las iteraciones del while loop, y la derivada no es definible. Con todo el nuevo programa generado por Diferenciación Automática entragará un resultado, y usar este derivada puede conducir a errores. Es decir el programa original, con control, es solamente diferenciable por trozos, y la mayoría de las actuales herramientas de A.D. no toman esto en cuenta correctamente. Esto es un problema de investigación abierto. Mientras tanto, simplemente asumimos que este problema sucede raramente La experiencia en programas verdaderos demuestra que esto es una suposición razonable.