2012-04-12 10 views
1

TI-84 randInt関数はどのように乱数を生成しますか?私はこのPRNGを私のコンピュータに複製したいので、サンプルサイズを大きくすることができますが、どうすればよいか分かりません。電卓から数字5を一度にコピーすることはオプションではありません。 OS X 10.7.3を実行中コンピュータ上のTI-84乱数生成

答えて

1

コンピュータ上でその機能を正確に複製する方法はわかりませんが、一度に5つの数字しか生成する必要はありません。非常に大きな乱数サンプルをリストに格納しておけば、ti接続ソフトウェアを使用してコンピュータに転送することができます。

+0

それは私がやったことです。私は必要な数をすべて手に入れるのに5時間ほどかかりましたが、うまくいきました。 –

2

私のはるかに広範な答えhereに基づいて、次は、Ti PRNGのC++実装です:

#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; 
} 

私はRandInt(5,97)の値を生成するのTi-83エミュレータを使用:

RandInt output

これは上記のプログラムの出力と一致します:

$ ./a.out 
92 
89 
18 
52 
42 
73 
9 
36 
97 
23