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灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP