PIXNET Logo登入

Edison.X. Blog

跳到主文

YouLoveMe() ? LetItBe() : LetMeFree() ;

部落格全站分類:數位生活

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 7月 22 週日 201203:54
  • [亂數] <細說> C/C++ 亂數基本使用與常見問題

 
陸陸續續寫了 EA  一、二年,以前亂數引導文回頭看時才發現,怎麼有這麼多細節的錯誤、沒系統。
這篇文章主要引導初學者使用亂數,同時附上常被翻出來討論的議題,C/C++適用,唯以 C 語言撰之。
也由於是引導初學者,所以在某些用詞上會較不正確,
(繼續閱讀...)
文章標籤

edisonx 發表在 痞客邦 留言(11) 人氣(254,298)

  • 個人分類:亂數
▲top
  • 6月 20 週三 201201:36
  • [C&++] 任意亂數分佈產生器 (?)

 
在學數值分析時,會講到如何以均勻分佈,轉換到各種分佈裡,常見的大概會有波松分佈、指數分佈、常態分佈。較有名的方式 Miller-Box Transform 是專用在轉常態分佈 ( 因常態分佈是算常出現的機率模型 )。
一些常見的機率分佈亂數,C++ 都已包到 TR1 裡去,有興趣可自行參考。 
這裡提的轉換方式,當然要有一份均勻的亂數產生器 ( 統計用的均勻就夠了,如  rand() ),另外假設讀者也知道該亂數分佈的  機率函式  f(x) 為何,並可用程式語言表達出該 f(x) ,其 f(x) 長得奇型怪狀也沒差,如
(繼續閱讀...)
文章標籤

edisonx 發表在 痞客邦 留言(0) 人氣(1,961)

  • 個人分類:亂數
▲top
  • 8月 11 週四 201113:52
  • [RAND] 亂數進階議題

亂數有些議題特別拉出來再次討論,不熟的話 可看這篇。
1.  [low, up]
假定產生 [10,20] 之整數亂數,先考慮以下程式碼
(繼續閱讀...)
文章標籤

edisonx 發表在 痞客邦 留言(0) 人氣(949)

  • 個人分類:亂數
▲top
  • 7月 27 週三 201114:26
  • [RAND] Linear congruential generator (線性同餘法,LCG)

1. 基本觀念
線性同餘法基本上只有一個公式,X(n+1) = ( a * X(n) + b ) mod c,
但並非所有 a, b, c 都適用。以 a=5, b=0, c=10 為例,假定 X(0)=3 代入
(繼續閱讀...)
文章標籤

edisonx 發表在 痞客邦 留言(0) 人氣(5,638)

  • 個人分類:亂數
▲top
  • 6月 20 週一 201103:22
  • [RAND] Midproduct / Constant multiplier Method

以下說明之方法,與平方取中法均有相似之處,其重大缺點都一樣,最後容易面臨退化之窘境。
Midproduct Method (中間乘積法)
中間乘積法初始時,亂數種子必須設二個 s1, s2,假設欲生成 0~32767 之亂數 (15 位),乃是將 s1*s2 後之結果 (30 位數),取其中間 15 位數 (32 位元可拆成 9 15 8)。 C 語言大致如下所示
#include <stdio.h>
#include <time.h>
int seed1, seed2;
void MidProduct_srand(int s1, int s2)
{
seed1=s1;
seed2=s2;
}
int MidProduct_rand()
{
int ret = ((seed1 * seed2) & 0x007fffff) >> 8;
seed1 = seed2;
seed2 = ret;
return ret;
}
int main()
{
int i=0;
MidProduct_srand((int)time(NULL), (int)time(NULL));
for(i=0; i!=20; ++i) printf("%d ", MidProduct_rand());
return 0;
}
(繼續閱讀...)
文章標籤

edisonx 發表在 痞客邦 留言(0) 人氣(142)

  • 個人分類:亂數
▲top
  • 6月 16 週四 201121:19
  • [RAND] K-Algorithm

