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