2012-12-22 17 views
2

当通过数字序列循环(例如,0.1,-0.5,1.0,-0.33,...)我想要的方式来测试的当前数目是否具有比前一个不同的符号。我的代码是低于,但 - 必须有更好的方式..测试符号更改的更好方法?

-(bool)signChanged:(float)prev :(float)value{ 

    // our value is negative 
    if(value < 0.0){ 

     // previous value is positive or zero 
     if(prev >= 0.0) return true; 

    // our value is positive 
    }else{ 

     if(prev < 0.0) return true; 
    } 

    return false; 
} 
+1

如果((值* PREV)<0)? (取决于你想从0得到什么行为) – JasonD

回答

6

对于这样的快速验证,使用代替的方法的宏:

#define SAME_SIGN(v1,v2) (v1>=0)==(v2>=0) 
1

将您的值乘以以前的值。如果结果是肯定的,则标志没有改变。否则,它已经。

+0

如果溢出?除了乘法更昂贵。 – lerosQ

+0

无法验证如果一个值为零,那么这是一个聪明的想法。 –