Стандартная библиотека: 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);