如何在 Ada 中生成浮点数随机数?
How to generate float random numbers in Ada?
我有一个带有任务的程序。
我想生成两个随机数,
首先:在 0.5 和 3.5 之间
第二:在 4.5 到 6.5 之间
我必须在受保护的单元中实现它:
with Ada.Text_IO, Ada.Numerics.Float_Random;
use Ada.Text_IO, Ada.Numerics.Float_Random;
procedure simulation is
.
.
.
protected Helper is
procedure generateFirstRandomNumber;
procedure generateSecondRandomNumber;
end Helper;
.
.
.
protected helper is
procedure generateFirstRandomNumber is
begin
...
end generateFirstRandomNumber;
procedure generateSecondRandomNumber is
begin
...
end generateSecondRandomNumber;
end helper;
.
.
.
begin
.
.
.
end simulation;
我有两个入口点,我必须在其中传递这些值。
那么如何在受保护单元中实现这两个随机数生成器?
看来是为了你的学习,我只会给你指明正确的方向。 Ada Language Reference Manual 包括对 Ada 标准库的详细描述。这些恰好包括用于生成在明确定义的范围内均匀分布的随机浮点值的规定。
这是部分解决方案的草图。
protected Helper is
procedure Generate_First_Random_Number (Result : out Float);
procedure Generate_Second_Random_Number (Result : out Float);
首先,我希望我没有踩到你的脚趾,但这是更标准的 Ada 风格 (Title_Case_With_Underscores)。
其次,你需要以某种方式得到结果。您不能使用函数,因为不允许函数更改 PO 的内部状态,并且该内部状态的(部分)是随机数生成器。
第三,我会声明子类型来表示您必须提供的范围:例如 subtype Lower_Range is Float range 0.5 .. 3.5;
。
private
Gen : Ada.Numerics.Float_Random.Generator;
必须在受保护规范的私有部分声明内部变量。而且,作为一般规则,最好使用完全限定的名称,这样对象的来源就很明显了(就个人而言,我为 Ada.Text_IO
破例)。
end Helper;
protected body Helper is
你必须在这里使用 body
这个词。
procedure Generate_First_Random_Number (Result : out Float)
is
Rnd : constant Float := Ada.Numerics.Float_Random.Random (Gen);
Rnd
在 0.0 .. 1.0
,
范围内
begin
Result := 3.0 * Rnd + 0.5;
但您想要 0.5 .. 3.5
中的结果。
end Generate_First_Random_Number;
... 其他程序也类似。
我有一个带有任务的程序。 我想生成两个随机数,
首先:在 0.5 和 3.5 之间
第二:在 4.5 到 6.5 之间
我必须在受保护的单元中实现它:
with Ada.Text_IO, Ada.Numerics.Float_Random;
use Ada.Text_IO, Ada.Numerics.Float_Random;
procedure simulation is
.
.
.
protected Helper is
procedure generateFirstRandomNumber;
procedure generateSecondRandomNumber;
end Helper;
.
.
.
protected helper is
procedure generateFirstRandomNumber is
begin
...
end generateFirstRandomNumber;
procedure generateSecondRandomNumber is
begin
...
end generateSecondRandomNumber;
end helper;
.
.
.
begin
.
.
.
end simulation;
我有两个入口点,我必须在其中传递这些值。
那么如何在受保护单元中实现这两个随机数生成器?
看来是为了你的学习,我只会给你指明正确的方向。 Ada Language Reference Manual 包括对 Ada 标准库的详细描述。这些恰好包括用于生成在明确定义的范围内均匀分布的随机浮点值的规定。
这是部分解决方案的草图。
protected Helper is
procedure Generate_First_Random_Number (Result : out Float);
procedure Generate_Second_Random_Number (Result : out Float);
首先,我希望我没有踩到你的脚趾,但这是更标准的 Ada 风格 (Title_Case_With_Underscores)。
其次,你需要以某种方式得到结果。您不能使用函数,因为不允许函数更改 PO 的内部状态,并且该内部状态的(部分)是随机数生成器。
第三,我会声明子类型来表示您必须提供的范围:例如 subtype Lower_Range is Float range 0.5 .. 3.5;
。
private
Gen : Ada.Numerics.Float_Random.Generator;
必须在受保护规范的私有部分声明内部变量。而且,作为一般规则,最好使用完全限定的名称,这样对象的来源就很明显了(就个人而言,我为 Ada.Text_IO
破例)。
end Helper;
protected body Helper is
你必须在这里使用 body
这个词。
procedure Generate_First_Random_Number (Result : out Float)
is
Rnd : constant Float := Ada.Numerics.Float_Random.Random (Gen);
Rnd
在 0.0 .. 1.0
,
begin
Result := 3.0 * Rnd + 0.5;
但您想要 0.5 .. 3.5
中的结果。
end Generate_First_Random_Number;
... 其他程序也类似。