aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/ieee/math_complex.vhdl
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/ieee/math_complex.vhdl')
-rw-r--r--libraries/ieee/math_complex.vhdl2162
1 files changed, 1079 insertions, 1083 deletions
diff --git a/libraries/ieee/math_complex.vhdl b/libraries/ieee/math_complex.vhdl
index 278f7413f..af7c3c3fe 100644
--- a/libraries/ieee/math_complex.vhdl
+++ b/libraries/ieee/math_complex.vhdl
@@ -1,1087 +1,1083 @@
-------------------------------------------------------------------------
+-- -----------------------------------------------------------------
+--
+-- Copyright 2019 IEEE P1076 WG Authors
+--
+-- See the LICENSE file distributed with this work for copyright and
+-- licensing information and the AUTHORS file.
+--
+-- This file to you under the Apache License, Version 2.0 (the "License").
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+-- implied. See the License for the specific language governing
+-- permissions and limitations under the License.
--
--- Copyright 1996 by IEEE. All rights reserved.
---
--- This source file is an essential part of IEEE Std 1076.2-1996, IEEE Standard
--- VHDL Mathematical Packages. This source file may not be copied, sold, or
--- included with software that is sold without written permission from the IEEE
--- Standards Department. This source file may be used to implement this standard
--- and may be distributed in compiled form in any manner so long as the
--- compiled form does not allow direct decompilation of the original source file.
--- This source file may be copied for individual use between licensed users.
--- This source file is provided on an AS IS basis. The IEEE disclaims ANY
--- WARRANTY EXPRESS OR IMPLIED INCLUDING ANY WARRANTY OF MERCHANTABILITY
--- AND FITNESS FOR USE FOR A PARTICULAR PURPOSE. The user of the source
--- file shall indemnify and hold IEEE harmless from any damages or liability
--- arising out of the use thereof.
---
--- Title: Standard VHDL Mathematical Packages (IEEE Std 1076.2-1996,
--- MATH_COMPLEX)
---
--- Library: This package shall be compiled into a library
--- symbolically named IEEE.
---
--- Developers: IEEE DASC VHDL Mathematical Packages Working Group
---
--- Purpose: This package defines a standard for designers to use in
--- describing VHDL models that make use of common COMPLEX
--- constants and common COMPLEX mathematical functions and
--- operators.
---
--- Limitation: The values generated by the functions in this package may
--- vary from platform to platform, and the precision of results
--- is only guaranteed to be the minimum required by IEEE Std 1076-
--- 1993.
---
--- Notes:
--- No declarations or definitions shall be included in, or
--- excluded from, this package.
--- The "package declaration" defines the types, subtypes, and
--- declarations of MATH_COMPLEX.
--- The standard mathematical definition and conventional meaning
--- of the mathematical functions that are part of this standard
--- represent the formal semantics of the implementation of the
--- MATH_COMPLEX package declaration. The purpose of the
--- MATH_COMPLEX package body is to provide a guideline for
--- implementations to verify their implementation of MATH_COMPLEX.
--- Tool developers may choose to implement the package body in
--- the most efficient manner available to them.
---
--- -----------------------------------------------------------------------------
--- Version : 1.5
--- Date : 24 July 1996
--- -----------------------------------------------------------------------------
+-- Title : Standard VHDL Mathematical Packages
+-- : (MATH_COMPLEX package declaration)
+-- :
+-- Library : This package shall be compiled into a library
+-- : symbolically named IEEE.
+-- :
+-- Developers: IEEE DASC VHDL Mathematical Packages Working Group
+-- :
+-- Purpose : This package defines a standard for designers to use in
+-- : describing VHDL models that make use of common COMPLEX
+-- : constants and common COMPLEX mathematical functions and
+-- : operators.
+-- :
+-- Limitation: The values generated by the functions in this package
+-- : may vary from platform to platform, and the precision
+-- : of results is only guaranteed to be the minimum required
+-- : by IEEE Std 1076-2008.
+-- :
+-- Note : This package may be modified to include additional data
+-- : required by tools, but it must in no way change the
+-- : external interfaces or simulation behavior of the
+-- : description. It is permissible to add comments and/or
+-- : attributes to the package declarations, but not to change
+-- : or delete any original lines of the package declaration.
+-- : The package body may be changed only in accordance with
+-- : the terms of Clause 16 of this standard.
+-- :
+-- --------------------------------------------------------------------
+-- $Revision: 1220 $
+-- $Date: 2008-04-10 17:16:09 +0930 (Thu, 10 Apr 2008) $
+-- --------------------------------------------------------------------
use WORK.MATH_REAL.all;
package MATH_COMPLEX is
- constant CopyRightNotice: STRING
- := "Copyright 1996 IEEE. All rights reserved.";
-
- --
- -- Type Definitions
- --
- type COMPLEX is
- record
- RE: REAL; -- Real part
- IM: REAL; -- Imaginary part
- end record;
-
- subtype POSITIVE_REAL is REAL range 0.0 to REAL'HIGH;
-
- subtype PRINCIPAL_VALUE is REAL range -MATH_PI to MATH_PI;
-
- type COMPLEX_POLAR is
- record
- MAG: POSITIVE_REAL; -- Magnitude
- ARG: PRINCIPAL_VALUE; -- Angle in radians; -MATH_PI is illegal
- end record;
-
- --
- -- Constant Definitions
- --
- constant MATH_CBASE_1: COMPLEX := COMPLEX'(1.0, 0.0);
- constant MATH_CBASE_J: COMPLEX := COMPLEX'(0.0, 1.0);
- constant MATH_CZERO: COMPLEX := COMPLEX'(0.0, 0.0);
-
-
- --
- -- Overloaded equality and inequality operators for COMPLEX_POLAR
- -- (equality and inequality operators for COMPLEX are predefined)
- --
-
- function "=" ( L: in COMPLEX_POLAR; R: in COMPLEX_POLAR ) return BOOLEAN;
- -- Purpose:
- -- Returns TRUE if L is equal to R and returns FALSE otherwise
- -- Special values:
- -- COMPLEX_POLAR'(0.0, X) = COMPLEX_POLAR'(0.0, Y) returns TRUE
- -- regardless of the value of X and Y.
- -- Domain:
- -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
- -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if L.ARG = -MATH_PI
- -- Error if R.ARG = -MATH_PI
- -- Range:
- -- "="(L,R) is either TRUE or FALSE
- -- Notes:
- -- None
-
- function "/=" ( L: in COMPLEX_POLAR; R: in COMPLEX_POLAR ) return BOOLEAN;
- -- Purpose:
- -- Returns TRUE if L is not equal to R and returns FALSE
- -- otherwise
- -- Special values:
- -- COMPLEX_POLAR'(0.0, X) /= COMPLEX_POLAR'(0.0, Y) returns
- -- FALSE regardless of the value of X and Y.
- -- Domain:
- -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
- -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if L.ARG = -MATH_PI
- -- Error if R.ARG = -MATH_PI
- -- Range:
- -- "/="(L,R) is either TRUE or FALSE
- -- Notes:
- -- None
-
- --
- -- Function Declarations
- --
- function CMPLX(X: in REAL; Y: in REAL:= 0.0 ) return COMPLEX;
- -- Purpose:
- -- Returns COMPLEX number X + iY
- -- Special values:
- -- None
- -- Domain:
- -- X in REAL
- -- Y in REAL
- -- Error conditions:
- -- None
- -- Range:
- -- CMPLX(X,Y) is mathematically unbounded
- -- Notes:
- -- None
-
- function GET_PRINCIPAL_VALUE(X: in REAL ) return PRINCIPAL_VALUE;
- -- Purpose:
- -- Returns principal value of angle X; X in radians
- -- Special values:
- -- None
- -- Domain:
- -- X in REAL
- -- Error conditions:
- -- None
- -- Range:
- -- -MATH_PI < GET_PRINCIPAL_VALUE(X) <= MATH_PI
- -- Notes:
- -- None
-
- function COMPLEX_TO_POLAR(Z: in COMPLEX ) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns principal value COMPLEX_POLAR of Z
- -- Special values:
- -- COMPLEX_TO_POLAR(MATH_CZERO) = COMPLEX_POLAR'(0.0, 0.0)
- -- COMPLEX_TO_POLAR(Z) = COMPLEX_POLAR'(ABS(Z.IM),
- -- SIGN(Z.IM)*MATH_PI_OVER_2) if Z.RE = 0.0
- -- Domain:
- -- Z in COMPLEX
- -- Error conditions:
- -- None
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function POLAR_TO_COMPLEX(Z: in COMPLEX_POLAR ) return COMPLEX;
- -- Purpose:
- -- Returns COMPLEX value of Z
- -- Special values:
- -- None
- -- Domain:
- -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if Z.ARG = -MATH_PI
- -- Range:
- -- POLAR_TO_COMPLEX(Z) is mathematically unbounded
- -- Notes:
- -- None
-
- function "ABS"(Z: in COMPLEX ) return POSITIVE_REAL;
- -- Purpose:
- -- Returns absolute value (magnitude) of Z
- -- Special values:
- -- None
- -- Domain:
- -- Z in COMPLEX
- -- Error conditions:
- -- None
- -- Range:
- -- ABS(Z) is mathematically unbounded
- -- Notes:
- -- ABS(Z) = SQRT(Z.RE*Z.RE + Z.IM*Z.IM)
-
- function "ABS"(Z: in COMPLEX_POLAR ) return POSITIVE_REAL;
- -- Purpose:
- -- Returns absolute value (magnitude) of Z
- -- Special values:
- -- None
- -- Domain:
- -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if Z.ARG = -MATH_PI
- -- Range:
- -- ABS(Z) >= 0.0
- -- Notes:
- -- ABS(Z) = Z.MAG
-
- function ARG(Z: in COMPLEX ) return PRINCIPAL_VALUE;
- -- Purpose:
- -- Returns argument (angle) in radians of the principal
- -- value of Z
- -- Special values:
- -- ARG(Z) = 0.0 if Z.RE >= 0.0 and Z.IM = 0.0
- -- ARG(Z) = SIGN(Z.IM)*MATH_PI_OVER_2 if Z.RE = 0.0
- -- ARG(Z) = MATH_PI if Z.RE < 0.0 and Z.IM = 0.0
- -- Domain:
- -- Z in COMPLEX
- -- Error conditions:
- -- None
- -- Range:
- -- -MATH_PI < ARG(Z) <= MATH_PI
- -- Notes:
- -- ARG(Z) = ARCTAN(Z.IM, Z.RE)
-
- function ARG(Z: in COMPLEX_POLAR ) return PRINCIPAL_VALUE;
- -- Purpose:
- -- Returns argument (angle) in radians of the principal
- -- value of Z
- -- Special values:
- -- None
- -- Domain:
- -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if Z.ARG = -MATH_PI
- -- Range:
- -- -MATH_PI < ARG(Z) <= MATH_PI
- -- Notes:
- -- ARG(Z) = Z.ARG
-
-
- function "-" (Z: in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns unary minus of Z
- -- Special values:
- -- None
- -- Domain:
- -- Z in COMPLEX
- -- Error conditions:
- -- None
- -- Range:
- -- "-"(Z) is mathematically unbounded
- -- Notes:
- -- Returns -x -jy for Z= x + jy
-
- function "-" (Z: in COMPLEX_POLAR ) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns principal value of unary minus of Z
- -- Special values:
- -- "-"(Z) = COMPLEX_POLAR'(Z.MAG, MATH_PI) if Z.ARG = 0.0
- -- Domain:
- -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if Z.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- Returns COMPLEX_POLAR'(Z.MAG, Z.ARG - SIGN(Z.ARG)*MATH_PI) if
- -- Z.ARG /= 0.0
-
- function CONJ (Z: in COMPLEX) return COMPLEX;
- -- Purpose:
- -- Returns complex conjugate of Z
- -- Special values:
- -- None
- -- Domain:
- -- Z in COMPLEX
- -- Error conditions:
- -- None
- -- Range:
- -- CONJ(Z) is mathematically unbounded
- -- Notes:
- -- Returns x -jy for Z= x + jy
-
- function CONJ (Z: in COMPLEX_POLAR) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns principal value of complex conjugate of Z
- -- Special values:
- -- CONJ(Z) = COMPLEX_POLAR'(Z.MAG, MATH_PI) if Z.ARG = MATH_PI
- -- Domain:
- -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if Z.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- Returns COMPLEX_POLAR'(Z.MAG, -Z.ARG) if Z.ARG /= MATH_PI
-
- function SQRT(Z: in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns square root of Z with positive real part
- -- or, if the real part is zero, the one with nonnegative
- -- imaginary part
- -- Special values:
- -- SQRT(MATH_CZERO) = MATH_CZERO
- -- Domain:
- -- Z in COMPLEX
- -- Error conditions:
- -- None
- -- Range:
- -- SQRT(Z) is mathematically unbounded
- -- Notes:
- -- None
-
- function SQRT(Z: in COMPLEX_POLAR ) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns square root of Z with positive real part
- -- or, if the real part is zero, the one with nonnegative
- -- imaginary part
- -- Special values:
- -- SQRT(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = 0.0
- -- Domain:
- -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if Z.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function EXP(Z: in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns exponential of Z
- -- Special values:
- -- EXP(MATH_CZERO) = MATH_CBASE_1
- -- EXP(Z) = -MATH_CBASE_1 if Z.RE = 0.0 and ABS(Z.IM) = MATH_PI
- -- EXP(Z) = SIGN(Z.IM)*MATH_CBASE_J if Z.RE = 0.0 and
- -- ABS(Z.IM) = MATH_PI_OVER_2
- -- Domain:
- -- Z in COMPLEX
- -- Error conditions:
- -- None
- -- Range:
- -- EXP(Z) is mathematically unbounded
- -- Notes:
- -- None
-
-
-
- function EXP(Z: in COMPLEX_POLAR ) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns principal value of exponential of Z
- -- Special values:
- -- EXP(Z) = COMPLEX_POLAR'(1.0, 0.0) if Z.MAG =0.0 and
- -- Z.ARG = 0.0
- -- EXP(Z) = COMPLEX_POLAR'(1.0, MATH_PI) if Z.MAG = MATH_PI and
- -- ABS(Z.ARG) = MATH_PI_OVER_2
- -- EXP(Z) = COMPLEX_POLAR'(1.0, MATH_PI_OVER_2) if
- -- Z.MAG = MATH_PI_OVER_2 and
- -- Z.ARG = MATH_PI_OVER_2
- -- EXP(Z) = COMPLEX_POLAR'(1.0, -MATH_PI_OVER_2) if
- -- Z.MAG = MATH_PI_OVER_2 and
- -- Z.ARG = -MATH_PI_OVER_2
- -- Domain:
- -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if Z.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function LOG(Z: in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns natural logarithm of Z
- -- Special values:
- -- LOG(MATH_CBASE_1) = MATH_CZERO
- -- LOG(-MATH_CBASE_1) = COMPLEX'(0.0, MATH_PI)
- -- LOG(MATH_CBASE_J) = COMPLEX'(0.0, MATH_PI_OVER_2)
- -- LOG(-MATH_CBASE_J) = COMPLEX'(0.0, -MATH_PI_OVER_2)
- -- LOG(Z) = MATH_CBASE_1 if Z = COMPLEX'(MATH_E, 0.0)
- -- Domain:
- -- Z in COMPLEX and ABS(Z) /= 0.0
- -- Error conditions:
- -- Error if ABS(Z) = 0.0
- -- Range:
- -- LOG(Z) is mathematically unbounded
- -- Notes:
- -- None
-
- function LOG2(Z: in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns logarithm base 2 of Z
- -- Special values:
- -- LOG2(MATH_CBASE_1) = MATH_CZERO
- -- LOG2(Z) = MATH_CBASE_1 if Z = COMPLEX'(2.0, 0.0)
- -- Domain:
- -- Z in COMPLEX and ABS(Z) /= 0.0
- -- Error conditions:
- -- Error if ABS(Z) = 0.0
- -- Range:
- -- LOG2(Z) is mathematically unbounded
- -- Notes:
- -- None
-
- function LOG10(Z: in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns logarithm base 10 of Z
- -- Special values:
- -- LOG10(MATH_CBASE_1) = MATH_CZERO
- -- LOG10(Z) = MATH_CBASE_1 if Z = COMPLEX'(10.0, 0.0)
- -- Domain:
- -- Z in COMPLEX and ABS(Z) /= 0.0
- -- Error conditions:
- -- Error if ABS(Z) = 0.0
- -- Range:
- -- LOG10(Z) is mathematically unbounded
- -- Notes:
- -- None
-
- function LOG(Z: in COMPLEX_POLAR ) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns principal value of natural logarithm of Z
- -- Special values:
- -- LOG(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = 1.0 and
- -- Z.ARG = 0.0
- -- LOG(Z) = COMPLEX_POLAR'(MATH_PI, MATH_PI_OVER_2) if
- -- Z.MAG = 1.0 and Z.ARG = MATH_PI
- -- LOG(Z) = COMPLEX_POLAR'(MATH_PI_OVER_2, MATH_PI_OVER_2) if
- -- Z.MAG = 1.0 and Z.ARG = MATH_PI_OVER_2
- -- LOG(Z) = COMPLEX_POLAR'(MATH_PI_OVER_2, -MATH_PI_OVER_2) if
- -- Z.MAG = 1.0 and Z.ARG = -MATH_PI_OVER_2
- -- LOG(Z) = COMPLEX_POLAR'(1.0, 0.0) if Z.MAG = MATH_E and
- -- Z.ARG = 0.0
- -- Domain:
- -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
- -- Z.MAG /= 0.0
- -- Error conditions:
- -- Error if Z.ARG = -MATH_PI
- -- Error if Z.MAG = 0.0
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function LOG2(Z: in COMPLEX_POLAR ) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns principal value of logarithm base 2 of Z
- -- Special values:
- -- LOG2(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = 1.0 and
- -- Z.ARG = 0.0
- -- LOG2(Z) = COMPLEX_POLAR'(1.0, 0.0) if Z.MAG = 2.0 and
- -- Z.ARG = 0.0
- -- Domain:
- -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
- -- Z.MAG /= 0.0
- -- Error conditions:
- -- Error if Z.ARG = -MATH_PI
- -- Error if Z.MAG = 0.0
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function LOG10(Z: in COMPLEX_POLAR ) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns principal value of logarithm base 10 of Z
- -- Special values:
- -- LOG10(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = 1.0 and
- -- Z.ARG = 0.0
- -- LOG10(Z) = COMPLEX_POLAR'(1.0, 0.0) if Z.MAG = 10.0 and
- -- Z.ARG = 0.0
- -- Domain:
- -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
- -- Z.MAG /= 0.0
- -- Error conditions:
- -- Error if Z.ARG = -MATH_PI
- -- Error if Z.MAG = 0.0
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function LOG(Z: in COMPLEX; BASE: in REAL) return COMPLEX;
- -- Purpose:
- -- Returns logarithm base BASE of Z
- -- Special values:
- -- LOG(MATH_CBASE_1, BASE) = MATH_CZERO
- -- LOG(Z,BASE) = MATH_CBASE_1 if Z = COMPLEX'(BASE, 0.0)
- -- Domain:
- -- Z in COMPLEX and ABS(Z) /= 0.0
- -- BASE > 0.0
- -- BASE /= 1.0
- -- Error conditions:
- -- Error if ABS(Z) = 0.0
- -- Error if BASE <= 0.0
- -- Error if BASE = 1.0
- -- Range:
- -- LOG(Z,BASE) is mathematically unbounded
- -- Notes:
- -- None
-
- function LOG(Z: in COMPLEX_POLAR; BASE: in REAL ) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns principal value of logarithm base BASE of Z
- -- Special values:
- -- LOG(Z, BASE) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = 1.0 and
- -- Z.ARG = 0.0
- -- LOG(Z, BASE) = COMPLEX_POLAR'(1.0, 0.0) if Z.MAG = BASE and
- -- Z.ARG = 0.0
- -- Domain:
- -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
- -- Z.MAG /= 0.0
- -- BASE > 0.0
- -- BASE /= 1.0
- -- Error conditions:
- -- Error if Z.ARG = -MATH_PI
- -- Error if Z.MAG = 0.0
- -- Error if BASE <= 0.0
- -- Error if BASE = 1.0
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function SIN (Z : in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns sine of Z
- -- Special values:
- -- SIN(MATH_CZERO) = MATH_CZERO
- -- SIN(Z) = MATH_CZERO if Z = COMPLEX'(MATH_PI, 0.0)
- -- Domain:
- -- Z in COMPLEX
- -- Error conditions:
- -- None
- -- Range:
- -- ABS(SIN(Z)) <= SQRT(SIN(Z.RE)*SIN(Z.RE) +
- -- SINH(Z.IM)*SINH(Z.IM))
- -- Notes:
- -- None
-
- function SIN (Z : in COMPLEX_POLAR ) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns principal value of sine of Z
- -- Special values:
- -- SIN(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = 0.0 and
- -- Z.ARG = 0.0
- -- SIN(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = MATH_PI and
- -- Z.ARG = 0.0
- -- Domain:
- -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if Z.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function COS (Z : in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns cosine of Z
- -- Special values:
- -- COS(Z) = MATH_CZERO if Z = COMPLEX'(MATH_PI_OVER_2, 0.0)
- -- COS(Z) = MATH_CZERO if Z = COMPLEX'(-MATH_PI_OVER_2, 0.0)
- -- Domain:
- -- Z in COMPLEX
- -- Error conditions:
- -- None
- -- Range:
- -- ABS(COS(Z)) <= SQRT(COS(Z.RE)*COS(Z.RE) +
- -- SINH(Z.IM)*SINH(Z.IM))
- -- Notes:
- -- None
-
-
- function COS (Z : in COMPLEX_POLAR ) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns principal value of cosine of Z
- -- Special values:
- -- COS(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = MATH_PI_OVER_2
- -- and Z.ARG = 0.0
- -- COS(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = MATH_PI_OVER_2
- -- and Z.ARG = MATH_PI
- -- Domain:
- -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if Z.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function SINH (Z : in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns hyperbolic sine of Z
- -- Special values:
- -- SINH(MATH_CZERO) = MATH_CZERO
- -- SINH(Z) = MATH_CZERO if Z.RE = 0.0 and Z.IM = MATH_PI
- -- SINH(Z) = MATH_CBASE_J if Z.RE = 0.0 and
- -- Z.IM = MATH_PI_OVER_2
- -- SINH(Z) = -MATH_CBASE_J if Z.RE = 0.0 and
- -- Z.IM = -MATH_PI_OVER_2
- -- Domain:
- -- Z in COMPLEX
- -- Error conditions:
- -- None
- -- Range:
- -- ABS(SINH(Z)) <= SQRT(SINH(Z.RE)*SINH(Z.RE) +
- -- SIN(Z.IM)*SIN(Z.IM))
- -- Notes:
- -- None
-
- function SINH (Z : in COMPLEX_POLAR ) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns principal value of hyperbolic sine of Z
- -- Special values:
- -- SINH(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = 0.0 and
- -- Z.ARG = 0.0
- -- SINH(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = MATH_PI and
- -- Z.ARG = MATH_PI_OVER_2
- -- SINH(Z) = COMPLEX_POLAR'(1.0, MATH_PI_OVER_2) if Z.MAG =
- -- MATH_PI_OVER_2 and Z.ARG = MATH_PI_OVER_2
- -- SINH(Z) = COMPLEX_POLAR'(1.0, -MATH_PI_OVER_2) if Z.MAG =
- -- MATH_PI_OVER_2 and Z.ARG = -MATH_PI_OVER_2
- -- Domain:
- -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if Z.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function COSH (Z : in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns hyperbolic cosine of Z
- -- Special values:
- -- COSH(MATH_CZERO) = MATH_CBASE_1
- -- COSH(Z) = -MATH_CBASE_1 if Z.RE = 0.0 and Z.IM = MATH_PI
- -- COSH(Z) = MATH_CZERO if Z.RE = 0.0 and Z.IM = MATH_PI_OVER_2
- -- COSH(Z) = MATH_CZERO if Z.RE = 0.0 and Z.IM = -MATH_PI_OVER_2
- -- Domain:
- -- Z in COMPLEX
- -- Error conditions:
- -- None
- -- Range:
- -- ABS(COSH(Z)) <= SQRT(SINH(Z.RE)*SINH(Z.RE) +
- -- COS(Z.IM)*COS(Z.IM))
- -- Notes:
- -- None
-
-
- function COSH (Z : in COMPLEX_POLAR ) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns principal value of hyperbolic cosine of Z
- -- Special values:
- -- COSH(Z) = COMPLEX_POLAR'(1.0, 0.0) if Z.MAG = 0.0 and
- -- Z.ARG = 0.0
- -- COSH(Z) = COMPLEX_POLAR'(1.0, MATH_PI) if Z.MAG = MATH_PI and
- -- Z.ARG = MATH_PI_OVER_2
- -- COSH(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG =
- -- MATH_PI_OVER_2 and Z.ARG = MATH_PI_OVER_2
- -- COSH(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG =
- -- MATH_PI_OVER_2 and Z.ARG = -MATH_PI_OVER_2
- -- Domain:
- -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if Z.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- --
- -- Arithmetic Operators
- --
-
- function "+" ( L: in COMPLEX; R: in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns arithmetic addition of L and R
- -- Special values:
- -- None
- -- Domain:
- -- L in COMPLEX
- -- R in COMPLEX
- -- Error conditions:
- -- None
- -- Range:
- -- "+"(Z) is mathematically unbounded
- -- Notes:
- -- None
-
- function "+" ( L: in REAL; R: in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns arithmetic addition of L and R
- -- Special values:
- -- None
- -- Domain:
- -- L in REAL
- -- R in COMPLEX
- -- Error conditions:
- -- None
- -- Range:
- -- "+"(Z) is mathematically unbounded
- -- Notes:
- -- None
-
- function "+" ( L: in COMPLEX; R: in REAL ) return COMPLEX;
- -- Purpose:
- -- Returns arithmetic addition of L and R
- -- Special values:
- -- None
- -- Domain:
- -- L in COMPLEX
- -- R in REAL
- -- Error conditions:
- -- None
- -- Range:
- -- "+"(Z) is mathematically unbounded
- -- Notes:
- -- None
-
- function "+" ( L: in COMPLEX_POLAR; R: in COMPLEX_POLAR)
- return COMPLEX_POLAR;
- -- Purpose:
- -- Returns arithmetic addition of L and R
- -- Special values:
- -- None
- -- Domain:
- -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
- -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if L.ARG = -MATH_PI
- -- Error if R.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
-
- function "+" ( L: in REAL; R: in COMPLEX_POLAR) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns arithmetic addition of L and R
- -- Special values:
- -- None
- -- Domain:
- -- L in REAL
- -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if R.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function "+" ( L: in COMPLEX_POLAR; R: in REAL) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns arithmetic addition of L and R
- -- Special values:
- -- None
- -- Domain:
- -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
- -- R in REAL
- -- Error conditions:
- -- Error if L.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function "-" ( L: in COMPLEX; R: in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns arithmetic subtraction of L minus R
- -- Special values:
- -- None
- -- Domain:
- -- L in COMPLEX
- -- R in COMPLEX
- -- Error conditions:
- -- None
- -- Range:
- -- "-"(Z) is mathematically unbounded
- -- Notes:
- -- None
-
- function "-" ( L: in REAL; R: in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns arithmetic subtraction of L minus R
- -- Special values:
- -- None
- -- Domain:
- -- L in REAL
- -- R in COMPLEX
- -- Error conditions:
- -- None
- -- Range:
- -- "-"(Z) is mathematically unbounded
- -- Notes:
- -- None
-
- function "-" ( L: in COMPLEX; R: in REAL ) return COMPLEX;
- -- Purpose:
- -- Returns arithmetic subtraction of L minus R
- -- Special values:
- -- None
- -- Domain:
- -- L in COMPLEX
- -- R in REAL
- -- Error conditions:
- -- None
- -- Range:
- -- "-"(Z) is mathematically unbounded
- -- Notes:
- -- None
-
- function "-" ( L: in COMPLEX_POLAR; R: in COMPLEX_POLAR)
- return COMPLEX_POLAR;
- -- Purpose:
- -- Returns arithmetic subtraction of L minus R
- -- Special values:
- -- None
- -- Domain:
- -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
- -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if L.ARG = -MATH_PI
- -- Error if R.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function "-" ( L: in REAL; R: in COMPLEX_POLAR) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns arithmetic subtraction of L minus R
- -- Special values:
- -- None
- -- Domain:
- -- L in REAL
- -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if R.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
-
- function "-" ( L: in COMPLEX_POLAR; R: in REAL) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns arithmetic subtraction of L minus R
- -- Special values:
- -- None
- -- Domain:
- -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
- -- R in REAL
- -- Error conditions:
- -- Error if L.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function "*" ( L: in COMPLEX; R: in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns arithmetic multiplication of L and R
- -- Special values:
- -- None
- -- Domain:
- -- L in COMPLEX
- -- R in COMPLEX
- -- Error conditions:
- -- None
- -- Range:
- -- "*"(Z) is mathematically unbounded
- -- Notes:
- -- None
-
- function "*" ( L: in REAL; R: in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns arithmetic multiplication of L and R
- -- Special values:
- -- None
- -- Domain:
- -- L in REAL
- -- R in COMPLEX
- -- Error conditions:
- -- None
- -- Range:
- -- "*"(Z) is mathematically unbounded
- -- Notes:
- -- None
-
- function "*" ( L: in COMPLEX; R: in REAL ) return COMPLEX;
- -- Purpose:
- -- Returns arithmetic multiplication of L and R
- -- Special values:
- -- None
- -- Domain:
- -- L in COMPLEX
- -- R in REAL
- -- Error conditions:
- -- None
-
- -- Range:
- -- "*"(Z) is mathematically unbounded
- -- Notes:
- -- None
-
- function "*" ( L: in COMPLEX_POLAR; R: in COMPLEX_POLAR)
- return COMPLEX_POLAR;
- -- Purpose:
- -- Returns arithmetic multiplication of L and R
- -- Special values:
- -- None
- -- Domain:
- -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
- -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if L.ARG = -MATH_PI
- -- Error if R.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function "*" ( L: in REAL; R: in COMPLEX_POLAR) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns arithmetic multiplication of L and R
- -- Special values:
- -- None
- -- Domain:
- -- L in REAL
- -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
- -- Error conditions:
- -- Error if R.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function "*" ( L: in COMPLEX_POLAR; R: in REAL) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns arithmetic multiplication of L and R
- -- Special values:
- -- None
- -- Domain:
- -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
- -- R in REAL
- -- Error conditions:
- -- Error if L.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
-
- function "/" ( L: in COMPLEX; R: in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns arithmetic division of L by R
- -- Special values:
- -- None
- -- Domain:
- -- L in COMPLEX
- -- R in COMPLEX and R /= MATH_CZERO
- -- Error conditions:
- -- Error if R = MATH_CZERO
- -- Range:
- -- "/"(Z) is mathematically unbounded
- -- Notes:
- -- None
-
- function "/" ( L: in REAL; R: in COMPLEX ) return COMPLEX;
- -- Purpose:
- -- Returns arithmetic division of L by R
- -- Special values:
- -- None
- -- Domain:
- -- L in REAL
- -- R in COMPLEX and R /= MATH_CZERO
- -- Error conditions:
- -- Error if R = MATH_CZERO
- -- Range:
- -- "/"(Z) is mathematically unbounded
- -- Notes:
- -- None
-
- function "/" ( L: in COMPLEX; R: in REAL ) return COMPLEX;
- -- Purpose:
- -- Returns arithmetic division of L by R
- -- Special values:
- -- None
- -- Domain:
- -- L in COMPLEX
- -- R in REAL and R /= 0.0
- -- Error conditions:
- -- Error if R = 0.0
- -- Range:
- -- "/"(Z) is mathematically unbounded
- -- Notes:
- -- None
-
- function "/" ( L: in COMPLEX_POLAR; R: in COMPLEX_POLAR)
- return COMPLEX_POLAR;
- -- Purpose:
- -- Returns arithmetic division of L by R
- -- Special values:
- -- None
- -- Domain:
- -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
- -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
- -- R.MAG > 0.0
- -- Error conditions:
- -- Error if R.MAG <= 0.0
- -- Error if L.ARG = -MATH_PI
- -- Error if R.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function "/" ( L: in REAL; R: in COMPLEX_POLAR) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns arithmetic division of L by R
- -- Special values:
- -- None
- -- Domain:
- -- L in REAL
- -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
- -- R.MAG > 0.0
- -- Error conditions:
- -- Error if R.MAG <= 0.0
- -- Error if R.ARG = -MATH_PI
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-
- function "/" ( L: in COMPLEX_POLAR; R: in REAL) return COMPLEX_POLAR;
- -- Purpose:
- -- Returns arithmetic division of L by R
- -- Special values:
- -- None
- -- Domain:
- -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
- -- R /= 0.0
- -- Error conditions:
- -- Error if L.ARG = -MATH_PI
- -- Error if R = 0.0
- -- Range:
- -- result.MAG >= 0.0
- -- -MATH_PI < result.ARG <= MATH_PI
- -- Notes:
- -- None
-end MATH_COMPLEX;
+ constant CopyRightNotice : STRING
+ := "Copyright IEEE P1076 WG. Licensed Apache 2.0";
+
+ --
+ -- Type Definitions
+ --
+ type COMPLEX is
+ record
+ RE : REAL; -- Real part
+ IM : REAL; -- Imaginary part
+ end record;
+
+ subtype POSITIVE_REAL is REAL range 0.0 to REAL'high;
+
+ subtype PRINCIPAL_VALUE is REAL range -MATH_PI to MATH_PI;
+
+ type COMPLEX_POLAR is
+ record
+ MAG : POSITIVE_REAL; -- Magnitude
+ ARG : PRINCIPAL_VALUE; -- Angle in radians; -MATH_PI is illegal
+ end record;
+
+ --
+ -- Constant Definitions
+ --
+ constant MATH_CBASE_1 : COMPLEX := COMPLEX'(1.0, 0.0);
+ constant MATH_CBASE_J : COMPLEX := COMPLEX'(0.0, 1.0);
+ constant MATH_CZERO : COMPLEX := COMPLEX'(0.0, 0.0);
+
+
+ --
+ -- Overloaded equality and inequality operators for COMPLEX_POLAR
+ -- (equality and inequality operators for COMPLEX are predefined)
+ --
+
+ function "=" (L : in COMPLEX_POLAR; R : in COMPLEX_POLAR) return BOOLEAN;
+ -- Purpose:
+ -- Returns TRUE if L is equal to R and returns FALSE otherwise
+ -- Special values:
+ -- COMPLEX_POLAR'(0.0, X) = COMPLEX_POLAR'(0.0, Y) returns TRUE
+ -- regardless of the value of X and Y.
+ -- Domain:
+ -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
+ -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if L.ARG = -MATH_PI
+ -- Error if R.ARG = -MATH_PI
+ -- Range:
+ -- "="(L,R) is either TRUE or FALSE
+ -- Notes:
+ -- None
+
+ function "/=" (L : in COMPLEX_POLAR; R : in COMPLEX_POLAR) return BOOLEAN;
+ -- Purpose:
+ -- Returns TRUE if L is not equal to R and returns FALSE
+ -- otherwise
+ -- Special values:
+ -- COMPLEX_POLAR'(0.0, X) /= COMPLEX_POLAR'(0.0, Y) returns
+ -- FALSE regardless of the value of X and Y.
+ -- Domain:
+ -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
+ -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if L.ARG = -MATH_PI
+ -- Error if R.ARG = -MATH_PI
+ -- Range:
+ -- "/="(L,R) is either TRUE or FALSE
+ -- Notes:
+ -- None
+
+ --
+ -- Function Declarations
+ --
+ function CMPLX(X : in REAL; Y : in REAL := 0.0) return COMPLEX;
+ -- Purpose:
+ -- Returns COMPLEX number X + iY
+ -- Special values:
+ -- None
+ -- Domain:
+ -- X in REAL
+ -- Y in REAL
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- CMPLX(X,Y) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function GET_PRINCIPAL_VALUE(X : in REAL) return PRINCIPAL_VALUE;
+ -- Purpose:
+ -- Returns principal value of angle X; X in radians
+ -- Special values:
+ -- None
+ -- Domain:
+ -- X in REAL
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- -MATH_PI < GET_PRINCIPAL_VALUE(X) <= MATH_PI
+ -- Notes:
+ -- None
+
+ function COMPLEX_TO_POLAR(Z : in COMPLEX) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns principal value COMPLEX_POLAR of Z
+ -- Special values:
+ -- COMPLEX_TO_POLAR(MATH_CZERO) = COMPLEX_POLAR'(0.0, 0.0)
+ -- COMPLEX_TO_POLAR(Z) = COMPLEX_POLAR'(ABS(Z.IM),
+ -- SIGN(Z.IM)*MATH_PI_OVER_2) if Z.RE = 0.0
+ -- Domain:
+ -- Z in COMPLEX
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function POLAR_TO_COMPLEX(Z : in COMPLEX_POLAR) return COMPLEX;
+ -- Purpose:
+ -- Returns COMPLEX value of Z
+ -- Special values:
+ -- None
+ -- Domain:
+ -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if Z.ARG = -MATH_PI
+ -- Range:
+ -- POLAR_TO_COMPLEX(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function "ABS"(Z : in COMPLEX) return POSITIVE_REAL;
+ -- Purpose:
+ -- Returns absolute value (magnitude) of Z
+ -- Special values:
+ -- None
+ -- Domain:
+ -- Z in COMPLEX
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- ABS(Z) is mathematically unbounded
+ -- Notes:
+ -- ABS(Z) = SQRT(Z.RE*Z.RE + Z.IM*Z.IM)
+
+ function "ABS"(Z : in COMPLEX_POLAR) return POSITIVE_REAL;
+ -- Purpose:
+ -- Returns absolute value (magnitude) of Z
+ -- Special values:
+ -- None
+ -- Domain:
+ -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if Z.ARG = -MATH_PI
+ -- Range:
+ -- ABS(Z) >= 0.0
+ -- Notes:
+ -- ABS(Z) = Z.MAG
+
+ function ARG(Z : in COMPLEX) return PRINCIPAL_VALUE;
+ -- Purpose:
+ -- Returns argument (angle) in radians of the principal
+ -- value of Z
+ -- Special values:
+ -- ARG(Z) = 0.0 if Z.RE >= 0.0 and Z.IM = 0.0
+ -- ARG(Z) = SIGN(Z.IM)*MATH_PI_OVER_2 if Z.RE = 0.0
+ -- ARG(Z) = MATH_PI if Z.RE < 0.0 and Z.IM = 0.0
+ -- Domain:
+ -- Z in COMPLEX
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- -MATH_PI < ARG(Z) <= MATH_PI
+ -- Notes:
+ -- ARG(Z) = ARCTAN(Z.IM, Z.RE)
+
+ function ARG(Z : in COMPLEX_POLAR) return PRINCIPAL_VALUE;
+ -- Purpose:
+ -- Returns argument (angle) in radians of the principal
+ -- value of Z
+ -- Special values:
+ -- None
+ -- Domain:
+ -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if Z.ARG = -MATH_PI
+ -- Range:
+ -- -MATH_PI < ARG(Z) <= MATH_PI
+ -- Notes:
+ -- ARG(Z) = Z.ARG
+
+
+ function "-" (Z : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns unary minus of Z
+ -- Special values:
+ -- None
+ -- Domain:
+ -- Z in COMPLEX
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- "-"(Z) is mathematically unbounded
+ -- Notes:
+ -- Returns -x -jy for Z= x + jy
+
+ function "-" (Z : in COMPLEX_POLAR) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns principal value of unary minus of Z
+ -- Special values:
+ -- "-"(Z) = COMPLEX_POLAR'(Z.MAG, MATH_PI) if Z.ARG = 0.0
+ -- Domain:
+ -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if Z.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- Returns COMPLEX_POLAR'(Z.MAG, Z.ARG - SIGN(Z.ARG)*MATH_PI) if
+ -- Z.ARG /= 0.0
+
+ function CONJ (Z : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns complex conjugate of Z
+ -- Special values:
+ -- None
+ -- Domain:
+ -- Z in COMPLEX
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- CONJ(Z) is mathematically unbounded
+ -- Notes:
+ -- Returns x -jy for Z= x + jy
+
+ function CONJ (Z : in COMPLEX_POLAR) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns principal value of complex conjugate of Z
+ -- Special values:
+ -- CONJ(Z) = COMPLEX_POLAR'(Z.MAG, MATH_PI) if Z.ARG = MATH_PI
+ -- Domain:
+ -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if Z.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- Returns COMPLEX_POLAR'(Z.MAG, -Z.ARG) if Z.ARG /= MATH_PI
+
+ function SQRT(Z : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns square root of Z with positive real part
+ -- or, if the real part is zero, the one with nonnegative
+ -- imaginary part
+ -- Special values:
+ -- SQRT(MATH_CZERO) = MATH_CZERO
+ -- Domain:
+ -- Z in COMPLEX
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- SQRT(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function SQRT(Z : in COMPLEX_POLAR) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns square root of Z with positive real part
+ -- or, if the real part is zero, the one with nonnegative
+ -- imaginary part
+ -- Special values:
+ -- SQRT(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = 0.0
+ -- Domain:
+ -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if Z.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function EXP(Z : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns exponential of Z
+ -- Special values:
+ -- EXP(MATH_CZERO) = MATH_CBASE_1
+ -- EXP(Z) = -MATH_CBASE_1 if Z.RE = 0.0 and ABS(Z.IM) = MATH_PI
+ -- EXP(Z) = SIGN(Z.IM)*MATH_CBASE_J if Z.RE = 0.0 and
+ -- ABS(Z.IM) = MATH_PI_OVER_2
+ -- Domain:
+ -- Z in COMPLEX
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- EXP(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+
+
+ function EXP(Z : in COMPLEX_POLAR) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns principal value of exponential of Z
+ -- Special values:
+ -- EXP(Z) = COMPLEX_POLAR'(1.0, 0.0) if Z.MAG =0.0 and
+ -- Z.ARG = 0.0
+ -- EXP(Z) = COMPLEX_POLAR'(1.0, MATH_PI) if Z.MAG = MATH_PI and
+ -- ABS(Z.ARG) = MATH_PI_OVER_2
+ -- EXP(Z) = COMPLEX_POLAR'(1.0, MATH_PI_OVER_2) if
+ -- Z.MAG = MATH_PI_OVER_2 and
+ -- Z.ARG = MATH_PI_OVER_2
+ -- EXP(Z) = COMPLEX_POLAR'(1.0, -MATH_PI_OVER_2) if
+ -- Z.MAG = MATH_PI_OVER_2 and
+ -- Z.ARG = -MATH_PI_OVER_2
+ -- Domain:
+ -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if Z.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function LOG(Z : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns natural logarithm of Z
+ -- Special values:
+ -- LOG(MATH_CBASE_1) = MATH_CZERO
+ -- LOG(-MATH_CBASE_1) = COMPLEX'(0.0, MATH_PI)
+ -- LOG(MATH_CBASE_J) = COMPLEX'(0.0, MATH_PI_OVER_2)
+ -- LOG(-MATH_CBASE_J) = COMPLEX'(0.0, -MATH_PI_OVER_2)
+ -- LOG(Z) = MATH_CBASE_1 if Z = COMPLEX'(MATH_E, 0.0)
+ -- Domain:
+ -- Z in COMPLEX and ABS(Z) /= 0.0
+ -- Error conditions:
+ -- Error if ABS(Z) = 0.0
+ -- Range:
+ -- LOG(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function LOG2(Z : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns logarithm base 2 of Z
+ -- Special values:
+ -- LOG2(MATH_CBASE_1) = MATH_CZERO
+ -- LOG2(Z) = MATH_CBASE_1 if Z = COMPLEX'(2.0, 0.0)
+ -- Domain:
+ -- Z in COMPLEX and ABS(Z) /= 0.0
+ -- Error conditions:
+ -- Error if ABS(Z) = 0.0
+ -- Range:
+ -- LOG2(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function LOG10(Z : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns logarithm base 10 of Z
+ -- Special values:
+ -- LOG10(MATH_CBASE_1) = MATH_CZERO
+ -- LOG10(Z) = MATH_CBASE_1 if Z = COMPLEX'(10.0, 0.0)
+ -- Domain:
+ -- Z in COMPLEX and ABS(Z) /= 0.0
+ -- Error conditions:
+ -- Error if ABS(Z) = 0.0
+ -- Range:
+ -- LOG10(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function LOG(Z : in COMPLEX_POLAR) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns principal value of natural logarithm of Z
+ -- Special values:
+ -- LOG(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = 1.0 and
+ -- Z.ARG = 0.0
+ -- LOG(Z) = COMPLEX_POLAR'(MATH_PI, MATH_PI_OVER_2) if
+ -- Z.MAG = 1.0 and Z.ARG = MATH_PI
+ -- LOG(Z) = COMPLEX_POLAR'(MATH_PI_OVER_2, MATH_PI_OVER_2) if
+ -- Z.MAG = 1.0 and Z.ARG = MATH_PI_OVER_2
+ -- LOG(Z) = COMPLEX_POLAR'(MATH_PI_OVER_2, -MATH_PI_OVER_2) if
+ -- Z.MAG = 1.0 and Z.ARG = -MATH_PI_OVER_2
+ -- LOG(Z) = COMPLEX_POLAR'(1.0, 0.0) if Z.MAG = MATH_E and
+ -- Z.ARG = 0.0
+ -- Domain:
+ -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
+ -- Z.MAG /= 0.0
+ -- Error conditions:
+ -- Error if Z.ARG = -MATH_PI
+ -- Error if Z.MAG = 0.0
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function LOG2(Z : in COMPLEX_POLAR) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns principal value of logarithm base 2 of Z
+ -- Special values:
+ -- LOG2(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = 1.0 and
+ -- Z.ARG = 0.0
+ -- LOG2(Z) = COMPLEX_POLAR'(1.0, 0.0) if Z.MAG = 2.0 and
+ -- Z.ARG = 0.0
+ -- Domain:
+ -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
+ -- Z.MAG /= 0.0
+ -- Error conditions:
+ -- Error if Z.ARG = -MATH_PI
+ -- Error if Z.MAG = 0.0
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function LOG10(Z : in COMPLEX_POLAR) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns principal value of logarithm base 10 of Z
+ -- Special values:
+ -- LOG10(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = 1.0 and
+ -- Z.ARG = 0.0
+ -- LOG10(Z) = COMPLEX_POLAR'(1.0, 0.0) if Z.MAG = 10.0 and
+ -- Z.ARG = 0.0
+ -- Domain:
+ -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
+ -- Z.MAG /= 0.0
+ -- Error conditions:
+ -- Error if Z.ARG = -MATH_PI
+ -- Error if Z.MAG = 0.0
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function LOG(Z : in COMPLEX; BASE : in REAL) return COMPLEX;
+ -- Purpose:
+ -- Returns logarithm base BASE of Z
+ -- Special values:
+ -- LOG(MATH_CBASE_1, BASE) = MATH_CZERO
+ -- LOG(Z,BASE) = MATH_CBASE_1 if Z = COMPLEX'(BASE, 0.0)
+ -- Domain:
+ -- Z in COMPLEX and ABS(Z) /= 0.0
+ -- BASE > 0.0
+ -- BASE /= 1.0
+ -- Error conditions:
+ -- Error if ABS(Z) = 0.0
+ -- Error if BASE <= 0.0
+ -- Error if BASE = 1.0
+ -- Range:
+ -- LOG(Z,BASE) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function LOG(Z : in COMPLEX_POLAR; BASE : in REAL) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns principal value of logarithm base BASE of Z
+ -- Special values:
+ -- LOG(Z, BASE) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = 1.0 and
+ -- Z.ARG = 0.0
+ -- LOG(Z, BASE) = COMPLEX_POLAR'(1.0, 0.0) if Z.MAG = BASE and
+ -- Z.ARG = 0.0
+ -- Domain:
+ -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
+ -- Z.MAG /= 0.0
+ -- BASE > 0.0
+ -- BASE /= 1.0
+ -- Error conditions:
+ -- Error if Z.ARG = -MATH_PI
+ -- Error if Z.MAG = 0.0
+ -- Error if BASE <= 0.0
+ -- Error if BASE = 1.0
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function SIN (Z : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns sine of Z
+ -- Special values:
+ -- SIN(MATH_CZERO) = MATH_CZERO
+ -- SIN(Z) = MATH_CZERO if Z = COMPLEX'(MATH_PI, 0.0)
+ -- Domain:
+ -- Z in COMPLEX
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- ABS(SIN(Z)) <= SQRT(SIN(Z.RE)*SIN(Z.RE) +
+ -- SINH(Z.IM)*SINH(Z.IM))
+ -- Notes:
+ -- None
+
+ function SIN (Z : in COMPLEX_POLAR) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns principal value of sine of Z
+ -- Special values:
+ -- SIN(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = 0.0 and
+ -- Z.ARG = 0.0
+ -- SIN(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = MATH_PI and
+ -- Z.ARG = 0.0
+ -- Domain:
+ -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if Z.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function COS (Z : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns cosine of Z
+ -- Special values:
+ -- COS(Z) = MATH_CZERO if Z = COMPLEX'(MATH_PI_OVER_2, 0.0)
+ -- COS(Z) = MATH_CZERO if Z = COMPLEX'(-MATH_PI_OVER_2, 0.0)
+ -- Domain:
+ -- Z in COMPLEX
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- ABS(COS(Z)) <= SQRT(COS(Z.RE)*COS(Z.RE) +
+ -- SINH(Z.IM)*SINH(Z.IM))
+ -- Notes:
+ -- None
+
+
+ function COS (Z : in COMPLEX_POLAR) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns principal value of cosine of Z
+ -- Special values:
+ -- COS(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = MATH_PI_OVER_2
+ -- and Z.ARG = 0.0
+ -- COS(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = MATH_PI_OVER_2
+ -- and Z.ARG = MATH_PI
+ -- Domain:
+ -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if Z.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function SINH (Z : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns hyperbolic sine of Z
+ -- Special values:
+ -- SINH(MATH_CZERO) = MATH_CZERO
+ -- SINH(Z) = MATH_CZERO if Z.RE = 0.0 and Z.IM = MATH_PI
+ -- SINH(Z) = MATH_CBASE_J if Z.RE = 0.0 and
+ -- Z.IM = MATH_PI_OVER_2
+ -- SINH(Z) = -MATH_CBASE_J if Z.RE = 0.0 and
+ -- Z.IM = -MATH_PI_OVER_2
+ -- Domain:
+ -- Z in COMPLEX
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- ABS(SINH(Z)) <= SQRT(SINH(Z.RE)*SINH(Z.RE) +
+ -- SIN(Z.IM)*SIN(Z.IM))
+ -- Notes:
+ -- None
+
+ function SINH (Z : in COMPLEX_POLAR) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns principal value of hyperbolic sine of Z
+ -- Special values:
+ -- SINH(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = 0.0 and
+ -- Z.ARG = 0.0
+ -- SINH(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG = MATH_PI and
+ -- Z.ARG = MATH_PI_OVER_2
+ -- SINH(Z) = COMPLEX_POLAR'(1.0, MATH_PI_OVER_2) if Z.MAG =
+ -- MATH_PI_OVER_2 and Z.ARG = MATH_PI_OVER_2
+ -- SINH(Z) = COMPLEX_POLAR'(1.0, -MATH_PI_OVER_2) if Z.MAG =
+ -- MATH_PI_OVER_2 and Z.ARG = -MATH_PI_OVER_2
+ -- Domain:
+ -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if Z.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function COSH (Z : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns hyperbolic cosine of Z
+ -- Special values:
+ -- COSH(MATH_CZERO) = MATH_CBASE_1
+ -- COSH(Z) = -MATH_CBASE_1 if Z.RE = 0.0 and Z.IM = MATH_PI
+ -- COSH(Z) = MATH_CZERO if Z.RE = 0.0 and Z.IM = MATH_PI_OVER_2
+ -- COSH(Z) = MATH_CZERO if Z.RE = 0.0 and Z.IM = -MATH_PI_OVER_2
+ -- Domain:
+ -- Z in COMPLEX
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- ABS(COSH(Z)) <= SQRT(SINH(Z.RE)*SINH(Z.RE) +
+ -- COS(Z.IM)*COS(Z.IM))
+ -- Notes:
+ -- None
+
+
+ function COSH (Z : in COMPLEX_POLAR) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns principal value of hyperbolic cosine of Z
+ -- Special values:
+ -- COSH(Z) = COMPLEX_POLAR'(1.0, 0.0) if Z.MAG = 0.0 and
+ -- Z.ARG = 0.0
+ -- COSH(Z) = COMPLEX_POLAR'(1.0, MATH_PI) if Z.MAG = MATH_PI and
+ -- Z.ARG = MATH_PI_OVER_2
+ -- COSH(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG =
+ -- MATH_PI_OVER_2 and Z.ARG = MATH_PI_OVER_2
+ -- COSH(Z) = COMPLEX_POLAR'(0.0, 0.0) if Z.MAG =
+ -- MATH_PI_OVER_2 and Z.ARG = -MATH_PI_OVER_2
+ -- Domain:
+ -- Z in COMPLEX_POLAR and Z.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if Z.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ --
+ -- Arithmetic Operators
+ --
+
+ function "+" (L : in COMPLEX; R : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns arithmetic addition of L and R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in COMPLEX
+ -- R in COMPLEX
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- "+"(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function "+" (L : in REAL; R : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns arithmetic addition of L and R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in REAL
+ -- R in COMPLEX
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- "+"(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function "+" (L : in COMPLEX; R : in REAL) return COMPLEX;
+ -- Purpose:
+ -- Returns arithmetic addition of L and R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in COMPLEX
+ -- R in REAL
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- "+"(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function "+" (L : in COMPLEX_POLAR; R : in COMPLEX_POLAR)
+ return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns arithmetic addition of L and R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
+ -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if L.ARG = -MATH_PI
+ -- Error if R.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+
+ function "+" (L : in REAL; R : in COMPLEX_POLAR) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns arithmetic addition of L and R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in REAL
+ -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if R.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function "+" (L : in COMPLEX_POLAR; R : in REAL) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns arithmetic addition of L and R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
+ -- R in REAL
+ -- Error conditions:
+ -- Error if L.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function "-" (L : in COMPLEX; R : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns arithmetic subtraction of L minus R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in COMPLEX
+ -- R in COMPLEX
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- "-"(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function "-" (L : in REAL; R : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns arithmetic subtraction of L minus R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in REAL
+ -- R in COMPLEX
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- "-"(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function "-" (L : in COMPLEX; R : in REAL) return COMPLEX;
+ -- Purpose:
+ -- Returns arithmetic subtraction of L minus R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in COMPLEX
+ -- R in REAL
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- "-"(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function "-" (L : in COMPLEX_POLAR; R : in COMPLEX_POLAR)
+ return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns arithmetic subtraction of L minus R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
+ -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if L.ARG = -MATH_PI
+ -- Error if R.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function "-" (L : in REAL; R : in COMPLEX_POLAR) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns arithmetic subtraction of L minus R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in REAL
+ -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if R.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+
+ function "-" (L : in COMPLEX_POLAR; R : in REAL) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns arithmetic subtraction of L minus R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
+ -- R in REAL
+ -- Error conditions:
+ -- Error if L.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function "*" (L : in COMPLEX; R : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns arithmetic multiplication of L and R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in COMPLEX
+ -- R in COMPLEX
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- "*"(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function "*" (L : in REAL; R : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns arithmetic multiplication of L and R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in REAL
+ -- R in COMPLEX
+ -- Error conditions:
+ -- None
+ -- Range:
+ -- "*"(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function "*" (L : in COMPLEX; R : in REAL) return COMPLEX;
+ -- Purpose:
+ -- Returns arithmetic multiplication of L and R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in COMPLEX
+ -- R in REAL
+ -- Error conditions:
+ -- None
+
+ -- Range:
+ -- "*"(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function "*" (L : in COMPLEX_POLAR; R : in COMPLEX_POLAR)
+ return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns arithmetic multiplication of L and R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
+ -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if L.ARG = -MATH_PI
+ -- Error if R.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function "*" (L : in REAL; R : in COMPLEX_POLAR) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns arithmetic multiplication of L and R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in REAL
+ -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
+ -- Error conditions:
+ -- Error if R.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function "*" (L : in COMPLEX_POLAR; R : in REAL) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns arithmetic multiplication of L and R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
+ -- R in REAL
+ -- Error conditions:
+ -- Error if L.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+
+ function "/" (L : in COMPLEX; R : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns arithmetic division of L by R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in COMPLEX
+ -- R in COMPLEX and R /= MATH_CZERO
+ -- Error conditions:
+ -- Error if R = MATH_CZERO
+ -- Range:
+ -- "/"(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function "/" (L : in REAL; R : in COMPLEX) return COMPLEX;
+ -- Purpose:
+ -- Returns arithmetic division of L by R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in REAL
+ -- R in COMPLEX and R /= MATH_CZERO
+ -- Error conditions:
+ -- Error if R = MATH_CZERO
+ -- Range:
+ -- "/"(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function "/" (L : in COMPLEX; R : in REAL) return COMPLEX;
+ -- Purpose:
+ -- Returns arithmetic division of L by R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in COMPLEX
+ -- R in REAL and R /= 0.0
+ -- Error conditions:
+ -- Error if R = 0.0
+ -- Range:
+ -- "/"(Z) is mathematically unbounded
+ -- Notes:
+ -- None
+
+ function "/" (L : in COMPLEX_POLAR; R : in COMPLEX_POLAR)
+ return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns arithmetic division of L by R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
+ -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
+ -- R.MAG > 0.0
+ -- Error conditions:
+ -- Error if R.MAG <= 0.0
+ -- Error if L.ARG = -MATH_PI
+ -- Error if R.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function "/" (L : in REAL; R : in COMPLEX_POLAR) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns arithmetic division of L by R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in REAL
+ -- R in COMPLEX_POLAR and R.ARG /= -MATH_PI
+ -- R.MAG > 0.0
+ -- Error conditions:
+ -- Error if R.MAG <= 0.0
+ -- Error if R.ARG = -MATH_PI
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+
+ function "/" (L : in COMPLEX_POLAR; R : in REAL) return COMPLEX_POLAR;
+ -- Purpose:
+ -- Returns arithmetic division of L by R
+ -- Special values:
+ -- None
+ -- Domain:
+ -- L in COMPLEX_POLAR and L.ARG /= -MATH_PI
+ -- R /= 0.0
+ -- Error conditions:
+ -- Error if L.ARG = -MATH_PI
+ -- Error if R = 0.0
+ -- Range:
+ -- result.MAG >= 0.0
+ -- -MATH_PI < result.ARG <= MATH_PI
+ -- Notes:
+ -- None
+end package MATH_COMPLEX;