Создать случайную продолжительность

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

Есть мой код:

time : Duration;
time := 0.8;

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

Я не программирую на Аде, но в стандартной библиотеке Ады наверняка есть генератор случайных чисел. Быстрая проверка показывает это

John Coleman 20.05.2019 14:50

@JohnColeman Я нашел, как генерировать случайное целое число или число с плавающей запятой, но без длительности. Я не знаю, как это работает.

A.Pissicat 20.05.2019 14:55

Это отдельный вопрос - как преобразовать числа с плавающей запятой (или целые числа) в длительность. Вероятно, для этой цели существует функция преобразования. Я был бы удивлен, если бы случайная продолжительность могла быть достигнута каким-либо другим способом, кроме создания случайного числа, а затем его преобразования.

John Coleman 20.05.2019 15:00

Длительность — это тип с фиксированной точкой, поэтому вам потребуется преобразование. Но это просто: если f — это число с плавающей запятой, Duration(f) — это преобразование в тип Duration. NB: я бы не стал использовать «время» для вашей переменной, так как имя конфликтует с типом Time в Ada.Calendar. Ничего страшного, просто лучше избегать путаницы.

Zerte 20.05.2019 15:06
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
481
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ответ не так прост, как можно было бы надеяться. Язык Ада предоставляет генераторы случайных чисел для типов с плавающей запятой и для дискретных типов. Тип 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 в Стандарте?

Álex 23.05.2019 10:44

Типы с фиксированной точкой считаются разновидностью реальных типов в Аде. Вещественные типы включают типы с фиксированной запятой и типы с плавающей запятой. Ада классифицирует скалярные типы на основе поддерживаемых ими абстракций, а не на основе их физического представления.

Jim Rogers 23.05.2019 15:05

Другие вопросы по теме