問題描述
標準 rand()
函數給出的數字對我來說不夠大:我需要 unsigned long long
的.我們如何獲得真正大的隨機數?我嘗試修改一個簡單的散列函數,但它太大大,運行時間太長,而且永遠不會產生小于 1e5 的數字!!
Standard rand()
function gives numbers not big enough for me: I need unsigned long long
ones. How do we get really big random numbers? I tried modifying a simple hash function but it's too big, takes too long to run and never produces numbers which are less than 1e5!!
推薦答案
這是一個返回隨機 64 位數字的便攜式 C99 解決方案:
Here's a portable C99 solution that returns a random 64-bit number:
unsigned long long llrand() {
unsigned long long r = 0;
for (int i = 0; i < 5; ++i) {
r = (r << 15) | (rand() & 0x7FFF);
}
return r & 0xFFFFFFFFFFFFFFFFULL;
}
說明:rand()
返回 0 到 RAND_MAX
范圍內的整數,并且 RAND_MAX
只保證至少為 32,767(15 個隨機位).long long
保證有 64 位,但可能更大.
Explanation: rand()
returns integers in the range 0 to RAND_MAX
and RAND_MAX
is only guaranteed to be at least 32,767 (15 random bits). long long
is guaranteed to have 64 bits but may be larger.
這篇關于在 C/C++ 中獲取大隨機數的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!