作者chrisjon (隨機數能吃嗎?)
看板C_and_CPP
標題[問題] 哪裡出問題了..=.=a?
時間Tue Apr 28 22:51:42 2009
#include <stdio.h>
#include <math.h>
int main()
{
float f;
int lcg_p,lcg_a;
int Lcg_seed;
lcg_p = 2147483647;
lcg_a = 16807;
scanf("%d", &Lcg_seed);
printf("%d\n", Lcg_seed);
Lcg_seed = Lcg_seed*lcg_a % lcg_p;
printf("%d\n", Lcg_seed);
f = Lcg_seed / lcg_p;
printf("%f\n", f);
return Lcg_seed;
}
==================================
簡單的數學式表示就是
X[i] = a*X[i-1] mod p
mod 為取餘數
==================================
我重新修改過
compile成功
但是
f完全沒有計算,print出來是0.00000
另外,return是整個程式計算完之後,要回傳的值嘛?
所以我return後,應該會回傳Lcg_seed的值不是嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.195.128.31
1F:推 BSpowerx:取餘數限定用在整數。一定要將取餘數的數改成int型態 04/28 22:54
2F:→ sunneo:浮點數的餘數要用 math.h的 fmod 04/28 22:56
3F:→ sunneo:另外main的回傳值必須是整數 04/28 22:56
4F:→ chrisjon:可是,如果取int而不用double的話,p算不會爆量嗎? 04/28 23:17
5F:→ chrisjon:例如int上限100,而a*b % 3 = 101 % 3 = 2 不會爆掉嗎? 04/28 23:18
6F:推 littleshan: (a * b) mod c = (a mod c)*(b mod c) mod c 04/28 23:24
7F:→ chrisjon:a<c,b<c,但有可能a*b>c,而c是2^31 - 1,謝謝 04/28 23:36
※ 編輯: chrisjon 來自: 123.195.128.31 (04/29 00:07)
8F:→ MOONRAKER:f = Lcg_seed / (float) lcg_p; 新手級問題 04/29 02:07
謝謝,只學過其他語言,臨時因用到的套裝軟體需要而來了解c語言
在圖書館借幾書要在幾個月內就要弄好,真的有點趕,好在有學過其他語言
能比較快一點進入狀況。
真不好意思問這些新手問題,但周圍又沒其他人會c語言,所以只能
麻煩板上各位先進幫我這臨陣磨槍的新手一個忙了^^"
感恩
※ 編輯: chrisjon 來自: 123.195.128.31 (04/29 04:41)
9F:→ MOONRAKER:整數/整數會用整數除法算,所以你至少要把其中一者強制 04/29 09:53
10F:→ MOONRAKER:轉為浮點,他才會用浮點除法計算 04/29 09:54
11F:→ chrisjon:唔...這就麻煩了..Lcg_seed和lcg_p前部份要設成int 04/29 22:15
12F:→ chrisjon:這樣才能計算%,現在又要設成float...囧" 04/29 22:15
13F:→ sunneo:推過了 fmod ... 04/30 00:32
14F:→ sunneo:會用內建函式就省了麻煩了不是 ? 04/30 00:32
15F:→ sunneo:還是你壓根不想使用內建函式? 04/30 00:33
16F:推 VictorTom:也搞不好是作業, 老師規定不準用內建函數....XD 04/30 00:38
17F:→ VictorTom:遙想以前計組, 老師作業是要我們自己寫把ASCII 123.456 04/30 00:38
18F:→ VictorTom:這樣的user input, 轉換並寫入float f去, IEEE754啊Orz 04/30 00:39
19F:→ sunneo:不過那可真令人疑惑了呢 因為他連math.h都include了... 04/30 01:11
20F:→ VictorTom:我看他好像沒真的call到math.h的lib就是了, 不過小弟也 04/30 01:23
21F:→ VictorTom:只是亂猜啦; 真要的話還是得請原po自己說明清楚了:) 04/30 01:24
22F:→ chrisjon:fmod那個是我漏看了...^^"拍洗 04/30 02:18
如果要說是作業,其實也不為過...因為是論文...~.~
http://www.iro.umontreal.ca/~simardr/testu01/tu01.html
pdf載點
http://www.iro.umontreal.ca/~simardr/testu01/guideshorttestu01.pdf
不過這是guide short testu01
我是看 guide long testu01
我現在在看第二章的部份
苦於英文及組合能力太差....單字查完看得懂,全段意思組不起來...囧"
只知道裡面有提到 "非常簡單"、"使用外來的產生器做檢定很簡單"
.....= ="
然後大概也看得懂部份程式,但是就是...不會使用....~.~
我現在先試著把我已經用Maple語言寫好的程式碼轉成C語言來跑
然後再運用cygwin去測轉好的程式有沒有問題
說明書嘛...再慢慢看...總會看得通的....
※ 編輯: chrisjon 來自: 123.195.128.31 (04/30 02:31)
23F:推 sunneo:但是不管怎麼說 X[i] = a*X[i-1] mod p 04/30 02:38
24F:→ sunneo:其中X[ i ]如果是浮點數 那麼這個式子應該是 04/30 02:39
25F:→ sunneo:X[i] = a * fmod( X[i-1], p ) 04/30 02:39
26F:→ sunneo:其中fmod就是浮點數該使用的餘數函式 04/30 02:39
27F:→ sunneo:然後 f = Lcg_seed / lcg_p 這個式子你會永遠得到0 04/30 02:41
28F:→ chrisjon:找到了fmod的說明,謝謝 用法了解中 04/30 02:57
29F:→ chrisjon:原來 /(float)lcg_p 也是一種用法= =" 04/30 03:13