今日、私たちの先生は、コンピューターで数値がどのように表現されるかについて教えてくれました。彼は、システムの最小指数、最大指数、およびビット数を取得し、システムで表現可能なすべての数値を表示する 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
しかし、私は彼が書いたコードを本当に理解していません。誰かが私に説明してくれれば幸いです。彼の基本的な考え方は、行列で 2 進数 (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)