Я хочу знать, как создать случайную продолжительность в ada.
Есть мой код:
time : Duration;
time := 0.8;
Как я могу добавить случайное значение к time
от 0,5 до 1,3?
@JohnColeman Я нашел, как генерировать случайное целое число или число с плавающей запятой, но без длительности. Я не знаю, как это работает.
Это отдельный вопрос - как преобразовать числа с плавающей запятой (или целые числа) в длительность. Вероятно, для этой цели существует функция преобразования. Я был бы удивлен, если бы случайная продолжительность могла быть достигнута каким-либо другим способом, кроме создания случайного числа, а затем его преобразования.
Длительность — это тип с фиксированной точкой, поэтому вам потребуется преобразование. Но это просто: если f — это число с плавающей запятой, Duration(f) — это преобразование в тип Duration. NB: я бы не стал использовать «время» для вашей переменной, так как имя конфликтует с типом Time в Ada.Calendar. Ничего страшного, просто лучше избегать путаницы.
Ответ не так прост, как можно было бы надеяться. Язык Ада предоставляет генераторы случайных чисел для типов с плавающей запятой и для дискретных типов. Тип Duration является типом с фиксированной точкой. Следующий код будет генерировать случайную продолжительность в диапазоне от 0,500 до 1,300 секунд (со случайной изменчивостью с точностью до миллисекунды).
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;
Типы с фиксированной точкой можно рассматривать как вариант дискретных типов... Я думал, что это сработает! Поскольку это не так, не является ли любопытным упущением отсутствие варианта Fixed_Random в Стандарте?
Типы с фиксированной точкой считаются разновидностью реальных типов в Аде. Вещественные типы включают типы с фиксированной запятой и типы с плавающей запятой. Ада классифицирует скалярные типы на основе поддерживаемых ими абстракций, а не на основе их физического представления.
Я не программирую на Аде, но в стандартной библиотеке Ады наверняка есть генератор случайных чисел. Быстрая проверка показывает это