Re: [心得] 第一次使用亂數就上手 XD (random number)
※ 引述《latinboy (暱稱)》之銘言:
: 亂數是程式語言學習上的一個重點,學校的程式課程多半會教、出練習題,
: 因此也是新手常遇到的問題。
: 在此列出一點C語言中亂數使用上的心得以及常犯錯誤
: ==
: [1] 入門用法
: srand( time(NULL) );
: for( i = 0; i < 10; i++ )
: printf( "Random number #%d: %d\n", i, rand() );
: 呼叫 srand()函式將亂數初始化,可以 time(NULL) 作為初始種子(seed),
: 或自行設定任意數。不先呼叫本函數、或種子值固定,都會造成新手常見
: 的「每次執行產生的亂數結果都相同」問題。
: ==
: [2] 產生固定範圍的亂數
: # 0 ~ n-1
: 一般常見的寫法有:
: 1. rand() % n;
: 2. (int)( n * ( rand() / (float)(RAND_MAX+1) ) );
: 兩種寫法n的上限皆不能大於RAND_MAX,否則某些範圍內的數字永遠不會出現。(Why?)
: 一般C語言的RAND_MAX只有32767,於使用上需特別注意。
: 第1種寫法在n有點大時( RAND_MAX/k < n <=RAND_MAX, say k < 5 )可能會出現
: 亂數分佈不均。因此以第2種為佳。
: # a ~ b
: 將上面的寫法改一下,變成 a + ( 0 ~ (b-a+1) - 1 )即可。
: 也就是上面的 n 變成 b-a+1。
: ==
請問為啥我照第2種寫法寫 為啥不是 0~n-1
而是 0 ~ 1-n
我印出來發現
RAND_MAX
2147483647
RAND_MAX+1
-2147483648
就變負數了
冠上float 變 -2.14748e+09
之後除下去也是負數
請問是 哪裡錯了?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.235.116
→
11/19 14:56, , 1F
11/19 14:56, 1F
→
11/19 14:56, , 2F
11/19 14:56, 2F
→
11/19 14:57, , 3F
11/19 14:57, 3F
→
11/19 15:01, , 4F
11/19 15:01, 4F
→
11/19 15:01, , 5F
11/19 15:01, 5F
→
11/19 15:28, , 6F
11/19 15:28, 6F
→
11/19 16:41, , 7F
11/19 16:41, 7F
→
11/19 21:04, , 8F
11/19 21:04, 8F
→
11/20 02:34, , 9F
11/20 02:34, 9F
→
11/20 10:45, , 10F
11/20 10:45, 10F
→
11/20 17:37, , 11F
11/20 17:37, 11F
→
11/20 19:46, , 12F
11/20 19:46, 12F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
-1
12