[bug小记]abs函数返回0的bug解决

本周曾为了一个PC代码移植到Android NDK上效果不对的bug纠结到很晚。这里临时先记录一下。

查了很久,log加上人肉计算折腾一晚上才发现:居然abs导致的....开始完全没想到....

 

具体bug原因是:

C语言中的abs函数是定义在stdlib.h中,只支持以int为参数的abs(int),如果要实现float参数的绝对值功能,要用fabs(float)。

而C++中的abs函数是在cmath中定义,支持abs(int)和 abs(float)。而我们代码中是include  stdlib.h,却使用abs(浮点数),于是直接被Android GCC编译器强制转换成了abs(整数)。这就是为啥abs(0.3****)之类的都会返回0.


有两种解决方法:

(1)#include <cmath>

     using namespace std;

     然后用abs(float)是可以的。

(2)把代码中的abs(浮点型)都改成  fabs(浮点型)

     这样也可以。


至于之前在PC端没有出现这个问题,应该是由于工程中其它地方include了 cmath?还是VS的编译器handle了这个问题?查证了再来更新下...

你可能感兴趣的:(C++,gcc)