如何在Ada中生成浮点随机数?

时间:2018-05-11 20:04:38

标签: random ada protected

我有一个包含任务的程序。 我想生成两个随机数,

首先:介于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;

我有两个入口点,我必须传递这些值。

那么如何在受保护单元中实现这两个随机数生成器呢?

2 个答案:

答案 0 :(得分:2)

这是解决方案的一部分草图。

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;

......和其他程序类似。

答案 1 :(得分:1)

由于它似乎是为了你的学习,我只会指出你正确的方向。 Ada Language Reference Manual包括Ada标准库的详细说明。这些恰好包括在明确定义的范围内生成具有相等分布的随机浮点值的规定。