# #This directory contains the package generic_elementary_functions. #We have also provided a portable version of the package #generic_primitive_functions. Because the primitives are slow #(it does not used "represenation" facilities), the resulting #elementary functions are not efficient. Eventually, efficient #generic_primitive_functions should be available in each #system. In particular, if your system already has a tailored implementation #of generic_primitive_functions, you should definitely use it. # #[Added by Dritz: That is, you should substitute your implementation of #generic_primitive_functions for the one in GPF_b.a. #WARNING! The body contained here is incomplete. In particular, #the function Remainder will not work on a hexadecimal machine; it will #raise Program_Error. On binary machines, it is OK.] # #[Another comment by Dritz: We recently discovered that the implementation of #the elementary function EXP has a minor error in it. The error will not not #cause inaccurate results; rather, it will cause inefficiency in a rare case. #Specifically, on a DEC VAX for which D-format has been enabled, and when #GENERIC_ELEMENTARY_FUNCTIONS is instantiated with a type whose representation #is D-format, the approximation will be carried out internally in H-format (33 #digits), using a polynomial appropriate for 15 digits, rather than in D-format #(reported as 9 digits due to Ada's 4*B Rule, but actually 16). This will be corrected in future versions.] # #{Yet more: At one point, Dritz started to replace the raisings of #Constraint_Error in the argument prescreening steps (used to signal inevitable #overflow in the expansion functions, and at poles of certain other functions) #by computations that must overflow or divide by zero. The purpose of this was #to make the code portable to IEEE environments where a (future) IEEE binding #was being employed, where infinities could (would) be generated instead. #Tang convinced Dritz not to do this until such time as an IEEE binding is #actually available and could be used, arguing that if nonstandard modes are #in effect, blindly overflowing or dividing by zero might not generate an #infinity. We cannot really know what to do until we see how the future IEEE #binding modifies or interprets the statements about overflow and about the #behavior of functions at poles in the GEF standard. # #Below is the compilation order expressed in Verdix commands. #[See further comments by Dritz at the end.] # ada -v EXCP_s.a # ada -v GPF_s.a ada -v GPF_b.a # ada -v GEF_s.a ada -v GEF_b.a # # the order below is unimportant # #ada -v g_Aco.a #ada -v g_Acosh.a #ada -v g_Acoth.a #ada -v g_Asinh.a #ada -v g_Asn.a #ada -v g_Atanh.a #ada -v g_Atn.a #ada -v g_Cos.a #ada -v g_Cosh.a #ada -v g_Cot.a #ada -v g_Coth.a #ada -v g_Exp.a #ada -v g_Log.a #ada -v g_Sin.a #ada -v g_Sinh.a #ada -v g_Sqrt.a #ada -v g_Tan.a #ada -v g_Tanh.a # ada -v g_*.a # #ada -v kf_AcoCy.a #ada -v kf_AsnCy.a #ada -v kf_Atanh.a #ada -v kf_AtnCy.a #ada -v kf_AtnSm.a #ada -v kf_Cos.a #ada -v kf_CosCy.a #ada -v kf_CotCy.a #ada -v kf_Em1.a #ada -v kf_Em1Sm.a #ada -v kf_L1p.a #ada -v kf_L1pSm.a #ada -v kf_LogB.a #ada -v kf_Power.a #ada -v kf_R1pSm.a #ada -v kf_Sin.a #ada -v kf_SinCy.a #ada -v kf_Sqrt.a #ada -v kf_TanCy.a # ada -v kf_*.a # #ada -v kp_Atn.a #ada -v kp_Exp.a #ada -v kp_Log.a #ada -v kp_LogPw.a #ada -v kp_Pi2Rd.a # ada -v kp_*.a # # #[The library defined by this directory should be compiled first, because # it does not depend on any other library. The easiest way to do that on # a Verdix-based system is: # a.mklib # a.make -f *.a #]