Кажется в функции умножения вектора на матрицу есть ошибка.
Ada.Numerics.Generic_Real_Arrays;
function "*" (Left : Real_Vector; Right : Real_Matrix) return Real_Vector;
Программа:
with Ada.Numerics.Real_Arrays;
use Ada.Numerics.Real_Arrays;
with Ada.Text_IO;
use Ada.Text_IO;
procedure Test1 is
A : constant Real_Vector := (1.0, 2.0);
B : constant Real_Matrix :=
((3.0, 5.0),
(7.0, 8.0));
C : constant Real_Vector := A * B;
begin
for i in C'Range (1) loop
Put_Line (C (i)'Img);
end loop;
end Test1;
Результаты на GNAT2011 и GNAT2012
------ GNAT 2011 -------
[ksicom@x58l GNAT_BUG2]$ ./test1
1.70000E+01
2.10000E+01
------ GNAT 2012 -------
[ksicom@x58l GNAT_BUG2]$ ./test1
1.00000E+01
2.60000E+01
Такая ошибка отлавливается элементарным тестом. Векторно-матричные операции вроде включены в стандарт Ada2005. Значит по идее должны быть тесты, проверяющие соответствие стандарту. На эту функцию их получается нет или как? Где в стандартной библиотеке проходит граница между тем, чем можно спокойно пользоваться и тем, что лучше подменять собственными надёжными велосипедами?
Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти