Генерация случайной продолжительности - PullRequest
2 голосов
/ 20 мая 2019

Я хочу знать, как генерировать случайную длительность в Аде.

Вот мой код:

time : Duration;
time := 0.8;

Как я могу добавить случайное значение к time между 0,5 и 1,3?

1 Ответ

8 голосов
/ 20 мая 2019

Ответ не так прост, как можно было бы надеяться.Язык Ada предоставляет генераторы случайных чисел для типов с плавающей запятой и для дискретных типов.Тип Duration - это тип с фиксированной точкой.Следующий код генерирует случайную длительность в диапазоне от 0,500 до 1300 секунд (со случайной изменчивостью с точностью до миллисекунды).

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Numerics.Discrete_Random;

procedure Main is

   Random_Duration : Duration;
   type Custom is range 500..1300;
   package Rand_Cust is new Ada.Numerics.Discrete_Random(Custom);
   use Rand_Cust;
   Seed : Generator;
   Num  : Custom;
begin
   -- Create the seed for the random number generator
   Reset(Seed);

   -- Generate a random integer from 500 to 1300
   Num := Random(Seed);

   -- Convert Num to a Duration value from 0.5 to 1.3
   Random_Duration := Duration(Num) / 1000.0;

   -- Output the random duration value
   Put_Line(Random_Duration'Image);
end Main;
...