JavaScript 標準庫中有什麼除了 Math random 之外產生不確定性的方法?

時間 2021-06-02 06:02:10

1樓:

自己寫乙個PRNG唄。

const m = 2** 31;

const a = 1103515245

const c = 12345

let seed = 123456789;

function rand()

還有別的引數可選:https://

en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use

2樓:

「僅限 ECMAScript」的話基本上沒有什麼特別好的手段獲得真正意義上的隨機性。題目描述中的for...in、Arrary#sort、浮點數精度等API的演算法都已經在標準中被正式化描述(陣列排序在 ES2019 之前沒有明確是穩定的,但就算是非穩定的排序演算法,你也不可能對一組資料產生不一樣的結果),JS 引擎不可能在這些 API 上產生不確定性。

如果是指可以通過外部環境獲取的不確定性,那很簡單,就像其他回答中說的用Date取時間戳的餘數就行了,Date也是 ES 標準中的 API 。不過順便在這裡提一下,在這裡用Performance API是有可能獲得某種程度上「可控」的隨機的,因為某些瀏覽器實現中特意在Performance.now()中加入了隨機性,以防止 Spectre 攻擊[1]。

至於偽隨機數生成器(PRNG),應該不是題主想要的答案,而且 PRNG 都需要乙個 Seed Number,又回到剛才的問題中了。

3樓:

我舉乙個例子吧,不知道是不是你要的那種。

function

generateUid

(str

)tempKey

=count

.toString(16

)+"_"+

slash

;return

tempKey;}

4樓:心遠地自偏

假如你想要概率是 5%

newDate

().getTime()%

100<

5假如你想概率是 90%

new Date().getTime() % 100 < 90

5樓:

如果是在 Web 端執行的話,可以呼叫瀏覽器 API `window.crypto.getRandomValues` 來獲取更安全的隨機值。

Crypto.getRandomValues()方法讓你可以獲取符合密碼學要求的安全的隨機值。傳入引數的陣列被隨機值填充(在加密意義上的隨機)。

為了確保足夠的效能,不使用真正的隨機數生成器,但是它們正在使用具有足夠熵值偽隨機數生成器。它所使用的 PRNG 的實現與其他不同,但適用於加密的用途。該實現還需要使用具有足夠熵的種子,如系統級熵源。

Crypto.getRandomValues() - Web API 介面參考

6樓:王淳啟

非同步任務執行的不確定性。

最簡單的,你無法認為setTimeout是乙個準時的操作。所以可以測試如下場景:

async

function

test

());

}顯然當非同步呼叫的次數足夠多時,因為CPU(尤其是瀏覽器客戶端)競用基本不可能產生穩定的時間片輪轉,所以會有不同的結果。各個客戶端的CPU效能/程序/執行緒數不同,時間片的輪轉時間也不同,得到的結果是有隨機性的。如下測試:

C 標準庫有哪些問題?

可能是我接觸的語言太少,但凡有string型別,功能卻弱到約等於vector,基本只能當做buffer用的,只有cpp的標準庫。 我來說乙個,C 11新增的std mutex的lock 方法,連續呼叫兩次,在linux平台上會阻塞住執行緒,在windows平台上會直接崩潰。二者行為不一致,不知道這個...

c 怎麼讓自己寫的庫像標準庫那樣只需include標頭檔案就可以使用而不需要把實現原始碼加入工程裡?

沒辦法像標準庫那樣。標準庫可以只include標頭檔案是因為編譯器會預設鏈結標準庫的實現。其它回答裡面說的header only library,是把實現也一起寫在標頭檔案裡面了。不需要另外的cpp而已。如果你的目的是讓庫方便使用,就做成header only library,或者退一步,提供乙個標...

你們發現過C 標準庫BUG嗎?

Pluto Hades 標準庫bug以前標準不太標準的時候發現過,年代久遠不好找了 最近發現了gcc內建函式的bug,就是這個 output of instrinsic xgetbv is wrongly overwritten bug是怎麼產生的呢?他們沒寫return!對,實現這個有返回值函式的...