每當我們想從一個向量中選擇一個隨機數時,我們使用一個名爲rand()的方法。我想知道它是如何從後端工作的。cpp的rand()方法的bankend程序是什麼
回答
rand
沒有涉及"back-end"。
順便說一句,在C++中,您最好使用<random>
標準頭文件和相關實用程序,它們位於C++ standard library中。
rand
功能是C standard library的一部分。它與C++向量無關。
它們(rand
函數和<random>
的實用程序)均基於pseudo-random number generators,這是一個相當複雜的字段。你仍然可以通過發明更好的PRNG獲得博士學位。
如果你想了解如何rand
是(或可以)來實現,你會更好地研究一些現有的free software C標準庫的源代碼(如GNU例如或glibcmusl-libc)。
如果您想了解如何實現<random>
,請研究C++標準庫的源代碼。如果使用GCC編譯器(例如使用g++
程序進行編譯),則由其提供。
rand具有種子值 - 例如,將其設置爲當前時間...
srand(time(NULL)); // second good enough
然後有一些數學如本....
unsigned int seed; // set by srand
unsigned int rand() {
seed = seed * number + offset;
return seed;
}
的數目和偏移被選擇,所以整個的`的範圍內的覆蓋了unsigned int。這通常意味着某種形式的質數。
正如評論中所述,這是一個非常複雜的領域。
如果沒有調用srand
,那麼seed有一個初始值,這意味着(忽略線程計時問題),每次運行時,程序都會得到相同的結果。
獲得相同的結果對於重新運行測試非常方便,但如果它是遊戲邏輯,則會出現問題。
」選擇數字和偏移量,所以'unsigned int'的整個範圍都被覆蓋「 - False。整個範圍是'0-UINT_MAX',但'rand()'只需要覆蓋'0-RAND_MAX'。這可能低至32767. – MSalters
這個(線性同餘發生器)是'rand()'的一種可能的實現。這是很常見的,但C和C++都不需要這種方法,有些實現的做法是不同的。 –
- 1. 在C++中使用rand()函數的正確方法是什麼?
- 2. 線程上的「detach()」是什麼? CPP
- 3. 爲什麼rand()不是真的隨機?
- 4. 爲什麼此cpp程序失敗?
- 5. 爲什麼rand(變量)暫停我的Shoes程序的執行?
- 6. 什麼是從我的C#程序打印最好的方法?
- 7. 「:: function()」在cpp中的含義是什麼?
- 8. S函數中的void **是什麼.cpp
- 9. 在靜脈中調用應用程序CPP文件中的初始化方法是什麼?
- 10. CPP/CLI程序集和CS/VB程序集有什麼區別?
- 11. 什麼是恢復Android Phonegap應用程序的正確方法?
- 12. 什麼是優化鈦應用程序的最佳方法?
- 13. 部署iPhone應用程序的所有方法是什麼?
- 14. 處理程序集版本的正確方法是什麼?
- 15. 將JavaScript添加到Tapestry應用程序的方法是什麼?
- 16. 讓vb.net程序讀取列表的正確方法是什麼?
- 17. 什麼是構建聊天應用程序的理想方法?
- 18. C++:組織程序子系統的正確方法是什麼?
- 19. 什麼是確定應用程序位置的正確方法?
- 20. 升級rails應用程序的簡單方法是什麼?
- 21. 調試Shoes應用程序的最佳方法是什麼?
- 22. 製作android應用程序的最佳方法是什麼?
- 23. 部署Meteor應用程序最簡單的方法是什麼?
- 24. 什麼是結束.Net應用程序的正確方法?
- 25. 什麼是授權Stormpath應用程序的正確方法?
- 26. 什麼是爲應用程序提供幫助的好方法?
- 27. iPhone:離開應用程序的正確方法是什麼?
- 28. 什麼是.NET程序最快的IPC方法?
- 29. 什麼是組織PHP網站應用程序的好方法?
- 30. 考慮編程順序的最佳方法是什麼?
如果你想了解關於僞隨機數生成的理論,你需要閱讀大量的數學和統計數據。如果您只想查看一些生成僞隨機數的示例函數,那麼如果您只是搜索一些,包括一些標準庫是開源的,那麼這裏有很多可用的函數。 「 –