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

文章详细记录了解决在Android NDK移植过程中遇到的abs函数使用错误,导致浮点数转整数后计算结果不正确的bug。通过引入cmath库或修改abs调用方式解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本周曾为了一个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了这个问题?查证了再来更新下...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值