separate ( Generic_Elementary_Functions ) function Cos( X : Float_Type ) return Float_Type is -- On input, X is a floating-point value in Float_Type; -- On output, the value of cos(X) (the cosine of X) is returned. Y, R1, R2, Z : Common_Float; I_Flag, SC_Flag, PM_Flag : Quadrant_Flag; Large_Threshold : constant Common_Float := Common_Float(Radix)**(Float_Type'Machine_Mantissa/2); Two_Pi : constant Common_Float := 6.28318_53071_79586_47692_52867_66559_00576_83943_38798_75016; begin -- Argument reduction by KP_Pi2Rd Y := abs( Common_Float( X ) ); if ( abs(Y) > Large_Threshold ) then Y := Y rem Two_Pi; Y := abs(Y); end if; KP_Pi2Rd( Y, R1, R2, I_Flag ); I_Flag := Quadrant_Flag( (Integer(I_Flag)+1) mod 4 ); SC_Flag := I_Flag mod 2; PM_Flag := (I_Flag - SC_Flag) / 2; if (SC_Flag = 0) then Z := KF_Sin( R1, R2 ); else Z := KF_Cos( R1, R2 ); end if; if (PM_Flag = 1) then Z := -Z; end if; return( Float_Type( Z ) ); end Cos;