隐式转换将64位缩短为32位

时间:2010-12-09 15:31:50

标签: iphone floating-point implicit-conversion cgfloat

有人可以解释为什么会导致标题中所述的错误吗?

CGFloat dx = fabs(lastPoint.x - currentPoint.x);

由于

2 个答案:

答案 0 :(得分:3)

fabs()返回double(64位),但CGFloat被定义为float(32位)。它通常是无害的 - 我个人甚至会禁用编译器警告,因为使用double值执行计算通常至少与使用float值一样快。

答案 1 :(得分:2)

更好的答案是使用#include <tgmath.h>。该标题定义了“自适应”函数,可以在任何参数大小上调用正确的函数。

如果包含该标题,您只需调用fabs即可获得该警告(也不必担心因使用错误的函数而导致精度损失)。