在 Ada 中设置随机浮点生成的范围

Setting a range for Random float generation in Ada

Adam.Numerics.Float_Random 为 0 - 1.0 生成浮点值,但我想在用户定义的范围内生成浮点值。像 Min := 100.0Max := 200.0。像这样:

with Ada.Text_IO, Ada.Integer_Text_IO, Ada.Float_Text_IO;
use Ada.Text_IO, Ada.Integer_Text_IO, Ada.Float_Text_IO;
with Ada.Numerics.Float_Random; use Ada.Numerics.Float_Random;

procedure test1 is
  
   Min, Max, Answer : Float;
   
   subtype Custom is Float range Min .. Max;
   package New_Package is new Ada.Numerics.Float_Random(Custom);
   use New_Package;
   
   RF : Generator;
   
begin

Reset(RF);

Get(Min);
Get(Max);
Answer := Random(RF);
Put(Answer, Fore => 1, Aft => 2, Exp => 0);

end test1;

看起来像家庭作业......我通常不会为这样的任务给出答案:)

首先,编译代码时应该收到警告,因为 MinMax 在构建子类型时未初始化。

为避免这种情况,必须在已知值后声明子类型。 为此,请在声明块中声明您的子类型。

关于随机生成,得到一个在你范围内的值只是平移和缩放的问题。

最后,我会做这样的事情。

with Ada.Float_Text_IO; use Ada.Float_Text_IO;
with Ada.Numerics.Float_Random; use Ada.Numerics.Float_Random;

procedure test1 is
   
   Min, Max : Float;
   
   RF : Generator;
   
begin
   
   Reset(RF);
   
   Get(Min);
   Get(Max);
   declare
      subtype Custom is Float range Min .. Max;
      Answer : Custom;
   begin
      Answer := (Random(RF) * (Max - Min)) + Min;
      Put(Answer, Fore => 1, Aft => 2, Exp => 0);
   end;
end test1;

在这种特殊情况下,子类型在这里毫无用处。