Заполнение массива элементами типа float - C (СИ)
Формулировка задачи:
Здравствуйте! Мне надо заполнить массив элементами типа float, причем это должны быть числа из ВСЕГО диапазона допустимых значений.
У меня идея такая: генерирую с помощью frand() 2 числа, и их разность умножаю на 10в степени от 0 до 38. т.е.:
И возникла проблема как это сделать? 1E+(константа) должно быть..
Подскажите как сделать,чтоб степень рандомной была?
Или подскажите каким ещё способом можно массив заполнить))
Заранее спасибо.
#define frand() ((float) rand()/(RAND_MAX+1.0)) (frand()-frand())*1E+(какая-то степень от 0 до 38).
Решение задачи: «Заполнение массива элементами типа float»
textual
Листинг программы
float frand() { union { unsigned int i; unsigned char c[sizeof(float)]; float f; } mix; do { for(int i=0; i<4; ++i) mix.c[i] = static_cast<unsigned char>(rand()%256); // заполним число случайными байтами } while((mix.i & 0x7f800000) == 0x7f800000); // Если получилась бесконечность или NAN, повторим return mix.f; }
Объяснение кода листинга программы
- Объявлена функция
frand()
, которая возвращает типfloat
. - В функции используется структура
union
с именемmix
, которая содержит следующие поля:i
- переменная типаunsigned int
c
- массив типаunsigned char
размером 4 байтаf
- переменная типаfloat
- В функции используется цикл
do
, который выполняется до тех пор, пока не будет получено значение, не равное 0x7f800000. - Внутри цикла
do
используется вложенный циклfor
, который заполняет массивc
случайными байтами от 0 до 255. - Значение переменной
mix.i
проверяется на равенство 0x7f800000. Если это так, то текущее значение не подходит, и мы возвращаемся к началу циклаdo
. - После выхода из цикла
do
возвращается значение переменнойmix.f
. - Значение, возвращаемое функцией
frand()
, будет случайным числом типаfloat
в диапазоне от -6.24 до 6.24.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д