[討論] randi 超過上限 該如何處理 (送p幣)

看板MATLAB作者時間8年前 (2016/09/22 16:05), 8年前編輯推噓2(209)
留言11則, 3人參與, 最新討論串1/1
我需要在 0到20! 或0到30! 甚至0到50! 之間隨機生成一個正整數 但是randi()函數 括弧裡面 最多不可超過2^53 階層最大只能求到 randi(factorial(18)) = 5.4416e+14 randi(factorial(19)) 就超出randi的範圍了( 19! > 2^53 ) 請問這有辦法解決嗎?? 感謝大家回答 前五個推文的id各送100p幣 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.114.54.67 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1474531511.A.F9A.html ※ 編輯: JACK19920102 (140.114.54.67), 09/22/2016 16:06:11

09/22 16:52, , 1F
randi(10,1,ceil(gammaln(51)/log(10)))-1
09/22 16:52, 1F

09/26 15:37, , 2F
s大 我試著用這個語法 但是寫出來的好像不是耶
09/26 15:37, 2F

09/26 15:44, , 3F
還是我用錯了? 不太知道該怎麼用這個語法
09/26 15:44, 3F

09/26 16:42, , 4F
如果是20!階層的話呢?
09/26 16:42, 4F

09/26 20:50, , 5F
好像?
09/26 20:50, 5F

10/03 02:10, , 6F
不能在0到log(20!)之間取一個隨機數 在轉回去取
10/03 02:10, 6F

10/03 02:10, , 7F
ceiling嗎
10/03 02:10, 7F

10/03 02:11, , 8F
或是floor, round之類都好,保證是正數就好
10/03 02:11, 8F

10/03 02:11, , 9F
如果下界是1話,取ceiling,下界是0取floor
10/03 02:11, 9F

10/03 02:12, , 10F
這樣做好像機率會有問題Orz
10/03 02:12, 10F

10/03 12:28, , 11F
搞不好人家要研究benford's law啊
10/03 12:28, 11F
文章代碼(AID): #1Nuv2t-Q (MATLAB)
文章代碼(AID): #1Nuv2t-Q (MATLAB)