Ada Programming/Libraries/Ada.Numerics.Generic Complex Types
This language feature is available from Ada 95 on.
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
editThere 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
edit-- 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
<>;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.0; j :constant
Imaginary := 1.0;end
Ada.Numerics.Generic_Complex_Types;
See also
editWikibook
edit- Ada Programming
- Ada Programming/Libraries
- Ada Programming/Mathematical calculations#Complex arithmethic
External examples
edit- 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
editAda 95
editAda 2005
editAda 2012
editOpen-Source Implementations
editFSF GNAT
- Specification: a-ngcoty.ads
- Body: a-ngcoty.adb
drake
- Specification: numerics/a-ngcoty.ads
- Body: numerics/a-ngcoty.adb