2012-04-12 1 views
1

Как функция randInt TI-84 генерирует случайные числа? Я хотел бы воспроизвести этот PRNG на своем компьютере, чтобы я мог получить более крупные размеры выборки, но я не уверен, как это сделать. Копирование номеров 5 за один раз из калькулятора не является вариантом. Запуск OS X 10.7.3Генерация случайных чисел TI-84 на компьютере

ответ

1

Я не знаю, как точно воспроизвести его функцию на компьютере, однако вам не нужно генерировать только пять чисел за раз. Вы можете хранить очень большие выборочные номера случайных чисел в списках, которые передают их через программное обеспечение ti connect на ваш компьютер.

+0

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

2

Основываясь на моем гораздо более обширный ответ here, следующее является C++ реализация Ti ПСЧ:

#include <iostream> 
#include <iomanip> 
using namespace std; 

long mod1 = 2147483563; 
long mod2 = 2147483399; 
long mult1 = 40014; 
long mult2 = 40692; 
long seed1,seed2; 

void Seed(int n){ 
    if(n<0) //Perform an abs 
    n = -n; 
    if(n==0){ 
    seed1 = 12345; 
    seed2 = 67890; 
    } else { 
    seed1 = (mult1*n)%mod1; 
    seed2 = n%mod2; 
    } 
} 

double Uniform(){ 
    double result; 
    seed1 = (seed1*mult1)%mod1; 
    seed2 = (seed2*mult2)%mod2; 
    result = (double)(seed1-seed2)/(double)mod1; 
    if(result<0) 
    result = result+1; 
    return result; 
} 

double RandInt(int min, int max){ 
    if(min<max) 
    return min+int((max-min+1)*Uniform()); 
    else 
    return max+int((min-max+1)*Uniform()); 
} 

int main(){ 
    Seed(0); 
    for(int i=0;i<10;i++) 
    cout<<setprecision(10)<<RandInt(5,97)<<endl; 
} 

Я использовал Ti-83 эмулятор для генерации значений для RandInt(5,97):

RandInt output

Это соответствует выходному показателю моей программы выше:

$ ./a.out 
92 
89 
18 
52 
42 
73 
9 
36 
97 
23 
Смежные вопросы