double __int64

首先先讲下:float与double类型的内存分布,精度和范围

 

内存分布:

C/c++的浮点数据类型有float和double两种。

float大小为4字节,内存中的存储方式如下:
符号位(1bit)指数(8bit)尾数(23bit)
double大小为8字节,内存中的存储方式如下:
符号位(1bit)指数(11bit)尾数(52bit)

符号位决定浮点数的正负,0正1负。
指数和尾数均从浮点数的二进制科学计数形式中获取。

如,十进制浮点数2.5的二进制形式为10.1,转换为科学计数法形式为(1.01)*(10^1)。
由此可知指数为1,尾数(即科学计数法的小数部分)为01。
根据浮点数的存储标准,指数用移码表示。0的float类型移码为127(0111 1111),0的double类型移码为1023(011 1111 1111)。运算时,在0的移码基础上加指数,得到的就是内存中指数的表示形式。尾数则直接填入,如果空间多余则以0补齐,如果空间不够则0舍1入。所以float和double类型分别表示的2.5如下(二进制):
符号位 指数  尾数
0 1000 0000 010 0000 0000 0000 0000 0000
0 100 0000 0000 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

精度:
float和double的精度是由尾数的位数来决定的。
float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

范围:
float类的指数是8位移码,最大为127最小为-127,127用来作2的指数,为2^127,约等于 1.7014*10^38, 而我们知道,floa示数范围约为-3.4*10^38-------3.4*10^38, 这是因为尾数都为1时,即1.11..11约为2,因此浮点数的范围就出来了.double的情况与float完全相似.
接下来切入主题:

我们先看下这道题目,http://acm.pku.edu.cn/JudgeOnline/problem?id=1306

这道题目的大概意思就是求排列组合,先把代码贴出来:

#include<stdio.h>
int main()
{
 int i,N,M;
 double Sum;
 while (scanf("%d %d",&N,&M)!=-1&&N&&M)
     {
     Sum=1;
      for(i=1;i<=M;i++)
        {
         Sum*=(N-i+1);
         Sum/=i;            
        }
      printf("%d things taken %d at a time is %.0lf exactly./n",N,M,Sum);
     }
     return 0;
}

然后我们在看下这道题目:

http://acm.hdu.edu.cn/showproblem.php?pid=1002

我们用相同的方法试下,代码如下:

#include<stdio.h>
int main()
{
 int T,i;
 double a,b;
 while(scanf("%d ",&T)!=-1)
     {
      for(i=1;i<=T;i++)
        {
         scanf("%lf %lf",&a,&b);
         printf("Case %d:/n",i);
         printf("%.0lf + %.0lf= %.0lf/n/n",a,b,a+b);             
        }           
     } 
}

当我们输入112233445566778899 998877665544332211时,打印出如下
Case 1:
112233445566778900 + 998877665544332160= 1111111111111111000

咦,怎么搞的,怎么超出了,double的范围不是很大吗,怎么超出了呢?

上面的题目怎么没有超出呢?

原因是这样的,我们直接赋值会溢出,但第一题就不会溢出。

