我正在尋找一種方法來生成僞隨機數序列,該僞隨機數序列將在任何平臺上爲給定種子產生相同的序列結果。我假設rand()
/srand()
不會是一致的(我可能很容易在這個假設上錯了)。跨平臺的一致性僞隨機數
回答
類似於Mersenne Twister (from Boost.Random)的東西是確定性的。
如果您寧願避免使用Boost,您可以使用[Mersenne Twister]的原始實現(http://www.math.sci.hiroshima-u.ac.jp/ 〜m-mat/MT/emt.html),這是直寫的。近年來,MT集團增加了一些額外的端口,可以使用SIMD,OpenCL和CUDA。 – sfstewman 2013-03-19 18:19:24
看到我的問題和答案C++ 11隨機生成器。 C++ 11 mt19937在所有平臺上提供了一致的結果,但標準分佈並沒有,所以我創建了自己的分佈式:http://stackoverflow.com/questions/34903356/c11-random-number-distributions-are-not -consistent-across-platforms-what-al – 2016-01-23 11:43:32
最簡單的方法是自己編寫一個隨機數生成器,但是使用針對不同平臺發佈的庫並保證能夠提供相同的結果也可以。
我懷疑rand()/ srand()是否一致,但我不知道。
Knuth的released into the public domain C (and FORTRAN) source code用於的3.6節中描述的僞隨機數發生器計算機編程藝術。
我意識到這是一箇舊的線程,但現在用C++ 11有一大堆new options available。這裏是從默認使用Mersenne Twister
發動機和Normal
分佈頁面蒸餾例如:
#include <iostream>
#include <iomanip>
#include <string>
#include <map>
#include <random>
int main()
{
std::random_device rd;
//
// Engines
//
std::mt19937 e2(rd());
//std::knuth_b e2(rd());
//std::default_random_engine e2(rd()) ;
//
// Distribtuions
//
std::normal_distribution<> dist(2, 2);
//std::student_t_distribution<> dist(5);
//std::poisson_distribution<> dist(2);
//std::extreme_value_distribution<> dist(0,2);
std::map<int, int> hist;
for (int n = 0; n < 10000; ++n) {
++hist[std::round(dist(e2))];
}
for (auto p : hist) {
std::cout << std::fixed << std::setprecision(1) << std::setw(2)
<< p.first << ' ' << std::string(p.second/200, '*') << '\n';
}
}
我一直在simplerandom
庫這一點。它應該是跨平臺的,我也瞄準多種語言。目前它支持C和Python(兩種語言生成相同的數字)。我計劃在不久之後用C++實現相同的生成器,遵循Boost和C++ 11隨機API。
- 1. 屬性一致跨平臺
- 2. 一致的隨機數和平臺
- 3. 使用boost :: random的平臺隨機生成一致隨機數
- 4. 跨系統和版本的Java僞隨機數的重複性?
- 5. 跨平臺的RSA簽名不一致
- 6. 跨平臺的Docker容器/ VM的一致主機名?
- 7. 僞隨機整數
- 8. 跨平臺手機遊戲?
- 9. 相機跨平臺(xamarin)
- 10. 真正的隨機與僞隨機(你可以僞隨機真正的隨機性)
- 11. 跨多個平臺的雙數學一致嗎?
- 12. Realm數據庫跨平臺兼容性?
- 13. 跨平臺的手機開發環境
- 14. 加密僞隨機
- 15. 僞隨機圖案
- 16. 跨平臺
- 17. 跨平臺
- 18. 跨平臺CSRF
- 19. 跨平臺C?
- 20. 跨平臺Bonjour
- 21. SWIG跨平臺
- 22. Android跨平臺
- 23. 跨平臺formatString的
- 24. opengl:混合具有跨平臺不一致的結果
- 25. 是不是跨平臺的generate_canonical輸出一致?
- 26. 跨平臺實時數據
- 27. 跨平臺數據同步
- 28. React本機跨平臺編程
- 29. 推薦跨平臺手機軟件
- 30. 僞隨機的URL生成
看到我的問題和答案C++ 11隨機生成器。 C++ 11 mt19937在所有平臺上提供了一致的結果,但標準分佈並沒有,所以我創建了自己的分佈式:http://stackoverflow.com/questions/34903356/c11-random-number-distributions-are-not -consistent-across-platforms-what-al – 2016-01-23 11:46:28