作者H45 (!H45)
看板MATLAB
标题Re: [问题] random的问题
时间Tue Sep 3 15:13:20 2013
※ 引述《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)