MATLABで単精度で均一に分散された浮動小数点値の配列を生成しようとしています。
IEEE-754標準に基づいて可能な32ビット浮動小数点数の範囲を表す+/-(2-2 ^ -23)* 2^127の範囲のすべての数値を生成したいと思います。問題は、大きなマグニチュード数しか生成されていないことです。小さなマグニチュード数(0に近いものとそれを含む)も含めたいと思います。これは、生成されたすべての数値の絶対値を取得し、最小のものを見つけた場合に見られます(コードの下に出力をコピーしました)。
これまでのところ、MATLABに次のコードがあります。
numtogenerate = 20000;
% Preallocate for speed
generatednumber(numtogenerate) = 0;
for i = 1:numtogenerate
generatednumber(i) = rand*(2-2^-23)*2^127*2 - 2^127*(2-2^-23);
end
minimum = min(generatednumber)
smallest = min(abs(generatednumber))
maximum = max(generatednumber)
hist(generatednumber)
出力は次のとおりです。
minimum =
-3.4026e+038
smallest =
8.4046e+033
maximum =
3.4027e+038