今天我们的老师教我们数字在计算机中是如何表示的,他编写了一个 Matlab 函数,它可以获取我们系统中的最小指数、最大指数和位数,并显示我们系统中所有可表示的数字。
例如:当最小指数为-1时,最大指数为1,我们在2位系统中工作
f(-1,1,2)
ans =
0.5000
0.6250
0.7500
0.8750
1.0000
1.2500
1.5000
1.7500
2.0000
2.5000
3.0000
3.5000
但我真的不明白他写的代码。如果有人可以向我解释,我会很高兴。他的基本思想是用一个矩阵表示二进制数(00,01,10,11),然后将该矩阵乘以一个向量,我完全迷失了他,看不懂他的代码。
这是他写的:
%% Computing the Matrix A
m = 2^p;
A = zeros(m,p);
for i=1:p
temp = [zeros(m/2^i,1); ones(m/2^i,1)];
A(:,i) = repmat(temp,2^(i-1),1);
end
%% Computing the numbers
V = zeros(p,1);
for i=1:p
V(i) = 1/2^i;
end
N = zeros((emax-emin+1)*2^p,1);
k=1;
for e = emin:emax
N(k:k+2^p-1) = 2^e*A*V+2^e*ones(2^p,1);
k = k + 2^p;
end
sort(N)