Re: [問題] random的問題
※ 引述《starmoon0918 (T毛很強滴)》之銘言:
: 現在在寫一個random的table要餵給ROM使用
: 但之前寫的table當bit數超過55之後,後面都呈現0
: 以下是我第一版本
: ----------------------------------------------------------------------------
: n0=input('index_num:');
: n1=input('bit_width:');
: outwidth = n1;
: Tini_file = fopen('table.v','w');
: for count=1:2^(n0)
: k=rand*(2^outwidth); %亂數產生
: str=dec2bin(k,n1)
: fprintf(Tini_file,'%s\n',str);
: end
: ----------------------------------------------------------------------------
問題是double精準度不足
k 是一個 double 型別的數值,其有效位元最多 52 個
我的解決辦法和你類似,必須切割 128 位元成幾個較少的位元
你的第二個寫法還是切太大,double 有效位元最多 52 個
我選擇的解法是切成四個 32 位元,合起來剛好是 128 位元
程式碼如下:
n0=input('index_num:');
n1=input('bit_width:');
Tini_file = fopen('table.v','w');
for count=1:2^(n0)
bit_string = '';
while length(bit_string) < n1
random_integer = randi(bitshift(1, 32) - 1, 'uint32');
random_string = dec2bin(random_integer, 32);
number_bit = min(n1 - length(bit_string), 32);
reduced_string = random_string(1:number_bit);
bit_string = sprintf('%s%s', bit_string, reduced_string);
end
disp(bit_string);
fprintf(Tini_file,'%s\n',bit_string);
end
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.247.22
剛有一處寫錯了,已更正。
※ 編輯: H45 來自: 140.116.247.22 (09/03 15:21)
※ 編輯: H45 來自: 140.116.247.22 (09/03 15:22)
討論串 (同標題文章)