Задать вопрос
vs_convoy
@vs_convoy

Как написать формулу для датчика псевдослучайных чисел, как это сделать?

Как написать формулу для rand() что бы она генерировала, от -10.00000 до +10.00000, обязательно дробную часть и знак? вида 9.34552 или -5.35367

накрутил, что-то вида array[ i ] = ((rand() % 100000) / 100000.0) + (-10 + rand()%20) ;
  • Вопрос задан
  • 268 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 2
#include <vector>
#include <random>

std::vector<double> result(100);

std::uniform_real_distribution<double> unif(-10.0, 10.0);
std::default_random_engine re;

for (int i = 0; i < 100; ++i) {
    result[i] = unif(re);
}

std::sort(result.begin(), result.end());
Ответ написан
petermzg
@petermzg
Самый лучший программист
У rand() диапазон от 0 до 32767, так что
((rand() % 100000) / 100000.0) // не вариант
int d = rand() << 2; // это до 131068
d += rand();
d = d % 100000;
float i = ((rand() % 20) + (d / 100000.0)) - 10.0;
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Любое число проще сгенерировать так:
1. Создаём строку целой части полного диапазона из массива цифр [0,1,2,3,4,5,6,7,8,9].
2. Создаём строку дробной части [0,1,2,3,4,5,6,7,8,9].
3. Конкатенируем через точку "." и преобразуем строку в число
4. Сдвигаем: вычитаем из полученного половину диапазона (или же просто рандомим знак).
Ответ написан
Комментировать
rhaport
@rhaport
rand() возвращает псевдо-случайное число от 0 до RAND_MAX. Вам нужно от -10 до +10 с дробной частью. Можно сделать так:

float r = ((float)(rand()) / RAND_MAX) * 20 - 10;

Деля на RAND_MAX, получаем float число от 0 до 1. Растягиваем до 20 и смещаем на 10.

Код программы с выводом:
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    int i, num;

    if (argc > 1)
    {   
        sscanf(argv[1], "%d", &num);
    }   
    else
    {   
        num = 0;
    }   
    
    for (i = 0; i < num; i++)
    {   
        float r;
    
        r = ((float)(rand()) / RAND_MAX) * 20 - 10; 
    
        printf("%3.6f\n", r);  
    }   

    return 0;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы