with Natural_Package;
package body Halstead_Fault_Rate is

    type Accuracy is digits 6;
    package New_Natural is new Natural_Package (Argument => Accuracy,
                                                Return_Value => Result);

    function Ln (Of_Value : in Accuracy) return Result renames New_Natural.Log;

    procedure Of_Any_Program_Unit
                 (P : in Physical_Lines_Count; B_Over_P : out Result) is

        A0 : constant Result := 0.005685;
        A1 : constant Result := 0.002626;
        A2 : constant Result := 0.00004947;

    begin
        -- Of_Any_Program_Unit

        B_Over_P := A0 + A1 * Ln (Accuracy (P)) + A2 * (Ln (Accuracy (P)) ** 2);

    exception
        -- to be changed after the demo
        when others =>
            B_Over_P := 0.0;

    end Of_Any_Program_Unit;

end Halstead_Fault_Rate;