Hallo,
der Baustein FACT liefert für 13 einen falschen Wert zurück.
Richtig wäre 6227020800, das ist aber mit DINT nicht darstellbar, deswegen wird 1932053504 zurückgeliefert.
Außerdem liefert FACT für negative Werte nicht -1 zurück, sondern die Fakultät des positiven Wertes.
Wäre es nicht effektiver, die Werte vorzuberechnen und mittels CASE auszuwählen?
CASE x OF
0: fact := 1;
1: fact := 1;
2: fact := 2;
3: fact := 6;
4: fact := 24;
5: fact := 120;
6: fact := 720;
7: fact := 5040;
8: fact := 40320;
9: fact := 362880;
10: fact := 3628800;
11: fact := 39916800;
12: fact := 479001600;
(* für 64Bit-Werte
13: fact := 6227020800;
14: fact := 87178291200;
15: fact := 1307674368000;
16: fact := 20922789888000;
17: fact := 355687428096000;
18: fact := 6402373705728000;
19: fact := 121645100408832000;
20: fact := 2432902008176640000;
*)
ELSE
fact_ad := -1;
END_CASE