!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
!summary
(See proposal.)
!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.
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).
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
(See proposal.)
!example
--!corrigendum
!ACATS test
Test cases should be added to the ACATS tests created for AI-296.
!appendix
****************************************************************