Поиск:

Ответ в темуСоздание новой темы Создание опроса
> генераторы _псевдо_случайных чисел, как они работаюти почему всегда_псевдо_? 
:(
    Опции темы
Alx
Дата 19.2.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



сабж...
как работают генераторы случайных чисел?


--------------------
PM MAIL WWW ICQ   Вверх
Mayk
Дата 19.2.2006, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



В гугль.
http://www.google.ru/search?hl=ru&#038...le&lr=

Цитата(Alx @ 20.2.2006, 02:00 Найти цитируемый пост)
сабж...
как работают генераторы случайных чисел?

по разному.
Цитата

Конгруэнтные генераторы Xn+1 = (A*Xn + C) mod M построены на базе трех модулей, которые уже давно хорошо себя зарекомендовали:

Добавлено @ 22:20
псевдо, потому что последовательность таких чисел можно повторить.
Грубо говоря
Код

srand(0)
cout << rand() << endl;
cout << rand() << endl;
cout << rand() << endl;

всегда выводит три одинаковых числа, сколько бы раз не запускали.
Добавлено @ 22:21
одинаковых не всмысле друг другу равны, а всмысле сколько раз не запускай - одно и то же увидишь
Добавлено @ 22:22
Ещё в вику:
http://ru.wikipedia.org/wiki/%D0%9F%D1%81%...%81%D0%BB%D0%BE
Добавлено @ 22:24
А ещё на http://random.org .
И на http://noentropy.net заодно =)


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Helicopterr
Дата 19.2.2006, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 20.8.2005
Где: Stavropol

Репутация: нет
Всего: 3



Вот тема очень похожая - http://forum.vingrad.ru/index.php?showtopic=72959
Что касается моего мнения, то в природе ничего абсолютно случайного нет, как и в компьютерных функциях рандомов.


--------------------
people can fly
PM MAIL   Вверх
SoWa
Дата 20.2.2006, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 6
Всего: 74



функцией Randomize генерируется страшненькое число как раз Конгруэнтным генератором. После этого по этому числу по некоторому алгоритму считается новое число и тебе выводится.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Mayk
Дата 20.2.2006, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Цитата(Helicopterr @ 20.2.2006, 03:22 Найти цитируемый пост)
Что касается моего мнения, то в природе ничего абсолютно случайного нет, как и в компьютерных функциях рандомов.

Хмм. А как же такие вещи как шумы звуковой платы? Навряд ли их можно воспроизвести повторно.



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
esperant0
Дата 20.2.2006, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



Можно использовать цифры трансцендентного числа


--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
Alx
Дата 24.2.2006, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



слушайте, а можете мне просто привести формулу и значения переменных, чтоб я на собстевнном опыте понял? например:

Цитата

a = 3
b = 5
c = sqrt(5)
h = 8^a

( a*h - c/b^c ) + |c-h|


какнить так, для тупых smile
просто мне нужно самому попробывать, тогда я пойму smile


--------------------
PM MAIL WWW ICQ   Вверх
Fin
Дата 24.2.2006, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 1
Всего: 10



В одной книжке утверждается, что ниже написанный код используется в библиотеках С++
Код

static unsigned long int next=1;

int rand(void)    //RAND_MAX = 32767
{
   next = next * 1103515245 + 12345;
   return (unsigned int) (next / 65536) % 32768;
}

void srand(unsigned int seed)
{
   next = seed;
}


И помоему эта тема также обсуждалась у Кнута в "Искуствах программирования". Надо будет глянуть.


--------------------
Пролетал мимо.
PM MAIL   Вверх
Alx
Дата 24.2.2006, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



Fin,
а когда нужно выполнять srand()?
и что передавать ей в параметр?


--------------------
PM MAIL WWW ICQ   Вверх
Fin
Дата 24.2.2006, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 1
Всего: 10



srand выполняют в самом начале программы, обычно ставят число полученное от часов системы. Это нужно, чтобы сбить последовательность. Иначе последовательность будет повторяться при каждом запуске программы.
Код

srand(time());



--------------------
Пролетал мимо.
PM MAIL   Вверх
Romikgy
Дата 24.2.2006, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 1
Всего: 146





--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Alx
Дата 24.2.2006, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



Fin,
smile
что ж за генератор такой, который от часов зависит? такой я гораздо проще бы сделал...

Код

echo sqrt(time());
и всё... красивое, непонятное число...
только никакой случаности...

разве все генераторы числе используют внешний источник СЧ?..
теперь понятнО, почему псевдо...


--------------------
PM MAIL WWW ICQ   Вверх
Partizan
Дата 24.2.2006, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 67



Alx ты совсем неправильно понял мысль smile


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Fin
Дата 24.2.2006, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 1
Всего: 10



Вероятность того, что ты запустиш программу в одно и тоже время, вплоть до милисекунды равна 1/(24*60*60*100) Так что, так именно делают в программах. Просто не используют стандартный генератор псевдослучайных чисел.
"Псевдослучайный" - потому что, цифры хоть и распределены по диапазону равномерно, но идут в строгой последовательности. Все генераторы, построенные на математических моделях, имеют цикл повторяемости. Через определенный промежуток запросов к генератору, идет полный повтор комбинации.
Кстати, тот алгоритм, что я привел выше, также есть по ссылке, которую показал Romikgy,

Это сообщение отредактировал(а) Fin - 24.2.2006, 21:37


--------------------
Пролетал мимо.
PM MAIL   Вверх
Fin
Дата 24.2.2006, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 1
Всего: 10



Попробуй позапускать несколько раз такой код:
Код

#include <iostream.h>
#include <time.h>

static unsigned long int next=1;
int rand(void)    //RAND_MAX = 32767
{
   next = next * 1103515245 + 12345;
   return (unsigned int) (next / 65536) % 32768;
}
void srand(unsigned int seed)
{
   next = seed;
}

int main()
{
    srand(time(0));
    for(int i=0; i<20; i++)
        cout << rand() <<endl;
    return 0;
}

Увидиш, что последовательность чисел не будет повторяться. Если заремить srand(time(0));, то последовательность чисел будет повторяться в каждом запуске программы.


--------------------
Пролетал мимо.
PM MAIL   Вверх
esperant0
Дата 24.2.2006, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



Цитата(Fin @ 24.2.2006, 21:34)
  Все генераторы, построенные на математических моделях, имеют цикл повторяемости. 

Нет не все!


--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
Fin
Дата 24.2.2006, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 1
Всего: 10



esperant0, Примерчик пожайлуста в студию.


--------------------
Пролетал мимо.
PM MAIL   Вверх
Alx
Дата 24.2.2006, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



Fin,
а чем твой си-шный пример лучше моего?
зачем все эти функции, если можно просто брать текущее время, как случайное число?


--------------------
PM MAIL WWW ICQ   Вверх
Fin
Дата 24.2.2006, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 1
Всего: 10



Если у твоего примера последовательно через равный промежуток времени брать запрос, то и получится результат такой же. Т.е. потеряется элемент псевдослучайности.
Твой пример хорош для разовой выемки. Но не для последовательной и целенаправленной.


--------------------
Пролетал мимо.
PM MAIL   Вверх
esperant0
Дата 24.2.2006, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



Цитата(Fin @ 24.2.2006, 22:39)
esperant0, Примерчик пожайлуста в студию.

Пусть генератор выдает последовательно цифры числа пи.


--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
Fin
Дата 24.2.2006, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 1
Всего: 10



Ты число pi расчитай сначало. Насколько я знаю, один немец недавно дошел до миллиардного знака. Можно конечно и число e считать. Только там факториалы идут в делителе формулы. И получается что формулу сложнее расчитать smile


--------------------
Пролетал мимо.
PM MAIL   Вверх
esperant0
Дата 25.2.2006, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



Цитата(Fin @ 24.2.2006, 23:30)
Ты число pi  расчитай сначало. Насколько я знаю, один немец недавно дошел до миллиардного знака. Можно конечно и число e считать. Только там факториалы идут в делителе формулы. И получается что формулу сложнее расчитать smile

К вашему сведению, известен способ вычисляющий любую цифру числа пи, не считая ВСЕ предыдущие чифры.

Причем формула то не слишком сложная


Так что ваше замечание не состоятельно %)

Это сообщение отредактировал(а) esperant0 - 25.2.2006, 00:31


--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
Alx
Дата 25.2.2006, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



блин, ну это же каждый раз будут одни и те же цифры
3, 1, 4, 1, 5, 9, 2, 6, 5...
smile smile

как думаете, можно как-нибудь сделать ГСЧ, основанный на Брауновском движении (беспорядочном движении мельчайших тел)?

Это сообщение отредактировал(а) Alx - 25.2.2006, 01:36


--------------------
PM MAIL WWW ICQ   Вверх
maxim1000
Дата 25.2.2006, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата

К вашему сведению, известен способ вычисляющий любую цифру числа пи, не считая ВСЕ предыдущие чифры.

у компьютера конечная память + конечное количество состояний процессора - это все можно назвать его состоянием
количество таких состояний конечно
состояние на следующем такте при отсутствии внешних воздействий (как, например, при исполнении какого-то вычислительного алгоритма) будет полностью определяться состоянием на предыдущем
а это, в свою очередь, означает, что будет зацикливание максимум через N шагов (N - количество разных состояний системы)
Добавлено @ 02:03
другое дело, что количество таких состояний огромно - что-то типа 2^(количество бит в памяти), но принципиально это дела не меняет...


--------------------
qqq
PM WWW   Вверх
esperant0
Дата 25.2.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



