1

TI-84 randInt関数はどのように乱数を生成しますか?このPRNGをコンピューターに複製して、より大きなサンプルサイズを取得できるようにしたいのですが、方法がわかりません。電卓から一度に5の数字をコピーすることはオプションではありません。OSX10.7.3の実行

4

2 に答える 2

2

ここでの私のはるかに広範な回答に基づいて、以下はTiPRNGの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;
}

Ti-83エミュレーターを使用して、RandInt(5,97)次の値を生成しました。

RandInt出力

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

$ ./a.out 
92
89
18
52
42
73
9
36
97
23
于 2015-09-25T23:20:26.890 に答える
1

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

于 2012-05-16T13:53:48.567 に答える