Chinaunix首页 | 论坛 | 博客
  • 博客访问: 314033
  • 博文数量: 60
  • 博客积分: 2781
  • 博客等级: 少校
  • 技术积分: 600
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-23 16:42
文章分类

全部博文(60)

文章存档

2011年(33)

2010年(27)

分类: C/C++

2011-03-14 20:10:38

    今天遇到一个很有意思的问题,为了以后不再犯错误,总结一下吧。
    
  1.   for (i = 0; i < sqrt(NUMBER) + 1; i++)

   for (i = 0; i <= sqrt(NUMBER); i++)
    这个问题就是关于浮点型和整型的比较,如果 NUMBER 恰巧是某个数的平方,比如说 NUMBER = 100, 那么这两个for循环的限制条件是一样的;如果 NUMBER 不是某个数的平方,比如说 NUMBER = 500000,那么这两个for循环中的循环次数就不一样了,第一个循环:i = 708,第二个循环:i = 707。按照我的理解,sqrt(500000)系统自动转换成整型707,那么 i < 708(第一个for循环)和 i <= 707(第二个for循环)效果应该一样的啊,但是我的想法是错误的,按照计算机的设计原理,对于不是平方数的整型开根号后,
  1. i < sqrt(NUMBER) === i <= sqrt(NUMBER)
这两个条件判断是相同的,所以这就是为什么第一个for循环多循环了一次。

    以后为了避免这种编程细节造成不必要的麻烦,可以
  1. (int)sqrt(NUMBER)
强制转换成整型,避免了整型与浮点型的判断了。
阅读(3064) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~