Сгенерировать случайное число float в диапазоне от -100.001 до +100.001 с использованием Intel RdRand - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Существует библиотека RdRand от Intel, которая позволяет использовать генератор случайных чисел на базе эффекта энтропии кристалла процессора. https://ru.wikipedia.org/wiki/RdRand Сама библиотека и описание её использования: https://software.intel.com/en-us/art...ber-generation Внутри библиотеки пример, который просто печатает содержимое массива, сгенерированного случайным образом. Помогите, пожалуйста, получить код на Си, который позволит с помощью этой библиотеки сгенерировать число float в диапазоне между -100.001 до +100.001 Нашёл код только на базе генератора псевдослучайных чисел:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
double randoms(double min, double max)
{
    return (double)(rand())/RAND_MAX*(max - min) + min;
}
 
int main()
{
    srand((unsigned int)time(0));
    printf("%f\n",randoms(-100.001, 100.001));
    return 0;
}

Решение задачи: «Сгенерировать случайное число float в диапазоне от -100.001 до +100.001 с использованием Intel RdRand»

textual
Листинг программы
#include <stdio.h>
#include <limits.h>
 
float randoms(float *randf, float min, float max)
{
    int retries= 10;
    unsigned long long rand64;
 
    while(retries--) {
        if ( __builtin_ia32_rdrand64_step(&rand64) ) {
            *randf= (float)rand64/ULONG_MAX*(max - min) + min;
            return 1;
        }
    }
    return 0;
}
 
int main()
{
    float randf;
 
    if ( randoms(&randf, -100.001, 100.001) ) printf("%f\n", randf);
    else printf("Failed to get a random value\n");
    return 0;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек: iostream.h, cmath.h, inttypes.h
  2. Макросы и константы:
    • UINT64_C(val) - преобразует 64-битное беззнаковое целое число в строку
    • LLONG_MAX, LLONG_MIN, ULLONG_MAX - максимальные значения для 64-битных значений
  3. Объявление функции randoms:
    • Принимает указатель на переменную типа float &randf, значения min и max
    • Возвращает 1 при успешном генерировании случайного числа, 0 - в противном случае
  4. Объявление функции main:
    • Главная функция программы
    • Выполняет генерацию случайного числа с помощью функции randoms
    • Выводит сгенерированное число на экран
    • Возвращает 0, завершая работу программы
  5. Генерация случайного числа с помощью функции randoms:
    • Переменная retries инициализируется значением 10
    • Цикл while выполняется 10 раз
    • В каждой итерации происходит попытка сгенерировать случайное число с помощью инструкции __builtin_ia32_rdrand64_step
    • Если генерация прошла успешно, значение переменной rand64 приводится к типу float и преобразуется в диапазон от min до max
    • Переменная randf получает сгенерированное случайное число
    • Функция возвращает 1
  6. Вывод сообщения об ошибке в случае неудачной генерации случайного числа

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы