Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
igorbelykh
8 / 8 / 2
Регистрация: 01.03.2013
Сообщений: 85
18.03.2013, 00:38     Генерация случайного числа больше нуля, но меньше единицы #1
Всем привет.

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

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

C++ Генерация случайного числа
Генерация случайного простого числа C++
Запись текста и генерация случайного числа C++
Генерация случайного числа каждую секунду C++
Генерация случайного числа с плавающей чточкой C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
 Аватар для HighPredator
5352 / 1735 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
18.03.2013, 01:06     Генерация случайного числа больше нуля, но меньше единицы #2
Вам придется писать свой тип данных, а уже под него генератор.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
18.03.2013, 01:18     Генерация случайного числа больше нуля, но меньше единицы #3
http://en.cppreference.com/w/cpp/num...rate_canonical
HighPredator
 Аватар для HighPredator
5352 / 1735 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
18.03.2013, 01:31     Генерация случайного числа больше нуля, но меньше единицы #4
yuron_477, и что?
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 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;
}
HighPredator
 Аватар для HighPredator
5352 / 1735 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
18.03.2013, 02:11     Генерация случайного числа больше нуля, но меньше единицы #6
yuron_477, просто double дает только 15 десятичных разрядов, потому что у него 53 значащих бита.

Добавлено через 19 минут
А за пример спасибо.
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2013, 21:57     Генерация случайного числа больше нуля, но меньше единицы
Еще ссылки по теме:

C++ Генерация случайного числа
Генерация случайного четырехзначного числа без цифр, больших 7 и 0 C++
Генерация пятизначного случайного числа C++

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

Или воспользуйтесь поиском по форуму:
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);
}
Yandex
Объявления
18.03.2013, 21:57     Генерация случайного числа больше нуля, но меньше единицы
Ответ Создать тему
Опции темы

Текущее время: 10:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru