Hmmm, wenn man die Werte in ein Array packt, dann hat man das Problem mit den negativen Werten nicht.
Vorberechnen kann man di dann auch:
Deklaration:
werte : ARRAY[0..12] OF DINT :=1,1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600;
Implementation:
IF X > 12 THEN
Fact := -1;
ELSE
Fact := werte
END_IF