5

設定は次のとおりです。

私の学士論文では、LHCで使用されているジェットアルゴリズムをテストしたいと思います。基本的に最初のステップは次のとおりです。4元運動量が与えられます。

p[0] = nullvector(45.0000000000106,33.03951484238976,14.97124733712793,26.6317895033428)

ランダムに生成されたいくつかの(たとえば50個の)4元ベクトルを10 ^(-12)の順序で最後の3つのコンポーネントに追加して実験データをシミュレートしたいので、それらは小さくなります(ここで興味深い物理学が発生します)が、小数点以下15桁のダブルフロート精度を大幅に上回っています。したがって、それに対する迅速で汚い解決策は次のとおりです。

seed=time(NULL);
srand(seed);
random=(rand()%9001)*1.0E-15;
random=random+1E-12;
printf("%.15E\n",random);

これにより、1E-12から10E-12(= 1E-11)までの乱数が得られます。小数点以下3桁までです。したがって、「実際の」倍数では、小数点以下15桁になります。

ここで要点:単精度浮動小数点数を超えることなく、小数点以下3桁を超える順序で数値を格納できますか?

PS:小さな乱数を生成するためのより良い方法はありますか?(これは別のトピックのように聞こえます;))

4

1 に答える 1

1

浮動小数点乱数を作成する従来の方法は、範囲 [0-1) を取りdouble x = (double)rand()/RAND_MAX;、次に を掛けて、範囲をtoの値 [0 を含む]9001E-1にスケーリングすることです。1E-121E-15

于 2013-03-07T16:49:45.460 に答える