Ada Programming/Libraries/Ada.Numerics.Generic Complex Types
This language feature is available from Ada 95 on.Category:Book:Ada Programming/Ada 95 feature#Ada.Numerics.Generic Complex Types Ada.Numerics.Generic_Complex_Types is a unit of the Predefined Language Environment since Ada 95.
The generic package Ada.Numerics.Generic_Complex_Types defines complex type for a defined floating point type. Being generic it can not only be used for predefined floating point types but also for any user defined floating type.
Usage
There is an extensive usage guide in Ada Programming/Mathematical calculations. Here the relevant extract:
with
Ada.Numerics.Generic_Complex_Types;procedure
Numeric_7is
type
Value_Typeis
digits
12range
-999_999_999_999.0e999 .. 999_999_999_999.0e999;package
Complex_Typesis
new
Ada.Numerics.Generic_Complex_Types ( Value_Type);use
type
Complex_Types.Complex;
Specification
-- Standard Ada library specification -- Copyright (c) 2003-2018 Maxim Reznik <reznikmm@gmail.com> -- Copyright (c) 2004-2016 AXE Consultants -- Copyright (c) 2004, 2005, 2006 Ada-Europe -- Copyright (c) 2000 The MITRE Corporation, Inc. -- Copyright (c) 1992, 1993, 1994, 1995 Intermetrics, Inc. -- SPDX-License-Identifier: BSD-3-Clause and LicenseRef-AdaReferenceManual -- -------------------------------------------------------------------------generic
type
Realis
digits
<>Category:Book:Ada Programming/Pages containing deprecated templates;package
Ada.Numerics.Generic_Complex_Typesis
pragma
Pure (Generic_Complex_Types);type
Complexis
record
Re, Im : Real'Base;end
record
;type
Imaginaryis
private
;pragma
Preelaborable_Initialization (Imaginary); i :constant
Imaginary; j :constant
Imaginary;function
Re (X : Complex)return
Real'Base;function
Im (X : Complex)return
Real'Base;function
Im (X : Imaginary)return
Real'Base;procedure
Set_Re (X :in
out
Complex; Re :in
Real'Base);procedure
Set_Im (X :in
out
Complex; Im :in
Real'Base);procedure
Set_Im (X :out
Imaginary; Im :in
Real'Base);function
Compose_From_Cartesian (Re, Im : Real'Base)return
Complex;function
Compose_From_Cartesian (Re : Real'Base)return
Complex;function
Compose_From_Cartesian (Im : Imaginary)return
Complex;function
Modulus (X : Complex)return
Real'Base;function
"abs" (Right : Complex)return
Real'Baserenames
Modulus;function
Argument (X : Complex)return
Real'Base;function
Argument (X : Complex; Cycle : Real'Base)return
Real'Base;function
Compose_From_Polar (Modulus, Argument : Real'Base)return
Complex;function
Compose_From_Polar (Modulus, Argument, Cycle : Real'Base)return
Complex;function
"+" (Right : Complex)return
Complex;function
"-" (Right : Complex)return
Complex;function
Conjugate (X : Complex)return
Complex;function
"+" (Left, Right : Complex)return
Complex;function
"-" (Left, Right : Complex)return
Complex;function
"*" (Left, Right : Complex)return
Complex;function
"/" (Left, Right : Complex)return
Complex;function
"**" (Left : Complex; Right : Integer)return
Complex;function
"+" (Right : Imaginary)return
Imaginary;function
"-" (Right : Imaginary)return
Imaginary;function
Conjugate (X : Imaginary)return
Imaginaryrenames
"-";function
"abs" (Right : Imaginary)return
Real'Base;function
"+" (Left, Right : Imaginary)return
Imaginary;function
"-" (Left, Right : Imaginary)return
Imaginary;function
"*" (Left, Right : Imaginary)return
Real'Base;function
"/" (Left, Right : Imaginary)return
Real'Base;function
"**" (Left : Imaginary; Right : Integer)return
Complex;function
"<" (Left, Right : Imaginary)return
Boolean;function
"<=" (Left, Right : Imaginary)return
Boolean;function
">" (Left, Right : Imaginary)return
Boolean;function
">=" (Left, Right : Imaginary)return
Boolean;function
"+" (Left : Complex; Right : Real'Base)return
Complex;function
"+" (Left : Real'Base; Right : Complex)return
Complex;function
"-" (Left : Complex; Right : Real'Base)return
Complex;function
"-" (Left : Real'Base; Right : Complex)return
Complex;function
"*" (Left : Complex; Right : Real'Base)return
Complex;function
"*" (Left : Real'Base; Right : Complex)return
Complex;function
"/" (Left : Complex; Right : Real'Base)return
Complex;function
"/" (Left : Real'Base; Right : Complex)return
Complex;function
"+" (Left : Complex; Right : Imaginary)return
Complex;function
"+" (Left : Imaginary; Right : Complex)return
Complex;function
"-" (Left : Complex; Right : Imaginary)return
Complex;function
"-" (Left : Imaginary; Right : Complex)return
Complex;function
"*" (Left : Complex; Right : Imaginary)return
Complex;function
"*" (Left : Imaginary; Right : Complex)return
Complex;function
"/" (Left : Complex; Right : Imaginary)return
Complex;function
"/" (Left : Imaginary; Right : Complex)return
Complex;function
"+" (Left : Imaginary; Right : Real'Base)return
Complex;function
"+" (Left : Real'Base; Right : Imaginary)return
Complex;function
"-" (Left : Imaginary; Right : Real'Base)return
Complex;function
"-" (Left : Real'Base; Right : Imaginary)return
Complex;function
"*" (Left : Imaginary; Right : Real'Base)return
Imaginary;function
"*" (Left : Real'Base; Right : Imaginary)return
Imaginary;function
"/" (Left : Imaginary; Right : Real'Base)return
Imaginary;function
"/" (Left : Real'Base; Right : Imaginary)return
Imaginary;private
type
Imaginaryis
new
Real'Base; i :constant
Imaginary := 1.Category:Book:Ada Programming/Pages containing deprecated templates0; j :constant
Imaginary := 1.Category:Book:Ada Programming/Pages containing deprecated templates0;end
Ada.Category:Book:Ada Programming/Pages containing deprecated templatesNumerics.Category:Book:Ada Programming/Pages containing deprecated templatesGeneric_Complex_Types;
See also
Wikibook
External examples
- Search for examples of
Ada.Numerics.Generic_Complex_Types
in: Rosetta Code, GitHub (gists), any Alire crate or this Wikibook. - Search for posts related to
Ada.Numerics.Generic_Complex_Types
in: Stack Overflow, comp.lang.ada or any Ada related page.
Ada Reference Manual
Ada 95
Ada 2005
Ada 2012
Open-Source Implementations
FSF GNAT
- Specification: a-ngcoty.ads
- Body: a-ngcoty.adb
drake
- Specification: numerics/a-ngcoty.ads
- Body: numerics/a-ngcoty.adb