K algorithm ( "Super-random" number generator)
這是由 Kunth 於 The Art Of Programming 裡提出說明,當時 Kunth 試著以此演算法建立較好之 PRNG,也強調讀者不必特別研究它,故這部份沒太大興趣者可跳過,流程大致如下,其中 ** 代表次方,如 3**5 代表 3 的 5 次方。(以下特別注意 K1, K2)
INIT: 給一 10 位數 X ,進行以下步驟
K1. 選擇迭代次數: Y:= X/(10 ** 9),執行 K2~K13 ,Y+1次。
K2. 選擇隨機步驟: Z:= Y/(10 ** 8) mod 10,步驟轉向  K(3+Z)
K3. 確保 X >= 5* 10**9: 若 X < 5000000000 , X := X + 5000000000
K4. 平方取中法: X := (X*X / 10 ** 5) mod 10
K5. 進行乘法: X:= 1001001001X
K6. 假(偽)補數: 若 X < 10 ** 8 , X:= X+9814055677;否則 X:=10 ** 10 - X
K7. 互換二半: X 高5位與 X 低5位 (十進制) 交換,即 X:= (X mod 10 ** 5) + (X / 10 **5)
K8. 進行乘法: 同 K5
K9. 減小數字:將 X 之十進制表示之每個非 0 數字減 1
K10. 9999修改:若 X<100000,X:=X*X + 9999;否則 X:=X-9999
K11. 正規化:此時 X 不能為零,若 X < 10 ** 9 ,X:=10X,重覆此步驟
K12. 修正之平方取中法: X:= ( X*(X-1) / 10 ** 5  ) mod ( 10 ** 10),即中間十位數取代 X
K13. 重複 ? :若 Y>0,Y:=Y-1,回到步驟 K2;若 Y=0,其 X 即為隨機值。
(繼續閱讀...)
文章標籤

edisonx 發表在 痞客邦 留言(0) 人氣(184)

  • 個人分類:亂數
▲top
  • 6月 15 週三 201122:03
  • [RAND] Midsquare method (中間平方法)

Midsquare method(中間平方法 / 平方取中法)
這部份主要參考 The Art Of Computer Programming.
這方法於 1946 年前後,John Von Neumann 建議用這方法生成亂數。辦法是取前面亂數的平方後,再取中間的數字。如生成 10 位數,先前之值為 1234567890,其平方為 1524157875019052100,於是下個亂數便為 1578750190。
(繼續閱讀...)
文章標籤

edisonx 發表在 痞客邦 留言(0) 人氣(1,117)

  • 個人分類:亂數
▲top
  • 6月 14 週二 201120:35
  • [RAND] 簡介

前言
1. 這系列文章主要在探討亂數問題,我認為任何 coder 即使不知道如何寫出一份亂數產生器,但應必須知道亂數之原理及其使用之注意事項。
2. 此系列文章所參考之資料甚多,也承蒙各方好手之指導,由於內容真的有點多,若無心想一一探討,可參考 目錄 之部份,選擇自己所需之部份加以進修即可。
3. 部份綴詞沒使用得很好,主因乃試著將閱讀過的英文文獻,以中文去解釋它,部份單字我仍會保留原文,若覺語意有誤,請不吝指正。
(繼續閱讀...)
文章標籤

edisonx 發表在 痞客邦 留言(0) 人氣(1,891)

  • 個人分類:亂數
▲top
  • 5月 03 週二 201119:13
  • [C&++] 測試亂數週期

x
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
int main()
{
unsigned i;
int head[N]={0}, test[N]={0};
srand(0);
for(i=0; i!=N; ++i) head[i] = rand();
i=0;
while(memcmp(head, test, N*sizeof(int))){
memcpy(test, test+1, (N-1)*sizeof(int));
test[N-1]=rand();
++i;
}
printf("period=%u\n", i);
printf("int_max=%d\n", INT_MAX);
return 0;
}
(繼續閱讀...)
文章標籤

edisonx 發表在 痞客邦 留言(0) 人氣(254)

  • 個人分類:亂數
▲top
  • 11月 24 週三 201004:32
  • [C&++] 亂數基本使用

這篇筆者認為寫得沒系統,對初學者而言不夠清楚 ,有些地方也寫錯,有興趣可參考另一篇 
[亂數] <細說> C/C++ 亂數基本使用與常見問題
 ,本文予以關閉。

(繼續閱讀...)
文章標籤

edisonx 發表在 痞客邦 留言(0) 人氣(83,007)

  • 個人分類:亂數
▲top
1

個人資訊

edisonx
暱稱:
edisonx
分類:
數位生活
好友:
累積中
地區:

熱門文章

  • (444,500)[C] printf 引數說明
  • (83,007)[C&++] 亂數基本使用
  • (80,153)[C] 計時器整理
  • (58,130)[浮點數] IEEE754 , C/C++ 浮點數誤差
  • (49,907)VBA Procedure 簡述
  • (45,792)VBA 活頁簿(Workbooks)管理
  • (39,456)[C] scanf 引數說明
  • (31,154)[W] 初學者的 windows.h
  • (21,955)bitset 整理
  • (4,981)多測資處理

文章分類

toggle 開發手札 (2)
  • 未實作的想法 (4)
  • 心得筆記 (2)
toggle C/C++ (8)
  • C/C++ Note (52)
  • 亂數 (10)
  • Debug (9)
  • Hidden Features in C (6)
  • OO NOTE (0)
  • 面試題庫 (12)
  • C/C++ FAQ (4)
  • STL Note (3)
toggle 應用軟體/工具 (1)
  • Office (1)
toggle 數值分析 (9)
  • 非線性方程式求解 (10)
  • 矩陣運算 (7)
  • 深入質數 (5)
  • 浮點數 (9)
  • 複數 Complex (2)
  • 積分法 (2)
  • 多項式內差法 (2)
  • 常見關於數 (5)
  • math.h/cmath application (8)
toggle 程式之美 (1)
  • 遊戲之樂 (3)
toggle VB.Net (1)
  • VB.Net Note (1)
toggle 英文 (1)
  • 專題單字 (1)
toggle AutoIt!! (2)
  • AutoIt!! Note (13)
  • Auto-Dll (9)
toggle VBA (4)
  • VBA FAQ (5)
  • VBA Note (9)
  • VBA tec. (1)
  • VBA_Note2 (3)
toggle MFC (1)
  • MFC雜記 (4)
toggle Win32 (8)
  • Process (10)
  • Win32-Console (5)
  • 檔案系統 (1)
  • 音效 (1)
  • 隱喻外掛 (3)
  • System undoc. (0)
  • GDI (2)
  • 記憶體管理 (1)
toggle 環境與Script (4)
  • visual studio (6)
  • 批次檔batch (2)
  • 程式環境架構 (3)
  • Library (3)
toggle 數學整理 (2)
  • 常用公式 (1)
  • 有趣數學 (2)
toggle 演算法 (7)
  • Bit-Hacks (1)
  • AI (13)
  • 大數 (5)
  • 資料結構 (0)
  • 影像 (2)
  • 遞迴-recursive (2)
  • 回溯.列舉.遞迴 (2)
toggle 程設亂語 (1)
  • 胡言亂語 (10)
toggle SmallTalk (1)
  • SmallTalk (27)
  • 未分類文章 (1)

最新文章

  • 轉戰 python
  • [MFC] CArray 注意事項
  • 你真的很狠...
  • [開發手札] tool 整理 <NOTE>
  • [開發手札] vs dll 相容性
  • [開發手札] vc 效率問題
  • [開發手札] 修改 exe 裡面的 constant
  • [開發手札] 受不了 IDE 常當機問題...
  • [Job] Job Journal 130501
  • [面試] some tips

最新留言

  • [25/02/13] 訪客 於文章「[C語言數值分析] cmath / ma...」留言:
    您好,在最后的建表法趋近中, sin_tablePI2[i]...
  • [22/10/28] 訪客 於文章「C/C++ 學習歷程分享...」留言:
    abombterry(at)gmail.com...
  • [22/10/28] 訪客 於文章「C/C++ 學習歷程分享...」留言:
    請問現在還有教c語言嗎? 我有興趣,可否來信告知,謝謝 ...
  • [22/05/31] 五月花 於文章「[Poker] 撲克牌遊戲設計介紹...」留言:
    幫作者推一個 撲克遊戲真的很有趣 個人也是長年愛打牌的其...
  • [22/04/15] 訪客 於文章「[C語言數值分析] 非線性方程式求解 -...」留言:
    原本在搜尋引擎找出一堆 Blog 文章,不知哪幾篇值得花時間...
  • [21/12/27] RIYO 於文章「[Poker] 撲克牌遊戲設計介紹...」留言:
    感覺好酷!! 雖然不懂這些 但身為一個熱愛撲克的玩家覺得...
  • [21/10/01] 訪客 於文章「[GA] 基因演算法(Genetic A...」留言:
    只是想與板主和網友補充交流一下敝人拜讀完的拙見, 我想版主...
  • [21/06/19] 訪客 於文章「[亂數] <細說> C/C++ 亂數基本...」留言:
    請問要怎麼讓檔案第一次執行跑出10個亂數,二次執行跑出20個...
  • [20/09/24] 訪客 於文章「VBA Procedure 簡述...」留言:
    老師 您好 上述撰寫程式的示範,我能理解為何這樣演化,但我...
  • [20/06/25] 訪客 於文章「VBA Procedure 簡述...」留言:
    您好,我想請教一下 我在網路教學裡看到許多老師教製作Exc...

動態訂閱

文章精選

文章搜尋

誰來我家

參觀人氣

  • 本日人氣:
  • 累積人氣:

留言板