警告 C4244:"返回":从'double'转换为"浮点",可能会丢失数据



为什么在第2-6行收到此编译器警告消息?

警告C4244:"return":从"double"转换为"float",可能丢失数据

inline float SIGN(const double &a, const float &b)
{return b >= 0 ? (a >= 0 ? a : -a) : (a >= 0 ? -a : a);}
inline float pow (float x, double y) {return pow(double(x),y);}
inline float pow (double x, float y) {return pow(x,double(y));}
inline float atan2 (float x, double y) {return atan2(double(x),y);}
inline float atan2 (double x, float y) {return atan2(x,double(y));}

在C和C++中,float类型的精度低于double类型。您已经将函数声明为返回浮点,但这些函数使用的是double。混合数字类型的规则在这里适用,当您组合它们时,一些类型会被无声地转换。

函数内部计算的结果是二重的,然后作为浮点从函数返回。编译器警告您,从函数内部返回的double类型中的值可能不适合函数的返回类型float,并且在转换过程中可能会丢失一些精度。否则,它不会明确警告您混合float和double。但如果将intdouble混合使用,则可能会出现这种情况。

在现代(不到10岁(的台式机或服务器硬件上使用浮点型几乎没有什么价值。

相关内容

  • 没有找到相关文章

最新更新