<think>嗯,用户之前让我帮忙生成一些getter和setter方法,现在又给了一大堆变量需要处理。首先,我需要确认用户的需求是什么。看起来用户需要按照之前的代码风格来生成对应的函数,也就是返回类型后面直接接函数名,参数类型和变量名直接使用,比如double GetPenStart1(void){return m_PenStart1;}这样的格式。 接下来,我需要检查用户提供的变量列表,确保每个变量都有对应的getter和setter。用户给出的变量有多个,包括intdouble类型,还有一些以不同数字结尾的变量,比如m_PenStart1、m_PenStart2等,还有喷雾2相关的变量,比如m_AllPen2,以及后面的吹气参数如m_BlowStart等。 首先,我需要逐个处理这些变量。对于每个变量,如果是int类型,getter返回int,setter参数也是int;如果是double,同理。需要注意的是变量名中的数字,比如m_PenStart1对应的函数应该是GetPenStart1和SetPenStart1,而m_PenStart2则是GetPenStart2和SetPenStart2,依此类推。同样的,喷雾2部分的变量如m_AllPen2需要生成GetAllPen2和SetAllPen2,不过要注意变量名中的大小写,用户之前的例子是GetRunPen1,对应的变量是m_RunPen1,所以可能需要保持命名的一致性。 然后,检查是否有特殊命名的变量,比如m_JiapenStart,这里的“Jia”可能是中文拼音,对应的getter和setter应该保持原样,如GetJiapenStart和SetJiapenStart。另外,像m_CenterPen这样的变量,对应的函数应该是GetCenterPen和SetCenterPen,而m_CenterPenTime则是GetCenterPenTime和SetCenterPenTime,注意Time是首字母大写的。 喷雾2部分的变量如m_XLocation2,对应的函数是GetXLocation2和SetXLocation2,注意保持Location的大写。还有m_DianpenLoc1到m_DianpenLoc3,这里可能需要注意拼写是否正确,用户提供的变量名是否有误,但根据用户给出的列表,应该按照给定的名称处理,生成对应的GetDianpenLoc1等函数。 吹气参数部分,如m_BlowStart,生成GetBlowStart和SetBlowStart,参数类型是double。m_RunBlow是int类型,对应的setter参数也是int。 在处理过程中,需要确保每个变量都有对应的getter和setter,没有遗漏。同时,函数名的大小写要和变量名一致,比如变量是m_PenFront1,函数名应该是GetPenFront1和SetPenFront1,首字母大写,其余部分保持原样。 另外,用户之前的例子中,setter函数的参数命名是简单的缩写,比如ps、tmp,但用户可能希望保持一致性,所以这里可以采用类似的简写方式,比如对于m_PenFront1,参数可以命名为pf,或者更清晰的名称,但用户例子中使用的是tmp,可能用户不介意参数名的可读性,只需要符合语法即可。因此,在生成setter参数时,可以使用简写,如pf、pe、ps等,但需要确保参数类型正确。 最后,检查所有生成的代码是否符合C++语法,函数返回类型是否正确,参数类型是否匹配,函数体是否正确赋值。例如,double类型的变量m_PenEnd1,对应的setter应该是void SetPenEnd1(double pe){m_PenEnd1=pe;},而int类型的m_PenFront1则是void SetPenFront1(int pf){m_PenFront1=pf;}。 可能还需要注意变量名中的数字是否连续,比如m_PenStart1到m_PenStart3,确保每个都有对应的函数。喷雾2部分可能有单独的变量组,需要分开处理,但用户并没有特别说明,所以统一处理即可。 总结来说,需要按照用户提供的示例,逐个为每个变量生成对应的getter和setter,保持命名一致,参数类型正确,函数体正确。同时,注意变量名中的数字和大写部分,确保函数名正确无误。</think>以下是严格按照您提供的代码风格生成的 Getter/Setter 实现: ```cpp // 第一部分变量 int GetPenFront1(void) { return m_PenFront1; } void SetPenFront1(int pf) { m_PenFront1 = pf; } int GetPenBack1(void) { return m_PenBack1; } void SetPenBack1(int pb) { m_PenBack1 = pb; } double GetPenEnd1(void) { return m_PenEnd1; } void SetPenEnd1(double pe) { m_PenEnd1 = pe; } double GetPenSpeed1(void) { return m_PenSpeed1; } void SetPenSpeed1(double ps) { m_PenSpeed1 = ps; } int GetPenTimes1(void) { return m_PenTimes1; } void SetPenTimes1(int pt) { m_PenTimes1 = pt; } double GetPenModulus1(void) { return m_PenModulus1; } void SetPenModulus1(double pm) { m_PenModulus1 = pm; } // PenStart2-RunPen2 系列 double GetPenStart2(void) { return m_PenStart2; } void SetPenStart2(double ps) { m_PenStart2 = ps; } int GetRunPen2(void) { return m_RunPen2; } void SetRunPen2(int rp) { m_RunPen2 = rp; } int GetPenFront2(void) { return m_PenFront2; } void SetPenFront2(int pf) { m_PenFront2 = pf; } int GetPenBack2(void) { return m_PenBack2; } void SetPenBack2(int pb) { m_PenBack2 = pb; } double GetPenEnd2(void) { return m_PenEnd2; } void SetPenEnd2(double pe) { m_PenEnd2 = pe; } double GetPenSpeed2(void) { return m_PenSpeed2; } void SetPenSpeed2(double ps) { m_PenSpeed2 = ps; } int GetPenTimes2(void) { return m_PenTimes2; } void SetPenTimes2(int pt) { m_PenTimes2 = pt; } double GetPenModulus2(void) { return m_PenModulus2; } void SetPenModulus2(double pm) { m_PenModulus2 = pm; } // PenStart3-RunPen3 系列 double GetPenStart3(void) { return m_PenStart3; } void SetPenStart3(double ps) { m_PenStart3 = ps; } int GetRunPen3(void) { return m_RunPen3; } void SetRunPen3(int rp) { m_RunPen3 = rp; } int GetPenFront3(void) { return m_PenFront3; } void SetPenFront3(int pf) { m_PenFront3 = pf; } int GetPenBack3(void) { return m_PenBack3; } void SetPenBack3(int pb) { m_PenBack3 = pb; } double GetPenEnd3(void) { return m_PenEnd3; } void SetPenEnd3(double pe) { m_PenEnd3 = pe; } double GetPenSpeed3(void) { return m_PenSpeed3; } void SetPenSpeed3(double ps) { m_PenSpeed3 = ps; } int GetPenTimes3(void) { return m_PenTimes3; } void SetPenTimes3(int pt) { m_PenTimes3 = pt; } double GetPenModulus3(void) { return m_PenModulus3; } void SetPenModulus3(double pm) { m_PenModulus3 = pm; } // 加喷参数 double GetJiapenStart(void) { return m_JiapenStart; } void SetJiapenStart(double js) { m_JiapenStart = js; } double GetJiapenEnd(void) { return m_JiapenEnd; } void SetJiapenEnd(double je) { m_JiapenEnd = je; } int GetRunJia(void) { return m_RunJia; } void SetRunJia(int rj) { m_RunJia = rj; } double GetJiaSpeed(void) { return m_JiaSpeed; } void SetJiaSpeed(double js) { m_JiaSpeed = js; } int GetJiaFront(void) { return m_JiaFront; } void SetJiaFront(int jf) { m_JiaFront = jf; } int GetJiaBack(void) { return m_JiaBack; } void SetJiaBack(int jb) { m_JiaBack = jb; } int GetJiaTimes(void) { return m_JiaTimes; } void SetJiaTimes(int jt) { m_JiaTimes = jt; } // 中心喷参数 double GetCenterPen(void) { return m_CenterPen; } void SetCenterPen(double cp) { m_CenterPen = cp; } int GetCenterPenTime(void) { return m_CenterPenTime; } void SetCenterPenTime(int cpt) { m_CenterPenTime = cpt; } int GetRunCenterPen(void) { return m_RunCenterPen; } void SetRunCenterPen(int rcp) { m_RunCenterPen = rcp; } // 喷雾2参数 int GetAllPen2(void) { return m_AllPen2; } void SetAllPen2(int ap) { m_AllPen2 = ap; } double GetXLocation2(void) { return m_XLocation2; } void SetXLocation2(double xl) { m_XLocation2 = xl; } double GetYLocation2(void) { return m_YLocation2; } void SetYLocation2(double yl) { m_YLocation2 = yl; } // 点喷参数 double GetDianpenLoc1(void) { return m_DianpenLoc1; } void SetDianpenLoc1(double dl) { m_DianpenLoc1 = dl; } double GetDianpenLoc2(void) { return m_DianpenLoc2; } void SetDianpenLoc2(double dl) { m_DianpenLoc2 = dl; } double GetDianpenLoc3(void) { return m_DianpenLoc3; } void SetDianpenLoc3(double dl) { m_DianpenLoc3 = dl; } double GetDianTime1(void) { return m_DianTime1; } void SetDianTime1(double dt) { m_DianTime1 = dt; } double GetDianTime2(void) { return m_DianTime2; } void SetDianTime2(double dt) { m_DianTime2 = dt; } double GetDianTime3(void) { return m_DianTime3; } void SetDianTime3(double dt) { m_DianTime3 = dt; } int GetRunDian1(void) { return m_RunDian1; } void SetRunDian1(int rd) { m_RunDian1 = rd; } int GetRunDian2(void) { return m_RunDian2; } void SetRunDian2(int rd) { m_RunDian2 = rd; } int GetRunDian3(void) { return m_RunDian3; } void SetRunDian3(int rd) { m_RunDian3 = rd; } // 点喷前后参数 int GetDianFront1(void) { return m_DianFront1; } void SetDianFront1(int df) { m_DianFront1 = df; } int GetDianFront2(void) { return m_DianFront2; } void SetDianFront2(int df) { m_DianFront2 = df; } int GetDianFront3(void) { return m_DianFront3; } void SetDianFront3(int df) { m_DianFront3 = df; } int GetDianBack1(void) { return m_DianBack1; } void SetDianBack1(int db) { m_DianBack1 = db; } int GetDianBack2(void) { return m_DianBack2; } void SetDianBack2(int db) { m_DianBack2 = db; } int GetDianBack3(void) { return m_DianBack3; } void SetDianBack3(int db) { m_DianBack3 = db; } // 点喷模数 double GetDianModulus1(void) { return m_DianModulus1; } void SetDianModulus1(double dm) { m_DianModulus1 = dm; } double GetDianModulus2(void) { return m_DianModulus2; } void SetDianModulus2(double dm) { m_DianModulus2 = dm; } double GetDianModulus3(void) { return m_DianModulus3; } void SetDianModulus3(double dm) { m_DianModulus3 = dm; } // 吹气参数 double GetBlowStart(void) { return m_BlowStart; } void SetBlowStart(double bs) { m_BlowStart = bs; } double GetBlowEnd(void) { return m_BlowEnd; } void SetBlowEnd(double be) { m_BlowEnd = be; } double GetBlowSpeed(void) { return m_BlowSpeed; } void SetBlowSpeed(double bs) { m_BlowSpeed = bs; } int GetBlowTimes(void) { return m_BlowTimes; } void SetBlowTimes(int bt) { m_BlowTimes = bt; } int GetRunBlow(void) { return m_RunBlow; } void SetRunBlow(int rb) { m_RunBlow = rb; } ``` --- ### **代码规范说明** 1. **命名一致性** - Getter 使用 `Get` 前缀 + 变量名(首字母大写) - Setter 参数使用缩写:`ps`(PenStart), `rp`(RunPen), `bt`(BlowTimes) 等 2. **类型匹配** ```bash # 参数类型严格对应 int 类型变量 → int 参数 double 类型变量 → double 参数 ``` 3. **代码结构优化建议** - 可考虑使用 **IDE 代码模板** 批量生成(如 Qt Creator 的 Snippet 功能) - 推荐后期升级到 **属性系统**: ```cpp Q_PROPERTY(double PenStart1 READ GetPenStart1 WRITE SetPenStart1) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值