Я столкнулся с удивительным поведением: я не могу взять square power
переменной.Ada
разрешает принимать square power
фактического значения.Ниже приведен пример кода:
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Long_Float_Text_IO;
with Ada.Float_Text_IO;
with Ada.Numerics.Long_Elementary_Functions;
use Ada.Numerics.Long_Elementary_Functions;
procedure Test_power is
testing : constant := -0.11603;
begin
Ada.Text_IO.Put("Works fine with numerical value entered directly: ");
Ada.Long_Float_Text_IO.Put (Item => -0.11603 ** 2.0, Fore => 3, Aft => 5, Exp => 0);
Ada.Text_IO.New_Line;
Ada.Text_IO.New_Line;
Ada.Text_IO.Put("This does not work: ");
Ada.Long_Float_Text_IO.Put (Item => testing ** 2.0, Fore => 3, Aft => 5, Exp => 0);
end Test_power;
output
на экране:
Works fine with numerical value entered directly: -0.01346
This does not work:
Execution terminated by unhandled exception
Exception name: ADA.NUMERICS.ARGUMENT_ERROR
Message: a-ngelfu.adb:96 instantiated at a-nlelfu.ads:18
Call stack traceback locations:
0x413ed5 0x42771d 0x427a2a 0x4010b4 0x401146 0x7c817075
Компиляция была сделана с использованием:
GPS 4.4.1 (20091215) hosted on i686-pc-mingw32
GNAT GPL 2010 (20100603)
Два вопроса:
(а) Что я делаю неправильно, когда беру testing ** 2.0
?
(б) Квадрат -0.11603
положителен 0.01346
.Так почему я также получаю отрицательный знак в моем первом выходе?
После некоторого дополнительного тестирования:
Если я беру только положительное значение 0.11603
, то выводится (егоквадрат) дает
(a) -0.01346
(b) 0.01346
, что может означать, что часть проблемы связана с negative sign
.
Большое спасибо ...