Prev | Up | Next | Back | Forward
TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help


G.2.4 Accuracy Requirements for the Elementary Functions

(1)
In the strict mode, the performance of Numerics.Generic_Elementary_Functions shall be as specified here.
Implementation Requirements
(2)
When an exception is not raised, the result of evaluating a function in an instance EF of Numerics.Generic_Elementary_Functions belongs to a result interval, defined as the smallest model interval of EF.Float_Type that contains all the values of the form f*(1.0+d), where f is the exact value of the corresponding mathematical function at the given parameter values, d is a real number, and |d| is less than or equal to the function's maximum relative error. The function delivers a value that belongs to the result interval when both of its bounds belong to the safe range of EF.Float_Type; otherwise,
(3)
(4)
(5)
The maximum relative error exhibited by each function is as follows:
(6)
(7)
(8)
(9)
The maximum relative error exhibited by the exponentiation operator, which depends on the values of the operands, is (4.0+|Right*log (Left)|/32.0)*EF.Float_Type'Model_Epsilon.
(10)
The maximum relative error given above applies throughout the domain of the forward trigonometric functions when the Cycle parameter is specified. When the Cycle parameter is omitted, the maximum relative error given above applies only when the absolute value of the angle parameter X is less than or equal to some implementation-defined angle threshold, which shall be at least Floor(EF.Float_Type'Machine_Mantissa/2) EF.Float_Type'Machine_Radix . Beyond the angle threshold, the accuracy of the forward trigonometric functions is implementation defined.
(11)
The prescribed results specified in A.5.1 for certain functions at particular parameter values take precedence over the maximum relative error bounds; effectively, they narrow to a single value the result interval allowed by the maximum relative error bounds. Additional rules with a similar effect are given by the table below for the inverse trigonometric functions, at particular parameter values for which the mathematical result is possibly not a model number of EF.Float_Type (or is, indeed, even transcendental). In each table entry, the values of the parameters are such that the result lies on the axis between two quadrants; the corresponding accuracy rule, which takes precedence over the maximum relative error bounds, is that the result interval is the model interval of EF.Float_Type associated with the exact mathematical result given in the table.
(12)
   -----------------------------------------------------------------------------
   |                                                                           |
   |             Tightly Approximated Elementary Function Results              |
   |                                                                           |
   |-------------------------------------------------------------------------- |
   |                   |            |            |              |              |
   |                   |            |            | Exact Result | Exact Result |
   |                   |            |            |  when Cycle  |  when Cycle  |
   |     Function      | Value of X | Value of Y |  Specified   |   Omitted    |
   |                   |            |            |              |              |
   |---------------------------------------------------------------------------|
   |                   |            |            |              |              |
   |      Arcsin       |    1.0     |    n.a.    |  Cycle/4.0   |    Pi/2.0    |
   |                   |            |            |              |              |
   |      Arcsin       |    -1.0    |    n.a.    |  -Cycle/4.0  |   -Pi/2.0    |
   |                   |            |            |              |              |
   |      Arccos       |    0.0     |    n.a.    |  Cycle/4.0   |    Pi/2.0    |
   |                   |            |            |              |              |
   |      Arccos       |    -1.0    |    n.a.    |  Cycle/2.0   |      Pi      |
   |                   |            |            |              |              |
   | Arctan and Arccot |    0.0     |  positive  |  Cycle/4.0   |    Pi/2.0    |
   |                   |            |            |              |              |
   | Arctan and Arccot |    0.0     |  negative  |  -Cycle/4.0  |   -Pi/2.0    |
   |                   |            |            |              |              |
   | Arctan and Arccot |  negative  |    +0.0    |  Cycle/2.0   |      Pi      |
   |                   |            |            |              |              |
   | Arctan and Arccot |  negative  |    -0.0    |  -Cycle/2.0  |     -Pi      |
   |                   |            |            |              |              |
   | Arctan and Arccot |  negative  |    0.0     |  Cycle/2.0   |      Pi      |
   |                   |            |            |              |              |
   -----------------------------------------------------------------------------
(13)
The last line of the table is meant to apply when EF.Float_Type'Signed_Zeros is False; the two lines just above it, when EF.Float_Type'Signed_Zeros is True and the parameter Y has a zero value with the indicated sign.
(14)
The amount by which the result of an inverse trigonometric function is allowed to spill over into a quadrant adjacent to the one corresponding to the principal branch, as given in A.5.1, is limited. The rule is that the result belongs to the smallest model interval of EF.Float_Type that contains both boundaries of the quadrant corresponding to the principal branch. This rule also takes precedence over the maximum relative error bounds, effectively narrowing the result interval allowed by them.
(15)
Finally, the following specifications also take precedence over the maximum relative error bounds:
(16)
(17)
(18)
Implementation Advice
(19)
The versions of the forward trigonometric functions without a Cycle parameter should not be implemented by calling the corresponding version with a Cycle parameter of 2.0*Numerics.Pi, since this will not provide the required accuracy in some portions of the domain. For the same reason, the version of Log without a Base parameter should not be implemented by calling the corresponding version with a Base parameter of Numerics.e.

Prev | Up | Next | Back | Forward
TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help

Ada WWW Home -- Email comments, additions, corrections, gripes, kudos, etc. to:

Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12