С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
igorbelykh
8 / 8 / 2
Регистрация: 01.03.2013
Сообщений: 85
#1

Генерация случайного числа больше нуля, но меньше единицы - C++

18.03.2013, 00:38. Просмотров 841. Ответов 7
Метки нет (Все метки)

Всем привет.

Подскажите, как можно генерировать псевдослучайное число больше нуля, но меньше единицы. При этом количество цифр после точки должно быть от 16 до 18 включительно.

Заранее всем спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2013, 00:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Генерация случайного числа больше нуля, но меньше единицы (C++):

Генерация случайного числа, максимально случайного - C++
Добрый день, задался вопросом как получить случайное число, но не псевдо-случайное по идее функции rand() и srand(time(NULL))...

Генерация случайного числа - C++
Проблемма такова: в программе необходимо получить несколько чисел, от 1 до 255 (или max будет другим -- пока не важно). Стандартные...

Генерация случайного числа - C++
Сори за вопрос может уже обсуждался не раз, но всё же возник. Как правильно сгенерировать число от 0 до 1 и какой тип данных лучше...

Генерация пятизначного случайного числа - C++
Нужно сгенерировать случайное число из пяти цифр и записать ее в переменную типа string. Пытаюсь 5 генерировать цифры в цикле, а как их...

Генерация случайного простого числа - C++
Добрый вечер всем! У меня такая проблемма. Необходимо чтобы сгенерировалось 2 простых случайных числа. Для этого я написал функцию с...

Генерация случайного числа каждую секунду - C++
Нужно каждую секунду генерировать случайное число. Ниже мой код, который выполняет задачу, но функция слип останавливает весь процесс и в...

7
HighPredator
5545 / 1858 / 346
Регистрация: 10.12.2010
Сообщений: 5,446
Записей в блоге: 2
18.03.2013, 01:06 #2
Вам придется писать свой тип данных, а уже под него генератор.
0
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
18.03.2013, 01:18 #3
http://en.cppreference.com/w/cpp/numeric/random/generate_canonical
0
HighPredator
5545 / 1858 / 346
Регистрация: 10.12.2010
Сообщений: 5,446
Записей в блоге: 2
18.03.2013, 01:31 #4
yuron_477, и что?
0
DiffEreD
1431 / 768 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
18.03.2013, 01:40 #5
Ну как что, вот пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <iomanip>
#include <random>
#include <ctime>
 
int main()
{
    std::mt19937 gen;
    gen.seed(unsigned(std::ctime(nullptr)));
    for(int n=0; n<10; ++n) {
        std::cout << std::setprecision(18) << std::generate_canonical<double, 10>(gen) << "\n";
    }
 
    return 0;
}
1
HighPredator
5545 / 1858 / 346
Регистрация: 10.12.2010
Сообщений: 5,446
Записей в блоге: 2
18.03.2013, 02:11 #6
yuron_477, просто double дает только 15 десятичных разрядов, потому что у него 53 значащих бита.

Добавлено через 19 минут
А за пример спасибо.
0
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,262
Завершенные тесты: 2
18.03.2013, 11:25 #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <time.h>
#include <math.h>
#include <windows.h>
 
using namespace std;
 
int main()  {
    srand((unsigned long)time(NULL));
    double value = (double)(rand() % (long)pow((double)10, (double)100)) / (rand() % (long)pow((double)10, (double)100) + 1);
    while(true)  {
        value = 0;
        double left = (double)(rand() % (long)pow((double)10, (double)100));
        value = left / (left + (double)(rand() % (long)pow((double)10, (double)100)) + 1);
        cout << value << endl;
        Sleep(100);
    }
    return 0;
}
0
igorbelykh
8 / 8 / 2
Регистрация: 01.03.2013
Сообщений: 85
18.03.2013, 21:57  [ТС] #8
Всем спасибо. Не стал заморачиваться, так как нужна только строковое значение, то решил это вот каким образом:
C++
1
2
3
4
5
6
7
8
9
10
11
wchar_t tmp[21];
srand((unsigned)time(NULL));
wchar_t subtmp[21];
while(wcslen(tmp) < 18){
    wsprintf(subtmp, L"%i", rand());
    if(wcslen(tmp) + wcslen(subtmp) > 20){
        int pos = 20 - wcslen(tmp);
        subtmp[pos] = L'\0';
    }
    wcscat_s(tmp, 21, subtmp);
}
0
18.03.2013, 21:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2013, 21:57
Привет! Вот еще темы с ответами:

Запись текста и генерация случайного числа - C++
Собственно задача такая: записать строки с рандомными числовым значением в некоторое количество создаваймых файлов. Файлы создаются без...

Генерация случайного числа с плавающей чточкой - C++
Добрый день. Подскажите как генерировать случайное число типа float или double. Обычно использую rand(), но она подходит только для целых,...

Генерация случайного числа при запуске программы - C++
Доброго всем времени суток. В данный момент потихоньку осваиваю C++ и столкнулся с такой вещью, что при использовании srand( (time(0) )...

Генерация случайного четырехзначного числа без цифр, больших 7 и 0 - C++
Нужно сгенерировать случайное четырехзначные число без цифр, больших 7 и 0. Пишу вот такой код: Но он ничего не выводится....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.