Re: [問題] random的問題

看板MATLAB作者 (!H45)時間12年前 (2013/09/03 15:13), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《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)
文章代碼(AID): #1I9OmJDZ (MATLAB)
討論串 (同標題文章)
文章代碼(AID): #1I9OmJDZ (MATLAB)