iT邦幫忙

0

關於亂數的問題,為甚麼一定要 2 * (Fix(Rnd * 5) + 1) - 1,不能用Fix(Rnd * 10)嗎?

為甚麼一定要 2 * (Fix(Rnd * 5) + 1) - 1,不能用Fix(Rnd * 10)嗎?會出甚麼問題嗎?
https://ithelp.ithome.com.tw/upload/images/20190324/20116391nd6AVAtjWg.jpg
謝謝

小魚 iT邦高手 1 級 ‧ 2019-03-25 00:02:44 檢舉
兩個求出來的亂數會不一樣, 看需求.
0
小魚
iT邦高手 1 級 ‧ 2019-03-25 00:03:19

兩個求出來的亂數會不一樣, 看需求.

2
paicheng0111
iT邦研究生 1 級 ‧ 2019-03-25 00:30:33

Rnd會傳回[0, 1)之間的亂數
因此,我猜
fix(Rnd*10) will return [0,10)的整數亂數
2 * (Fix(Rnd * 5) + 1) - 1 will return [1,11)的整數亂數

5
海綿寶寶
iT邦超人 1 級 ‧ 2019-03-25 08:11:11

不能

因為
2 * (Fix(Rnd * 5) + 1) - 1 取的可能亂數為 1,3,5,7,9 其中之一
Fix(Rnd * 10) 取的可能亂數為 0,1,2,3,4,5,6,7,8,9 其中之一

選我正解

6
米歐
iT邦新手 5 級 ‧ 2019-03-25 10:20:03

好多回答啊,我也來表示我的看法。
首先要了解 Rnd 是什麼,以及 Fix 到底做了什麼。
根據微軟文件的定義 Rnd 是小於 1且大於等於 0,Fix 是無條件捨去。
所以我們可以拆解一下式子。

  • 2 * (Fix(Rnd * 5) + 1) - 1
步驟 式子 結果
1 Rnd * 5 0 ≦ x < 5
2 Fix(x) 0,1,2,3,4
3 x + 1 1,2,3,4,5
4 2 * x 2,4,6,8,10
5 x - 1 1,3,5,7,9
  • Fix(Rnd * 10)
步驟 式子 結果
1 Rnd * 10 0 ≦ x < 10
2 Fix(x) 0,1,2,3,4,5,6,7,8,9

這樣就知道哪邊不一樣了。

Andreas iT邦新手 5 級 ‧ 2019-03-29 10:25:13 檢舉

所以,其實可以把 3 4 顛倒,就不用 5 了

我要發表回答

立即登入回答