Я не знаю, исправили ли вы это уже или нет, но вот ответ.
Прежде всего, как я вижу, вы передаете Float
при создании экземпляра универсальной версии, вместо этого вы можете использовать не универсальную.
Если вы решите использовать универсальную версию, вам нужно будет сделать это вторым способом, прежде чем использовать его функции, необходимо создать экземпляр пакета.
Глядя на a-ngelfu.ads , вы можете увидеть фактический прототип нужной вам функции (есть еще одна функция для натурального логарифма с одним параметром):
function Log(X, Base : Float_Type'Base) return Float_Type'Base;
Вы можете видеть там, что база тоже должна быть типа с плавающей точкой. Правильный код для универсальной версии будет:
with Ada.Numerics.Generic_Elementary_Functions;
procedure F(Value : in Float) is
-- Instantiate the package:
package Float_Functions is new Ada.Numerics.Generic_Elementary_Functions (Float);
-- The logarithm:
The_Log : Integer := 0;
begin
The_Log := Integer(Float_Functions.Log(Value, 10.0));
G(Value, The_Log);
end;
Неуниверсальный будет точно таким же:
with Ada.Numerics.Elementary_Functions;
procedure F(Value : in Float) is
-- The logarithm:
The_Log : Integer := 0;
begin
The_Log := Integer(Ada.Numerics.Elementary_Functions.Log(Value, 10.0));
G(Value, The_Log);
end;