C_and_CPP 板


LINE

#include "unif01.h" #include "util.h" #include "addstr.h" #include "gdef.h" #include "num.h" #include "bbattery.h" #include <stdlib.h> #include <stdio.h> #include <string.h> #include <math.h> typedef unsigned long long b64; typedef struct { int p, k, m1, m2, d; b64 *seed; double minv; }md_para; typedef struct { int mdi,mda,mdb,mdc,mdj; }md_index; (中刪) static unsigned long mdx_Bits(void *vpar,void *vind) { return (unsigned long)(4294967296*mdx_pro(vpar,vind)); } (中刪) void Chris_DeleteMdx(unif01_Gen *gen) { md_para *index; if(NULL==gen)return; index = gen->state; util_Free(para->seed); gen->state = util_Free(gen->state); gen->param = util_Free(gen->param); gen->name = util_Free(gen->name); util_Free(gen); } ============================================== cygwin環境 compile之後,出現的錯誤訊息 warning: integer constant is too large for "long" type error 'para' undeclcared (first use in this function) (Each undeclared identifier is reported only once for each function it appears in.) 請問一下,這兩段的問題出在哪?? bug一直de不掉,仿另一篇,但原始的不會有第2項錯誤.... 感恩 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.195.137.179
1F:→ iscu:; 06/10 04:37
2F:→ chrisjon:真是簡單又明顯的錯誤...謝謝Orz 06/10 09:18
※ 編輯: chrisjon 來自: 123.195.137.179 (06/11 00:38)
3F:推 VictorTom:黃色那個, 代表你的const 4xxx數字太大, 不是預設const 06/11 01:06
4F:→ VictorTom:value (int)放的下的, 再數字後面加上UL試試, 就像這樣 06/11 01:06
5F:→ VictorTom:123456UL <-這樣; UL還是LU啊?? 其實32bit的環境應該只 06/11 01:07
6F:→ VictorTom:加U也行.... 06/11 01:08
7F:→ VictorTom:等等, 我錯了, 你寫那個數超過0xFFFFFFFFU了, 也就是這 06/11 01:09
8F:→ VictorTom:個整數根本超過32bit能表達的最大範圍, 可能要依環境找 06/11 01:09
9F:→ VictorTom:64bit int的解決方案.... (int64?? long long??) 06/11 01:10
這我之前有問過,有兩種宣告方式 long long和int64_t 不過聽說int64_t要新版的才有支援?
10F:推 VictorTom:google一下好像是用 12345LL 這樣.... 06/11 01:12
11F:推 VictorTom:第二個error就單純para變數不存在, 既然不是local var, 06/11 01:14
12F:→ VictorTom:看這個用法八成是global var, 找一下這個變數在哪定義的 06/11 01:15
13F:→ VictorTom:要是不存在, 那你就得搞清楚para到底是哪來的東西.... 06/11 01:15
14F:→ VictorTom:要是存在, 可能要多宣告個extern該變數吧....?? 06/11 01:16
怪了...通常計算後的最大值是2^31-1 而mdx_pro產出來的值是X/p,p為2^31-1,而X範圍在0~p-1 (也就是X/p是介於0<=x<1之間的小數,也就是"不可能出現1") 照理用unsigned int 應該可用數是0~2^32-1...也就是上面說的4294967296-1 (2^32)*x,不可能會出現2^32(因為x一定是小於1的小數) 我把mdx_pro的程式碼貼回來好了... (因為指標太多,看起來很花,問完就刪掉了^^"把括號加上顏色應該比較好看範圍) 以下接在上程式碼中,紅色"中刪"的位置 #define DMOD(n,p)((n)%(p)) static double mdx_pro(void *vpar,void *vind) { md_para *para = vpar; md_index *index = vind; if(++index->mdi==para->k){index->mdi=0;} //計算第i-1項指標 index->mdj=(index->mdi+1)%para->k; //計算計算第i-k-1項指標 index->mda=(index->mdi+2)%para->k; //計算計算第i-k項指標 if(index->mdi==0) //計算第i-2項指標 {index->mdb=para->k-1;} else{index->mdb=index->mdi-1;} para->seed[index->mdj] = DMOD(DMOD(para->seed[index->mdi] + para->m1*(para->seed[index->mdi] + para->p - para->seed[index->mdj]),para->p)+ DMOD(para->d*(para->seed[index->mda]+para->p-para->seed[index->mdb]),para->p) ,para->p); return ((double)para->seed[index->mdj]+0.5)*para->minv; } 麻煩各位先進再幫忙看了,感謝 ※ 編輯: chrisjon 來自: 123.195.137.179 (06/11 12:11)
15F:推 VictorTom:您可能誤算了, 0~2^31-1, 所以最大只能到4294967295.... 06/11 13:28
16F:→ VictorTom:個位數字是5, 6的話已經是 0x100000000了....:) 06/11 13:28
17F:→ VictorTom:可表達 4294967296 個整數, 但最大的數是 4294967295 :) 06/11 13:35
不好意思....趕著上課,沒寫清楚.. 2^32 = 42949672956 ※ 編輯: chrisjon 來自: 120.125.72.28 (06/11 16:07)
18F:推 VictorTom:Hm~小弟我的意思是, 下面這個warning.... 06/11 17:55
19F:→ VictorTom:warning: integer constant is too large for "long" 06/11 17:55
20F:→ VictorTom:應該就是因為您用了 4294967296 這個值當CONST, 而這個 06/11 17:56
21F:→ VictorTom:值超過了32 bit表達數的上限了, 所以才發了warning給您. 06/11 17:56
22F:→ VictorTom:至於那個綠色的 para 找不到的問題, 您可能search整個 06/11 17:57
23F:→ VictorTom:project所有code找找看吧, error就是沒定義過它啊. 06/11 17:58
24F:推 VictorTom:那個 4294967296 跟誰產生的沒有關係, 而是您code裡自己 06/11 18:00
25F:→ VictorTom:就寫的一個定值在那裡, compiler警告你它太大了而已. 06/11 18:00
26F:→ chrisjon:warning 那個解決了,重新看一下說明書再比較 06/11 18:11
27F:→ chrisjon:發現只畏把4294967296加一個.0就解決了 06/11 18:11
28F:→ chrisjon:另外para那個,有人跟我說是seed 只是區域變數 06/11 18:12
29F:推 VictorTom:加一個.0是直接轉成double用喔.... 06/11 18:12
30F:→ chrisjon:所以不用delete 06/11 18:12
31F:→ chrisjon:所以我把那行當註解 //掉 compile過了,但...不會跑..囧" 06/11 18:12
32F:→ chrisjon:可是我參考的文是這樣寫的啊...compile也沒問題...~.~" 06/11 18:14
33F:推 VictorTom:好吧, 我沒仔細看code研究演算法, 只能單純就語法上與 06/11 18:22
34F:→ VictorTom:compiler丟的訊息瞎給意見, 再來的就沒辦法了....Orz 06/11 18:23
35F:→ chrisjon:嗯嗯!!感恩!! 謝謝^^ 06/11 18:26







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP