我正在尝试在 MATLAB 中以单精度生成一组均匀分布的浮点值。
我想生成 +/- (2-2^-23)*2^127 范围内的所有数字,它表示基于 IEEE-754 标准的可能 32 位浮点数的范围。问题是只生成了大数量级的数字,我希望也包括小幅度的数字(接近并包括 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