Es simple. En informática, a diferencia de las matemáticas 100% teóricas, tienes que considerar también que existen límites de rango y de precision. En este caso el tipo entero que usas es de 16 bits con signo (integer), por lo tanto no puede representar un valor mayor a 32767, luego como 8! es mayor al limite anterior tu programa no funcionará a menos que utilices un tipo de dato aplicable al problema que tenga mayor capacidad, por ejemplo un tipo de numero flotante como double.
Nota: Dependiendo del compilador el tipo integer puede ser de 16 o 32 bits, en este caso claramente es de 16bits.