А до которого знака требуется рассчитать-то?

Owen10.jpg

Код:
function fact: udint; //имя функции и тип данных выхода
    var_input //объявление входных переменных
        inVal : udint;
        index : udint;
    end_var
    
    var //объявление локальных переменных
        val : udint;
        fact1 : udint := 1;
        fact2 : udint := 0;
        fact3 : udint := 0;
        fact4 : udint := 0;
        fact5 : udint := 0;
        fact6 : udint := 0;
        fact7 : udint := 0;
        fact8 : udint := 0;
        delta : udint;
    end_var
    
    for val := 1 to inVal do
        fact1 := fact1 * val;
        fact2 := fact2 * val;
        fact3 := fact3 * val;
        fact4 := fact4 * val;
        fact5 := fact5 * val;
        fact6 := fact6 * val;
        fact7 := fact7 * val;
        fact8 := fact8 * val;
        
        delta := fact1 / 1000000;
        fact1 := fact1 - (delta * 1000000);
        fact2 := fact2 + delta;
        
        delta := fact2 / 1000000;
        fact2 := fact2 - (delta * 1000000);
        fact3 := fact3 + delta;

        delta := fact3 / 1000000;
        fact3 := fact3 - (delta * 1000000);
        fact4 := fact4 + delta;

        delta := fact4 / 1000000;
        fact4 := fact4 - (delta * 1000000);
        fact5 := fact5 + delta;

        delta := fact5 / 1000000;
        fact5 := fact5 - (delta * 1000000);
        fact6 := fact6 + delta;

        delta := fact6 / 1000000;
        fact6 := fact6 - (delta * 1000000);
        fact7 := fact7 + delta;

        delta := fact7 / 1000000;
        fact7 := fact7 - (delta * 1000000);
        fact8 := fact8 + delta;

    end_for
 
    case index of
        0: fact := fact1;
        1: fact := fact2;
        2: fact := fact3;
        3: fact := fact4;
        4: fact := fact5;
        5: fact := fact6;
        6: fact := fact7;
        7: fact := fact8;
    end_case    
 
end_function