double类型不能自增

lucky-lucky 2012-02-13 05:37:43
以下数据类型不能++或--的是( )
A 指针 B double C int D long

此题应该选哪一个?

最有问题的是double

double x_double = 1.2;
x_double ++;

在vs2008环境下发现自增后变成了2.20000000002,中间有一大堆0(可能没打全),后面居然多了一个2,在vc6中执行,结果正确,现在,到底应该选不选double?
...全文
1454 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-02-14
  • 打赏
  • 举报
回复
纠正4楼
#include <stdio.h>
void main() {
double x_double;
for (x_double=1.2; x_double<12.01; x_double+=1.2) {
printf("%4.1lf\n",x_double);
}
}
// 1.2
// 2.4
// 3.6
// 4.8
// 6.0
// 7.2
// 8.4
// 9.6
//10.8
//12.0
AnYidan 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 czh3642210 的回复:]
选double
[/Quote]

++
yisikaipu 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 p569354158 的回复:]

引用 10 楼 yisikaipu 的回复:

标准云:除了bool型,++即+1,--即-1

这里没有排除double型

按IEEE双精度浮点格式,不存在2.20000000000,而最接近 1.2 + 1.0 的就是2.20000000002

倒是 void* 这种指针是一定不能++的


这位兄弟的解释看起来挺靠谱
[/Quote]

呵呵,我对标准只是一知半解,待指正

另外,浮点+1运算的问题,参考这贴
http://topic.csdn.net/u/20111204/19/b6b56ba1-edaf-4656-8aae-833632a617e8.html

int main()
{
double d=9007199254740992;
printf("%f\n",d);
d++;
++d;
printf("%f\n",d);

return 0;
}
lucky-lucky 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yisikaipu 的回复:]

标准云:除了bool型,++即+1,--即-1

这里没有排除double型

按IEEE双精度浮点格式,不存在2.20000000000,而最接近 1.2 + 1.0 的就是2.20000000002

倒是 void* 这种指针是一定不能++的
[/Quote]

这位兄弟的解释看起来挺靠谱
downmooner 2012-02-13
  • 打赏
  • 举报
回复
void* 不能++--
yisikaipu 2012-02-13
  • 打赏
  • 举报
回复
标准云:除了bool型,++即+1,--即-1

这里没有排除double型

按IEEE双精度浮点格式,不存在2.20000000000,而最接近 1.2 + 1.0 的就是2.20000000002

倒是 void* 这种指针是一定不能++的
正在无聊中 2012-02-13
  • 打赏
  • 举报
回复
答案确实为B,那个后面的2是浮点误差造成的。

龙行天下之Sky 2012-02-13
  • 打赏
  • 举报
回复
都可以进行自增和自减的操作,虽然double数据自增后变化,但是在double的精确度内,没有任何问题
iamnobody 2012-02-13
  • 打赏
  • 举报
回复
如果我没记错,标准规定double不可以。
lucky-lucky 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhao4zhong1 的回复:]

double x_double;
for (x_double=1.2; 11.99<x_double && x_double<12.01; x_double+=1.2) {
printf("%lg\n",x_double);
}
[/Quote]
什么意思,没执行
sagegz 2012-02-13
  • 打赏
  • 举报
回复
应该都可以的,LZ说的只是由于double类型所保证的精确度问题。
赵4老师 2012-02-13
  • 打赏
  • 举报
回复
double x_double;
for (x_double=1.2; 11.99<x_double && x_double<12.01; x_double+=1.2) {
printf("%lg\n",x_double);
}


lucky-lucky 2012-02-13
  • 打赏
  • 举报
回复
求有GCC的朋友验证一下
ouyh12345 2012-02-13
  • 打赏
  • 举报
回复
从排除性来说,当然选double
指针就是int,在32位系统上,int和long是一样的
面包大师 2012-02-13
  • 打赏
  • 举报
回复
选double

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