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

Rand() как именно генерируются эти числа - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Контейнер set. Найти имена всех файлов в папке http://www.cyberforum.ru/cpp-beginners/thread1150724.html
Здравствуйте . Есть такая задача : найти имена всех файлов в папке . Имена я нахожу нормально , но сохраняю каждое имя в отдельный индекс массива : WIN32_FIND_DATA FindFileData, FindFileData2; HANDLE hf1=FindFirstFile(L"C:\\dir\\*", &FindFileData); WCHAR fileNames; INT i=0; cout<<"dir1:"<<endl; if (hf1==INVALID_HANDLE_VALUE){puts("Path not found"); return 1;} do{...
C++ Возведение матрицы в степень Ребята помогите пожалуйста.. Вообще разобраться не могу, а препод сама ничерта не знает.. Надо на C++ 5.0.2 Пусть даны натуральное число n и (построчно) элементы квадратной вещественной матрицы A 5-го порядка. Вычислить n-ю степень этой матрицы. Знаю, как возвести во 2-ю степень, но код получится слииишком длинный. Пыталась найти формулы- и ничего не нашла.. http://www.cyberforum.ru/cpp-beginners/thread1150719.html
Сформировать список L, включив в него положительные элементы списка L1 и отрицательные элементы списка L2 C++
Сформировать список L, включив в него положительные элементы списка L1 и отрицательные элементы списка L2. Список L отсортировать в порядке возрастания абсолютных значений элементов. Помогите пожалуйста.
C++ Определить максимальный по модулю элемент элемент массива и позицию в которой он расположен
Помогите пожалуйста решить задачку по с++; Задан одномерный массив В , состоящий из n вещественных элементов. Определить максимальный по модулю элемент элемент массива и позицию в которой он расположен. Переместить данный элемент в последнюю позицию массива.
C++ Вывести float в шестнадцатеричном формате в поток http://www.cyberforum.ru/cpp-beginners/thread1150679.html
Задача состоит в том что бы вывести float в шестнадцатеричном формате в поток. Модификатор hex не помогает (нормально работает только с целыми положительными), такую штуку как form вижак не видит, что-то вроде взять адрес от туда прочитать void привести к int и вывести тоже не помагает.
C++ Найти все цифры числа, которые являются его делителями Пожалуйсто помогите с заданием. Я даже незнаю с чего начать... Задание: 1) задаем натуральное число с клавиатуры 2) сканирование данного числа и нахождения всех чисел на которое делится данное числа без остатка (делитеби взять из самого числа) То есть: К примеру я ввёл число 9728 делители это все числа заданного числа, то есть = 9, 7, 2, 8 подробнее

Показать сообщение отдельно
Scrapebs
0 / 0 / 0
Регистрация: 12.02.2014
Сообщений: 40
18.04.2014, 12:32     Rand() как именно генерируются эти числа
Функция rand(). Мне для ответа по ОПИ мало сказать что она возвращает псевдослучайные числа от 0 до RAND_MAX.
Надо рассказать как именно генерируются эти числа. Наверное, надо разбираться на основе текста функции.
В Linuxe, Windos по библиотекам stdlib.h лазил, целостного описания кажется не нашел,
зато нашел один файлик, кажется из папки с Builder-ом:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/* rand function */
#include <stdlib.h>
#include "xtls.h"
_STD_BEGIN
 
#define TSIZ    32  /* must be power of two */
#define TMSK    (TSIZ - 1)
#define XRND(x) (x) * 1664525L + 1013904223L
 
_TLS_DATA_DEF(_IMPLICIT_EXTERN, char, _Randinit, 0);
_TLS_DATA_DEF(_IMPLICIT_EXTERN, unsigned long, _Randseed, 1);
_TLS_DATA_DEF(static, unsigned long, idx, 0);
_TLS_ARR_DEF(static, unsigned long, rv, TSIZ);
 
int (rand)(void)
    {   /* compute pseudo-random value */
    char *pinit = _TLS_DATA_PTR(_Randinit);
    unsigned long *pseed = _TLS_DATA_PTR(_Randseed);
    unsigned long *pidx = _TLS_DATA_PTR(idx);
    unsigned long *prv = _TLS_ARR(rv);
    int j;
 
    if (*pinit == 0)
        {   /* warm up, then initialize shuffle table */
        for (j = 0; j < 8; ++j)
            *pseed = XRND(*pseed);
        for (j = 0; j < TSIZ; ++j)
            prv[j] = (*pseed = XRND(*pseed));
        *pidx = prv[TSIZ - 1];
        *pinit = 1;
        }
    *pseed = XRND(*pseed);
    j = *pidx & TMSK;
    *pidx = prv[j];
    prv[j] = *pseed;
 
 #if _ILONG
    return (*pidx & RAND_MAX);
 
 #else /* _ILONG */
    return ((*pidx >> 16) & RAND_MAX);
 #endif /* _ILONG */
 
    }
_STD_END
 
/*
 * Copyright (c) 1992-2006 by P.J. Plauger.  ALL RIGHTS RESERVED.
 * Consult your license regarding permissions and restrictions.
V5.01:1422 */
Если это то что мне нужно, то как объяснить написанное словами?
Начать хотя бы с того, что такое "(x) * 1664525L + 1013904223L"?
Заранее спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 06:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru