变量数据类型选择--小细节大问题

大部分情况下变量的数据类型都是显而易见的,但是当有多种类型都能用时,表面上看没区别,真正用起来就不一样了。

先看下面这个例子。

实现一:

poRad(CPoint p)
{
 double result;
 if (p.x == 0)
 {
  if (p.y >= 0)
  {
   result = 1.5708;
  }
  else
  {
   result = -1.5708;
  }
 }
 else
 {
  double dTan;
  dTan = double(-p.y / p.x);
  result = atan(dTan);
 }

 if (p.x <= 0)
 {
  result = result + 3.1416;
 }
 return result;
}

实现二:

poRad(CPoint p)
{
 double result;
 if (p.x == 0)
 {
  if (p.y >= 0)
  {
   result = 1.5708;
  }
  else
  {
   result = -1.5708;
  }
 }
 else
 {
  double dTan;
  dTan = double(((double)-p.y / (double)p.x));
  result = atan(dTan);
 }

 if (p.x <= 0)
 {
  result = result + 3.1416;
 }
 return result;
}

大家试一下,实现一并不能每次都出正确的结果。由于数据类型的选择,有些时候的类型转换导致的精度丢失等问题,造成了结果和我们预期的有很大出入。

如果这个例子中传入的是 double x,y 或者 float x,y 就不会有这个问题了。

 

还有一个例子就是前几天调试别人翻译java的一段程序。功能就是对像素的RGB值分别作边界检测统计,也就是根据一个点周围各点的值从新取他的值。其中就有求和再平均的操作。由于RGB最大都是255一般都是BYTE表示就够了,所以RGB 以及他们的均值都用BYTE,但顺手就把sum也声明为BYTE,最后的结果就是值溢出了,导致最后的均值都不对。

像这种疏忽,在比较急的情况下经常发生,出了问题首先想到的就是算法哪个地方实现的不对,最后找都问题时都是哭笑不得。

所以,平时code时还是不要太毛躁,心急吃不了热豆腐,每行代码好好考虑下,养成好习惯,比风风火火写完后,再满头大汗得调试好多了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值