史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2007-12-14, 07:02 PM   #1
a19870504
註冊會員
榮譽勳章

勳章總數
UID - 283728
在線等級: 級別:2 | 在線時長:15小時 | 升級還需:6小時級別:2 | 在線時長:15小時 | 升級還需:6小時
註冊日期: 2007-10-25
文章: 34
精華: 0
現金: 56 金幣
資產: 56 金幣
預設 疑問 - 請問C++裡的亂數函式庫

小弟現有的兩本書 對這方面敘述的實在是不夠清楚 一直看不懂所以上來發問一下

為什麼預設的情況下 rand() 是32767

那我要限制他輸出的範圍的話 是使用 rand()%N+1 就會是限定範圍在1~N之間

然後小弟用手算了一下 感覺不太對阿 ="=

還有要產生出0~1之間的浮點亂數 為什麼是 rand()/RAND_MAX

此帖於 2007-12-14 08:27 PM 被 a19870504 編輯.
a19870504 目前離線  
送花文章: 0, 收花文章: 6 篇, 收花: 14 次
回覆時引用此帖
舊 2007-12-14, 08:20 PM   #2 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時
註冊日期: 2002-12-07
文章: 13249
精華: 0
現金: 26241 金幣
資產: 3024051 金幣
預設

對 C/C++ 而言

srand 是類似 "洗牌" 的動作 (攪亂後重排 放入 亂數表列中)
srand 函式 有個 引數 "參考值"
簡單講就是告訴 "如何攪亂"

當程式第一次執行 rand 時
得到的值是
亂數表列 的第一個值
之後以此類推
(當程式第二次執行 rand 時,得到的值是 亂數表列 的第二個值...)

如果程式未設計 "一開始用 srand 洗牌"
就相當於
一副新的未拆封的撲克牌
所以其順序是一定的(照理說 全世界新的撲克牌 其開封時 疊放順序都是一樣的)

也就是
每次啟動程式執行時
亂數表都是一樣的

亂數表一樣
執行到 rand
得到的值都會是固定變化的 (可預期)

如果 srand 加上固定的 引數 的話
是否也是會得到 可預期 的值呢?
答案當然是 "Yes"
mini 目前離線  
送花文章: 1999, 收花文章: 7957 篇, 收花: 26749 次
回覆時引用此帖
舊 2007-12-14, 08:56 PM   #3 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時
註冊日期: 2002-12-07
文章: 13249
精華: 0
現金: 26241 金幣
資產: 3024051 金幣
預設

引用:
作者: a19870504 查看文章
我要限制他輸出的範圍的話 是使用 rand()%N+1 就會是限定範圍在1~N之間
然後小弟用手算了一下 感覺不太對阿 ="=
依據一般說明 rand() 會產生0~32767之間的亂數

打開 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 目前離線  
送花文章: 1999, 收花文章: 7957 篇, 收花: 26749 次
回覆時引用此帖
舊 2007-12-15, 01:57 PM   #4 (permalink)
註冊會員
榮譽勳章

勳章總數
UID - 283728
在線等級: 級別:2 | 在線時長:15小時 | 升級還需:6小時級別:2 | 在線時長:15小時 | 升級還需:6小時
註冊日期: 2007-10-25
文章: 34
精華: 0
現金: 56 金幣
資產: 56 金幣
預設

MINI大真是強

其實小弟還有些問題想要請教 請問MINI大有使用MSN或是即時通之類的軟體嗎

想說可以討論多一點

小弟的MSN跟即時通 a19870504@yahoo.com.tw
a19870504 目前離線  
送花文章: 0, 收花文章: 6 篇, 收花: 14 次
回覆時引用此帖
舊 2007-12-15, 04:50 PM   #5 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時級別:96 | 在線時長:9665小時 | 升級還需:132小時
註冊日期: 2002-12-07
文章: 13249
精華: 0
現金: 26241 金幣
資產: 3024051 金幣
預設

引用:
作者: a19870504 查看文章
有使用MSN或是即時通之類的軟體嗎
想說可以討論多一點
不好意思
沒有在用這類軟體

個人不常用 C/C++
以上只是經驗常識而已
mini 目前離線  
送花文章: 1999, 收花文章: 7957 篇, 收花: 26749 次
回覆時引用此帖
舊 2007-12-21, 12:39 AM   #6 (permalink)
註冊會員
 
joebin 的頭像
榮譽勳章

勳章總數
UID - 270712
在線等級: 級別:2 | 在線時長:16小時 | 升級還需:5小時級別:2 | 在線時長:16小時 | 升級還需:5小時
註冊日期: 2007-06-06
住址: 過去*現在*未來
文章: 42
精華: 0
現金: 58 金幣
資產: 118 金幣
預設

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
joebin 目前離線  
送花文章: 15, 收花文章: 18 篇, 收花: 28 次
回覆時引用此帖
向 joebin 送花的會員:
mini (2007-12-22)
感謝您發表一篇好文章
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用

相似的主題
主題 主題作者 討論區 回覆 最後發表
請問大大能否給我譯點通2001或2002裡的Uninst.isu這個檔案嗎 wwttomax 一般電腦疑難討論區 0 2003-04-15 08:44 AM
請問甚麼軟體可以把一首歌裡的歌聲去掉,只剩下音樂 Evelyn Liu 軟體應用問題討論區 1 2003-03-26 09:46 PM
請問..我電腦中的這....路徑裡的東西能刪嗎?? lancolian 一般電腦疑難討論區 3 2003-03-02 05:12 PM
請問如果從電腦裡的檔案夾看出曾經瀏覽的網頁?? ymcatong 軟體應用問題討論區 2 2003-01-23 07:57 PM
請問vcd裡的dat檔要如何轉檔? leon7472 軟體應用問題討論區 2 2002-12-07 01:29 AM


所有時間均為台北時間。現在的時間是 06:36 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1