Стандартная библиотека: Numerics
Стандартная библиотека обеспечивает поддержку широко распространенных математических операций для типов с плавающей запятой, комплексных чисел и матриц. В нижеследующих разделах приводится краткое введение в эти математические операции.
Элементарные функции
Пакет Ada.Numerics.Elementary_Functions
обеспечивает общепринятые
операции для типов с плавающей точкой, такие как квадратный корень, логарифм и
тригонометрические функции (типа sin, cos). Например:
Здесь мы используем стандартные константы e
и Pi
из пакета
Ada.Numerics
.
Пакет Ada.Numerics.Elementary_Functions
предоставляет операции для типа
Float
. Аналогичные пакеты есть для типов Long_Float
и
Long_Long_Float
.
Например, пакет Ada.Numerics.Long_Elementary_Functions
предлагает тот
же набор операций для типа Long_Float
.
Кроме того, пакет Ada.Numerics.Generic_Elementary_Functions
- это
настраиваемая версия пакета, которую можно использовать для пользовательских
типов с плавающей запятой. Фактически, пакет Elementary_Functions
можно определить следующим образом:
package Elementary_Functions is new
Ada.Numerics.Generic_Elementary_Functions (Float);
Генерация случайных чисел
Пакет Ada.Numerics.Float_Random
предоставляет простой генератор
случайных чисел с диапазоном от 0,0 до 1,0. Чтобы использовать его, объявите
генератор G
, который вы затем передадите в Random
. Например:
Стандартная библиотека также включает генератор случайных чисел для
дискретных чисел, который является частью пакета
Ada.Numerics.Discrete_Random
. Поскольку это
настраиваемый пакет, необходимо создать его экземпляр для требуемого
дискретного типа. Это позволяет вам задать диапазон генератора. В
следующем примере создается приложение, отображающее случайные целые
числа от 1 до 10:
Здесь пакет R
создается с типом Random_Range
с
ограничением диапазона от 1 до 10. Это позволяет нам контролировать
диапазон получаемых случайных чисел. Мы могли бы легко изменить приложение для
получения случайных целых чисел от 0 до 20, изменив спецификацию
подтипа Random_Range
.
Аналогично мы можем использовать типы с плавающей запятой
и с фиксированной запятой.
Комплексные числа
Пакет Ada.Numerics.Complex_Types
обеспечивает поддержку комплексных
чисел, а пакет Ada.Numerics.Complex_Elementary_Functions
обеспечивает поддержку общепринятые операций с типами комплексных чисел,
аналогично пакету Ada.Numerics.Elementary_Functions
.
Наконец, вы можете использовать пакет Ada.Text_IO.Complex_IO
для
выполнения операций ввода-вывода над комплексными числами. В следующем
примере мы объявляем переменные типа Complex
и инициализируем
их с помощью агрегата:
Как видно из этого примера, все общепринятые операции, такие, как *
и +
, доступны для комплексных типов. У вас также есть типичные операции
комплексных чисел, такие как Argument
и Exp
. Помимо инициализации
комплексных чисел в декартовой форме с использованием агрегатов, вы можете
получать их из полярной формы, вызвав функцию Compose_From_Polar
.
Пакеты Ada.Numerics.Complex_Types
и
Ada.Numerics.Complex_Elementary_Functions
предоставляют операции для
типа Float
. Подобные пакеты доступны для типов Long_Float
и
Long_Long_Float
. Кроме того, с помощью настраиваемых пакетов
Ada.Numerics.Generic_Complex_Types
и
Ada.Numerics.Generic_Complex_Elementary_Functions
можно создавать комплексные типы и их функции из пользовательских или
предопределенных типов с плавающей запятой. Например:
with Ada.Numerics.Generic_Complex_Types;
with Ada.Numerics.Generic_Complex_Elementary_Functions;
with Ada.Text_IO.Complex_IO;
procedure Show_Elem_Math is
package Complex_Types is new
Ada.Numerics.Generic_Complex_Types (Float);
use Complex_Types;
package Elementary_Functions is new
Ada.Numerics.Generic_Complex_Elementary_Functions
(Complex_Types);
use Elementary_Functions;
package C_IO is new Ada.Text_IO.Complex_IO
(Complex_Types);
use C_IO;
X, Y : Complex;
R, Th : Float;
Работа с векторами и матрицами
Пакет Ada.Numerics.Real_Arrays
обеспечивает поддержку векторов и матриц.
Он включает в себя типичные операции с матрицами, такие как обращение,
нахождение определителя и собственного значения, а также более простые
операции, такие как сложение и умножение матриц. Вы можете объявлять векторы и
матрицы, используя типы Real_Vector
и Real_Matrix
соответственно.
В следующем примере используются некоторые операции из пакета
Ada.Numerics.Real_Arrays
:
Если вы не указываете размеры матрицы, они автоматически определяются на основе агрегата, используемого для инициализации. Хотя вы также можете использовать явные диапазоны. Например:
M1 : Real_Matrix (1 .. 2, 1 .. 3) :=
((1.0, 5.0, 1.0),
(2.0, 2.0, 1.0));
Пакет Ada.Numerics.Real_Arrays
предоставляет операции для типа
Float
. Аналогичные пакеты доступны для типов Long_Float
и
Long_Long_Float
.
Кроме того, настраиваемый пакет Ada.Numerics.Generic_Real_Arrays
можно использовать для пользовательских типов с плавающей запятой.
Например, пакет Real_Arrays
может быть определен следующим образом:
package Real_Arrays is new
Ada.Numerics.Generic_Real_Arrays (Float);