Заполнение массива элементами типа float - C (СИ)

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

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

Здравствуйте! Мне надо заполнить массив элементами типа float, причем это должны быть числа из ВСЕГО диапазона допустимых значений. У меня идея такая: генерирую с помощью frand() 2 числа, и их разность умножаю на 10в степени от 0 до 38. т.е.:
#define frand()  ((float) rand()/(RAND_MAX+1.0))
(frand()-frand())*1E+(какая-то степень от 0 до 38).
И возникла проблема как это сделать? 1E+(константа) должно быть.. Подскажите как сделать,чтоб степень рандомной была? Или подскажите каким ещё способом можно массив заполнить)) Заранее спасибо.

Решение задачи: «Заполнение массива элементами типа 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;
}

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

  1. Объявлена функция frand(), которая возвращает тип float.
  2. В функции используется структура union с именем mix, которая содержит следующие поля:
    • i - переменная типа unsigned int
    • c - массив типа unsigned char размером 4 байта
    • f - переменная типа float
  3. В функции используется цикл do, который выполняется до тех пор, пока не будет получено значение, не равное 0x7f800000.
  4. Внутри цикла do используется вложенный цикл for, который заполняет массив c случайными байтами от 0 до 255.
  5. Значение переменной mix.i проверяется на равенство 0x7f800000. Если это так, то текущее значение не подходит, и мы возвращаемся к началу цикла do.
  6. После выхода из цикла do возвращается значение переменной mix.f.
  7. Значение, возвращаемое функцией frand(), будет случайным числом типа float в диапазоне от -6.24 до 6.24.

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


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

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

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