Цитата(maxim1000 @ 25.2.2006, 02:02)
в свою очередь, означает, что будет зацикливание максимум через N шагов (N - количество разных состояний системы)
Добавлено @ 02:03
другое дело, что количество таких состояний огромно - что-то типа 2^(количество бит в памяти), но принципиально это дела не меняет...

Если период генератора равен Х, а программе нужно количество случайных числел меньшее Х, то периода вроде как и нет.



Для примера. Компьютер с 2^40 бит памяти, будет иметь такой огромный период, что мы просто не успеем пройтись по нему.
Добавлено @ 10:56
Цитата(Alx @ 25.2.2006, 01:30)
блин, ну это же каждый раз будут одни и те же цифры

А что вы думаете, в других генераторах при одном и том же сиид, будут разные цифры.


Кроме того можно начинать выводить цифры числа начиная с некоторой цифры числа х.

Кроме того, не всегда плохо что выдаються одни и те же цифры. Пусть у вас есть программа симуляции, и вы прогоняете ее единожды на цифрах числа пи. Все будет в порядке.

В 3-х, кроме числа пи, можно использовать богатое множ-во иррациональных чисел

Это сообщение отредактировал(а) esperant0 - 25.2.2006, 10:57


--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
maxim1000
Дата 25.2.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(esperant0 @ 25.2.2006, 09:52 Найти цитируемый пост)
Если период генератора равен Х, а программе нужно количество случайных числел меньшее Х, то периода вроде как и нет.

Для примера. Компьютер с 2^40 бит памяти, будет иметь такой огромный период, что мы просто не успеем пройтись по нему

аааа... так неинтересно smile
тогда и нет принципиальных отличий от других генераторов (например, линейных сдвиговых регистров)
кроме того если в тех же ЛСР память и процессорное время используется практически оптимально - очень простые операции, то при вычислении цифр иррациональных чисел алгоритмы вряд ли смогут быть проще, а, наверное, будут сложнее...
да и есть ли универсальные алгоритмы для большого количества иррациональных чисел?

Цитата(esperant0 @ 25.2.2006, 09:52 Найти цитируемый пост)
Кроме того, не всегда плохо что выдаються одни и те же цифры. Пусть у вас есть программа симуляции, и вы прогоняете ее единожды на цифрах числа пи. Все будет в порядке

и еще одна проблема, что может иногда требоваться различное количество случайных чисел, а это значит, что и память и время вычисления для каждого следующего числа будут соответственно увеличиваться...


--------------------
qqq
PM WWW   Вверх
esperant0
Дата 25.2.2006, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



Цитата(maxim1000 @ 25.2.2006, 13:40)
Цитата(esperant0 @  25.2.2006,  09:52 Найти цитируемый пост)
Если период генератора равен Х, а программе нужно количество случайных числел меньшее Х, то периода вроде как и нет.

Для примера. Компьютер с 2^40 бит памяти, будет иметь такой огромный период, что мы просто не успеем пройтись по нему

аааа... так неинтересно smile
тогда и нет принципиальных отличий от других генераторов (например, линейных сдвиговых регистров)
кроме того если в тех же ЛСР память и процессорное время используется практически оптимально - очень простые операции, то при вычислении цифр иррациональных чисел алгоритмы вряд ли смогут быть проще, а, наверное, будут сложнее...
да и есть ли универсальные алгоритмы для большого количества иррациональных чисел?

Цитата(esperant0 @ 25.2.2006, 09:52 Найти цитируемый пост)
Кроме того, не всегда плохо что выдаються одни и те же цифры. Пусть у вас есть программа симуляции, и вы прогоняете ее единожды на цифрах числа пи. Все будет в порядке

