!standard G.3.1(1) 05-03-11 AI95-00418-01/02

!standard G.3.2(1)

!class amendment 05-03-09

!status work item 05-03-09

!status received 05-03-09

!priority High

!difficulty Easy

!subject Vector norm

!standard G.3.2(1)

!class amendment 05-03-09

!status work item 05-03-09

!status received 05-03-09

!priority High

!difficulty Easy

!subject Vector norm

!summary

!problem

While the packages Generic_Real_Arrays and Generic_Complex_Arrays provide inner
product, they do not provide a related operation that is often used in
practice, the norm. Normalizing a vector is common and it seems unfriendly to
require the user to implement the norm based on the inner product (and
conjugation), especially as intermediate overflows/underflows could occur.

!proposal

Add "abs" operators implementing the L2-norm. Specify their accuracy.

!wording

Add after G.3.1(9):

function "abs" (Right : Real_Vector) return Real'Base;

Add after G.3.1(39):

function "abs" (Right : Real_Vector) return Real'Base;

This operation returns the L2-norm of Right (the square root of the inner
product of the vector with itself).

AARM Note: Normalization of vectors is a frequent enough operation that it is
useful to provide the norm as a basic operation. Furthermore, implementing the
norm is not entirely straightforward, because the inner product might overflow
while the final norm does not. An implementation cannot merely return Sqrt (X *
X), it has to cope with a possible overflow of the inner product.

AARM Implementation Note: While the definition is given in terms of
an inner product, the norm doesn't "involve an inner product" in the
technical sense. The reason is that is has accuracy requirements
substantially different from those applicable to inner products; and that
cancellations cannot occur, because all the terms are positive, so there
is no possibility of intermediate overflow.

Add after G.3.1(81):

For the L2-norm, no accuracy requirements are specified in the relaxed mode. In
the strict mode the relative error on the norm shall not exceed:

g / 2.0 + 3.0 * Real'Model_Epsilon

AARM Note: This is simply the combination of the error on the inner product
with the error on Sqrt. A first order computation would lead to 2.0 *
Real'Model_Epsilon above, but we are adding an extra Real'Model_Epsilon to
account for higher order effects.

Add after G.3.2(15):

function "abs" (Right : Complex_Vector) return Real'Base;

Add after G.3.2(73):

function "abs" (Right : Complex_Vector) return Real'Base;

This operation returns the Hermitian L2-norm of Right (the square root of the
inner product of the vector with its conjugate).

AARM Implementation Note: While the definition is given in terms of
an inner product, the norm doesn't "involve an inner product" in the
technical sense. The reason is that is has accuracy requirements
substantially different from those applicable to inner products; and that
cancellations cannot occur, because all the terms are positive, so there
is no possibility of intermediate overflow.

Add after G.3.2(150):

For the L2-norm, no accuracy requirements are specified in the relaxed mode. In
the strict mode the relative error on the norm shall not exceed:

g / 2.0 + 3.0 * Real'Model_Epsilon

Where g has the definition appropriate for two complex operands.

!discussion

!example

--!corrigendum

!ACATS test

Test cases should be added to the ACATS tests created for AI-296.

!appendix

****************************************************************

Questions? Ask the ACAA Technical Agent