G.2.6 Accuracy Requirements for Complex Arithmetic
In the strict mode, the performance of Numerics.Generic_Complex_Types
and Numerics.Generic_Complex_Elementary_Functions shall be as specified
When an exception is not raised, the result of evaluating
a real function of an instance CT
(i.e., a function that yields a value of subtype CT
.Imaginary) belongs to a result interval defined as for a
real elementary function (see G.2.4
When an exception is not raised,
each component of the result of evaluating a complex function of such
an instance, or of an instance of Numerics.Generic_Complex_Elementary_Functions
obtained by instantiating the latter with CT
(i.e., a function
that yields a value of subtype CT
.Complex), also belongs to a
. The result intervals for the components of the
result are either defined by a maximum relative error
by a maximum box error
When the result
interval for the real (resp., imaginary) component is defined by maximum
relative error, it is defined as for that of a real function, relative
to the exact value of the real (resp., imaginary) part of the result
of the corresponding mathematical function.
defined by maximum box error, the result interval for a component of
the result is the smallest model interval of CT
.Real that contains
all the values of the corresponding part of f
· (1.0 + d
), where f
is the exact complex value of the corresponding mathematical function
at the given parameter values, d
complex, and |d
| is less than or equal
to the given maximum box error.
function delivers a value that belongs to the result interval (or a value
both of whose components belong to their respective result intervals)
when both bounds of the result interval(s) belong to the safe range of
Discussion: The maximum relative error
could be specified separately for each component, but we do not take
advantage of that freedom here.
Discussion: Note that f
· (1.0 + d) defines a small
circular region of the complex plane centered at f,
and the result intervals for the real and imaginary components of the
result define a small rectangular box containing that circle.
Reason: Box error is used when the computation
of the result risks loss of significance in a component due to cancellation.
Ramification: The components of a complex
function that exhibits bounded relative error in each component have
to have the correct sign. In contrast, one of the components of a complex
function that exhibits bounded box error may have the wrong sign, since
the dimensions of the box containing the result are proportional to the
modulus of the mathematical result and not to either component of the
mathematical result individually. Thus, for example, the box containing
the computed result of a complex function whose mathematical result has
a large modulus but lies very close to the imaginary axis might well
straddle that axis, allowing the real component of the computed result
to have the wrong sign. In this case, the distance between the computed
result and the mathematical result is, nevertheless, a small fraction
of the modulus of the mathematical result.
is True, the function either delivers a value that belongs to the result
interval (or a value both of whose components belong to their respective
result intervals) or raises Constraint_Error, signaling overflow;
if CT.Real'Machine_Overflows is False, the
result is implementation defined.
Implementation defined: The result of
a complex arithmetic operation or complex elementary function reference
in overflow situations, when the Machine_Overflows attribute of the corresponding
real type is False.
The error bounds for particular complex functions are tabulated in
table G-2 below
. In the table, the
error bound is given as the coefficient of CT
This paragraph was
Table G-2: Error
Bounds for Particular Complex Functions
|Function or Operator||Nature
|Nature of |
|"*" (both operands complex)||complex||max.
|"/" (right operand complex)||complex||max.
|Exp (complex parameter)||complex||max.
|Exp (imaginary parameter)||complex||max.
|Sin, Cos, Sinh, and Cosh||complex||max.
|Tan, Cot, Tanh, and Coth||complex||max.
The maximum relative error given above applies throughout
the domain of the Compose_From_Polar function when the Cycle parameter
is specified. When the Cycle parameter is omitted, the maximum relative
error applies only when the absolute value of the parameter Argument
is less than or equal to the angle threshold (see G.2.4
For the Exp function, and for the forward hyperbolic (resp., trigonometric)
functions, the maximum relative error given above likewise applies only
when the absolute value of the imaginary (resp., real) component of the
parameter X (or the absolute value of the parameter itself, in the case
of the Exp function with a parameter of pure-imaginary type) is less
than or equal to the angle threshold. For larger angles, the accuracy
is implementation defined.
Implementation defined: The accuracy
of certain complex arithmetic operations and certain complex elementary
functions for parameters (or components thereof) beyond the angle threshold.
The prescribed results
specified in G.1.2
for certain functions
at particular parameter values take precedence over the error bounds;
effectively, they narrow to a single value the result interval allowed
by the error bounds for a component of the result. Additional rules with
a similar effect are given below for certain inverse trigonometric and
inverse hyperbolic functions, at particular parameter values for which
a component of the mathematical result is transcendental. In each case,
the accuracy rule, which takes precedence over the error bounds, is that
the result interval for the stated result component is the model interval
.Real associated with the component's exact mathematical
value. The cases in question are as follows:
When the parameter X has the value zero, the real
(resp., imaginary) component of the result of the Arccot (resp., Arccoth)
function is in the model interval of CT.Real associated with the
When the parameter X has the value one, the real
component of the result of the Arcsin function is in the model interval
of CT.Real associated with the value π/2.0.
When the parameter X has the value –1.0,
the real component of the result of the Arcsin (resp., Arccos) function
is in the model interval of CT.Real associated with the value
–π/2.0 (resp., π).
Discussion: It is possible to give many
other prescribed results in which a component of the parameter is restricted
to a similar model interval when the parameter X is appropriately restricted
to an easily testable portion of the domain. We follow the proposed ISO/IEC
standard for Generic_Complex_Elementary_Functions (for Ada 83) in not
doing so, however.
The amount by which a component of the result of an inverse trigonometric
or inverse hyperbolic function is allowed to spill over into a quadrant
adjacent to the one corresponding to the principal branch, as given in
, is limited. The rule is that the result
belongs to the smallest model interval of CT
.Real that contains
both boundaries of the quadrant corresponding to the principal branch.
This rule also takes precedence over to
the maximum error bounds, effectively narrowing the result interval allowed
Finally, the results allowed by the error bounds
are narrowed by one further rule: The absolute value of each component
of the result of the Exp function, for a pure-imaginary parameter, never
The version of the Compose_From_Polar function 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 complex arithmetic, the Compose_From_Polar
function without a Cycle parameter should not be implemented by calling
Compose_From_Polar with a Cycle parameter.
Wording Changes from Ada 83
The semantics of Numerics.Generic_Complex_Types
and Numerics.Generic_Complex_Elementary_Functions differs from Generic_Complex_Types
and Generic_Complex_Elementary_Functions as defined in ISO/IEC CDs 13813
and 13814 (for Ada 83) in ways analogous to those identified for the
elementary functions in G.2.4
. In addition,
we do not generally specify the signs of zero results (or result components),
although those proposed standards do.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe