作者chrisjon (與程式最後的決戰)
看板C_and_CPP
標題[問題] Debug,無法顯示結果在畫面上
時間Mon Sep 14 20:31:33 2009
主要是綠色那一段,照理來講,for(i=1;i<300;i++)應該執行300次
然後printf 300次,如果說是程式碼寫錯,至少也應該會印一次才對
可是執行結果,一次也沒顯示.....
是哪裡有問題呢??
有板友願意幫看程式其他錯誤,我順道把公式寫上來好了,感謝=v="
┌X[i,1] ┐ ┌ b*X[i-1,k]┐
│X[i,2] │ │X[i-1,1] + b*X[i-1,k]│
│X[i,3] │ │X[i-1,2] + b*X[i-1,k]│
│.... │=│ .................. │
│X[i,k-1]│ │X[i-1,k-2] + b*X[i-1,k]│
│X[i,k] │ │X[i-1,k-1] + b*X[i-1,k]│
└ ┘ └ ┘
第一組[i-1]共97個數
第二組[i]的97個數要產生時,需利用第一組的數
X[前一組的數,前一組第幾個數]
這樣的公式需從後面往前算(因為計算第j個數,需利用第j-1個數來計算)
程式計算結果,從第303個之後的數180個0,但這是不可能發生的
只有當97個數全是0時,才會出現後面全0的狀態,但也就只有全0才會產出全0的狀況
這組公式中絕不可能出現這種狀況
不知道程式的錯誤在哪~.~
===========================================================
typedef unsigned long long b64;
#define DMOD(n,p)((n)%(p))
int main(void)
{
int i,mci;
int p=2147482621;
int b=1048148;
int k=97;
b64 tseed,seed[97];
seed[1] = 135792468;
for(i=2;i<=k;i++){
seed[i] = DMOD(1073741816 * seed[i-1],p);
}
for(i=1;i<300;i++){
if(++mci==k+1){
tseed=DMOD(b*seed[k],p);
for(j=k;j>1;j--){
seed[j]=DMOD(seed[j-1]+tseed,p);
}
seed[1]=tseed;
mci=1;
printf("第%d個隨機數的值為%lld\n",j,seed[mci]);
}
}
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.195.137.179
→ idicivik:是不是 mci 沒給初始值導致 mci 的值大過98呢 09/14 20:37
→ chrisjon:喔喔!!忘了給起始值...感謝 09/14 21:07
推 ledia:宣告seed[97] 不能用到第 97 個 index, 第一個迴圈就爆了 09/15 00:24
→ chrisjon:喔喔!!難怪跑出來的值超怪!!感謝 09/15 09:48
→ chrisjon:剛試了一下,結果一樣...Q.Q 09/15 09:50
推 ledia:seed[1] = tseed; <--- 是否應該是 seed[i] = tseed; 09/15 10:35
→ chrisjon:o.o結果應該一樣吧? i-- → i=1不符合i>1 → 跳出, 感謝 09/15 11:28
※ 編輯: chrisjon 來自: 123.195.137.179 (09/15 11:50)
→ ledia:ah.. 是我沒看清楚 ._. 還有新版 code 嗎? XD 09/15 11:35
推 VictorTom:小弟我看不懂 "從第303個之的數180個0" 這句話@_@" 09/15 12:04
推 VictorTom:另外, 綠色那段迴圈看起來沒有機會中止啊?? 09/15 12:09
第303之後的數,計算出來全是0,代表有問題....~.~(少一個"後"字)
修好了,原始程式碼改過,這裡的程式碼忘了改:p
※ 編輯: chrisjon 來自: 123.195.137.179 (09/15 12:25)
※ 編輯: chrisjon 來自: 123.195.137.179 (09/15 12:26)
→ chrisjon:我是呆子....突然看到有些地方沒修到....Orz 09/15 12:26
→ chrisjon:printf("...seed[j]")→printf("...seed[mci]") 09/15 12:28
推 VictorTom:如果一開始mci是init成1, 那麼for 300的那迴圈.... 09/15 12:42
→ VictorTom:看起來也只會印個3次就跑完了, 哪來300多個結果?_? 09/15 12:43
→ TeaEEE:直接把b64 seed[97]改成seed[98]試看看 09/15 16:34