我試圖在 Javascript 中創建一個函式,它將在兩個整數(包括兩者)之間給出一個隨機整數。但是,不幸的是,這不包括第一個整數。代碼如下:
const randomEjector = (num1,num2) => {return Math.ceil(Math.random() * (num2 - num1)) num1}
我正在考慮不平等的類比。
讓我們考慮一下,(Math.random()將輸出一個介于 0(包括)和 1(不包括)之間的數字)。
假設x = Math.random(),那么x∈[0,1)
那么,
再次,
現在開始部分:
但是,就像最大的整數函式:
所以,對于(0,1] 它將回傳 1。
對于0 => 0
并且對于,它將回傳return (num2-num1)。
所以,在執行之后,我們應該留下一個區間[0,(num2-num1)]。
現在,∈ [0,(num2-num1)]0 ≤ x < 1
0 * (num2-num1) ≤ x * (num2-num1) < 1 * (num2-num1)x*(num2-num1)∈[0,1*(num2-num1))Math.ceil()Math.ceil()interval ((num2-num1)-1,(num2-num1))Math.ceil()x*num2-num1
最后,let y = x*(num2-num1)
所以,0 ≤ y ≤ (num2-num1)
所以,0 num1 ≤ y num1 ≤ (num2-num1) num1
這會給num1 ≤ y num1 ≤ num2
讓,z = y num1
所以,z ∈ [num1,num2]
然后,為什么我的函式不包括第 1 項并使它像 (num1,num2]?
問題出在哪里?
例如,對于console.log(randomEjector(3,4)),它總是給出 4 而從不給出 3。
uj5u.com熱心網友回復:
很難說它Math.random()永遠回傳 0 是不可能的,所以Math.ceil(Math.random())很可能總是回傳 1。
換句話說,randomEjector(3,4)一旦在非常非常藍的月亮中,會給你 3。
uj5u.com熱心網友回復:
它回傳 4,因為您總是對結果進行上限,如果您希望它回傳 4,那么您需要對結果進行下限。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/358394.html
標籤:javascript
