在 Ada 中设置随机浮点生成的范围
Setting a range for Random float generation in Ada
Adam.Numerics.Float_Random 为 0 - 1.0
生成浮点值,但我想在用户定义的范围内生成浮点值。像 Min := 100.0
和 Max := 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;
看起来像家庭作业......我通常不会为这样的任务给出答案:)
首先,编译代码时应该收到警告,因为 Min 和 Max 在构建子类型时未初始化。
为避免这种情况,必须在已知值后声明子类型。
为此,请在声明块中声明您的子类型。
关于随机生成,得到一个在你范围内的值只是平移和缩放的问题。
最后,我会做这样的事情。
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;
在这种特殊情况下,子类型在这里毫无用处。
Adam.Numerics.Float_Random 为 0 - 1.0
生成浮点值,但我想在用户定义的范围内生成浮点值。像 Min := 100.0
和 Max := 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;
看起来像家庭作业......我通常不会为这样的任务给出答案:)
首先,编译代码时应该收到警告,因为 Min 和 Max 在构建子类型时未初始化。
为避免这种情况,必须在已知值后声明子类型。 为此,请在声明块中声明您的子类型。
关于随机生成,得到一个在你范围内的值只是平移和缩放的问题。
最后,我会做这样的事情。
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;
在这种特殊情况下,子类型在这里毫无用处。