C++浮点数近似值和大小比较

在平时编程的时候,经常会碰到浮点数和整数的转换,相对于精度损失来说,很多时候无意识的转换会碰到意想不到的结果,甚至产生严重的事故。

float time1 = 2.9;int time2 = int(time1);LOG(INFO) << "time2 " << time2;

输出结果

time2 2

可以看到使用int是直接向下取整,而不是四舍五入,四舍五入需要使用std::round()函数

int time3 = int(std::round(2.9));LOG(INFO) << "time3 " << time3;

输出结果

time3 3

所以写代码时最好不要用int类型转换,而是采用std::floor或者std::ceil明确指出是向下取整还是向上取整

int time4 = std::floor(time1);int time5 = std::ceil(time1);LOG(INFO) << "time4 " << time4 << ", time5 " << time5;

输出结果

time4 2, time5 3

浮点数不要用==直接比较大小,这样会因为极小的误差导致不相等,如果确实要比较,最好是采用如下方式

float time6 = 5.9999, time7 = 5.9999;if (std::abs(time6 - time7) < std::numeric_limits::epsilon())    LOG(INFO) << "time6 == time7";

整形不要和无符号整型进行比较

int time8 = -1;size_t time9 = 1;if (time8 < time9)    LOG(INFO) << "time8 < time9";else    LOG(INFO) << "time8 >= time9";

出人意料的输出

time8 >= time9

整形转换

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章