и еще одна проблема, что может иногда требоваться различное количество случайных чисел, а это значит, что и память и время вычисления для каждого следующего числа будут соответственно увеличиваться...

Принципиальное отличие есть. В пи период ограничен возможностью существующих ЭВМ, а в других генераторах он ограничен заранее.



--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
Fin
Дата 25.2.2006, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: 1
Всего: 10



esperant0, Я хочу попасть в книгу рекордов Гинесса. Поделись пожайлуста алгоритмом вычисления числа Пи. Вычислю вот триллион знаков после запятой. И будет мне счастье. А то немец что то мелочится, всего то миллиард с копейками знаков после запятой. smile


--------------------
Пролетал мимо.
PM MAIL   Вверх
esperant0
Дата 25.2.2006, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



Цитата(Fin @ 25.2.2006, 17:35)
esperant0, Я хочу попасть в книгу рекордов Гинесса. Поделись пожайлуста алгоритмом вычисления числа Пи. Вычислю вот триллион знаков после запятой. И будет мне счастье. А то немец что то мелочится, всего то миллиард с копейками знаков после запятой. smile

напишите в Гоогле, алгоритм для вычисления цифр числа пи. ( на английском), немного покапайтесь.


И будет вам счастье.
Я в свое время нашел. Теперь ваша очередь.


--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
Alx
Дата 26.2.2006, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



а что если взять любое число n, больше 1, а затем поочередно выполнять выражения

Код

n = n^n;
n = n^(n/1);

?

получится бесконечно убывающий поток иррациональных чисел от 1 до 2, какое бы число за основу мы не взяли.

попробывал, получается высокая степень случайности:

http://soft.flyweb.in/small/rand.html

Код

var exp = "inverse";
var num = Math.PI; // берём любое число, большее единицы. ( PI; 2; 0,45; E, 10000 и т.п. )

stop_func = false; // контроллер функции
var all_arr = []; // будущий массив чисел-сумм

onload=function() {inf_int(num);}

function inf_int(n)
{  var sum = 0; // обозначаем переменную-сумму всех цифр иррационального числа
   n = (exp == "inverse") ? Math.pow(n,1/n) : Math.pow(n,n); // непосредственно выполняем возведение в степень
   exp = (exp == "inverse") ? "front" : "inverse"; // и меняем переменную
   var str = n.toString().replace(".","");
   
   sum = parseInt(str);
   while(str.length>1) // подсчет суммы цифр
   {   sum=0;
       for (i=0;i<str.length;i++)
       {   sum+=parseInt(str.charAt(i));
       }
       str = sum.toString();
   }

   all_arr.push(sum); // добавляем в итоговый массив новое число-сумму

   if (!stop_func) // вывод результатов и перезапуск функции; в параметр передаём новое число "n"
   {   document.body.innerHTML += "<b>" + sum + "</b> <= " + n + "<br>";
       setTimeout("inf_int('"+n+"')",400);
   }

}

Добавлено @ 23:15
функция ещё высчитывает однозначное число для каждого значения pi, поочерёдно складывая в нем все цифры, вот так:

Код

sum = 1+2+3+4+5+6+7+8+9
sum = 4+5
sum = 9


Это сообщение отредактировал(а) Alx - 27.2.2006, 01:50


--------------------
PM MAIL WWW ICQ   Вверх
Cr@$h
Дата 27.2.2006, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 4
Всего: 41



Цитата(Mayk @ 19.2.2006, 23:17 Найти цитируемый пост)
одинаковых не всмысле друг другу равны, а всмысле сколько раз не запускай - одно и то же увидишь

Не совсем. При условии задания одного и того же начального значения (seek).
Псевдо только потому, что через некоторое время последовательность будет повторяться. По опыту могу сказать, что длина последовательности для вещественного числа размером n байт примерно совпадает с числом целых чисел, которые этим числом байт можно представить. Например, датчики float имеют длину ~ MAX_INT. double же очень длинный.
Но и не в длине основное дело. Сами числа д.б. независимы. Существует много различных тестов. Обычно по объемы датчики не занимают много место, т.к. должны в первую очередь очень быстро выполняться.

По пи скажу, что надо посмотреть, какими характеритиками оболадает такой генератор. К тому же не понятно распределение цифр числа.
PM MAIL ICQ   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0749 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.