![]() |
請問C++裡的亂數函式庫
小弟現有的兩本書 對這方面敘述的實在是不夠清楚 一直看不懂所以上來發問一下
為什麼預設的情況下 rand() 是32767 那我要限制他輸出的範圍的話 是使用 rand()%N+1 就會是限定範圍在1~N之間 然後小弟用手算了一下 感覺不太對阿 ="= 還有要產生出0~1之間的浮點亂數 為什麼是 rand()/RAND_MAX |
對 C/C++ 而言
srand 是類似 "洗牌" 的動作 (攪亂後重排 放入 亂數表列中) srand 函式 有個 引數 "參考值" 簡單講就是告訴 "如何攪亂" 當程式第一次執行 rand 時 得到的值是 亂數表列 的第一個值 之後以此類推 (當程式第二次執行 rand 時,得到的值是 亂數表列 的第二個值...) 如果程式未設計 "一開始用 srand 洗牌" 就相當於 一副新的未拆封的撲克牌 所以其順序是一定的(照理說 全世界新的撲克牌 其開封時 疊放順序都是一樣的) 也就是 每次啟動程式執行時 亂數表都是一樣的 亂數表一樣 執行到 rand 得到的值都會是固定變化的 (可預期) 如果 srand 加上固定的 引數 的話 是否也是會得到 可預期 的值呢? 答案當然是 "Yes" |
引用:
但 打開 stdlib.h 可以找到其原形 int rand(void) 而 C/C++ 的 int 整數使用 4個byte紀錄 範圍是 int 2147483647 ~ -2147483648 所以證明 不一定最大值是 32767 (不同版本甚至編譯器 都可能有不同結果) 回到你說 感覺不太對阿 應該是沒有問題的啊 100 取 N 的餘數 範圍是在 0 ~ N-1 所以+1 的話 範圍就變成 1 ~ N 一個得到字元的範圍之應用 (char)(rand()%26 +65); //轉成英文字母 (A~Z) (char)(rand()%10 +48); //轉成阿拉伯數字 (0~9) |
MINI大真是強
其實小弟還有些問題想要請教 請問MINI大有使用MSN或是即時通之類的軟體嗎 想說可以討論多一點 小弟的MSN跟即時通 a19870504@yahoo.com.tw |
引用:
沒有在用這類軟體 個人不常用 C/C++ 以上只是經驗常識而已 |
mini你沒講到他要問的問題,我幫你補充好了
要產生出0~1之間的浮點亂數 為什麼是 rand()/RAND_MAX?? 首先要知道的是當n=rand()時,n的範圍為rand能涵蓋的範圍,也就是0~RAND_MAX 為何要產生0~1之間的浮點數要rand()/RAND_MAX的原因是,當RAND_MAX為分母時,其分子rand()最多也只能是RAND_MAX,最少是0 to in short : 0 <= rand() <= RAND_MAX , in the result of "RAND_MAX > 0" so 0/RAND_MAX <= rand()/RAND_MAX <= RAND_MAX/RAND_MAX then 0 <= rand()/RAND_MAX <= 1 |
所有時間均為台北時間。現在的時間是 03:34 PM。 |
Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.
『服務條款』
* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *