您的位置:首页 > 其它

boost 中round和roundf函数的用法

2013-08-25 16:45 363 查看
round()和roundf()函数是我在hog3D源码中碰到的,编译的过程中总是报错,通过网上查找发现round()函数和roundf()函数都是C++ boost库中的函数,如果需要调用这两个函数,需要:

注:我是在vs2012的环境下进行编译的,所以需要先下载boost库,然后对vs2012做相应的配置,具体步骤可参考:/article/9490635.html

(1)添加引用头文件:

#include <boost/math/special_functions/round.hpp> //对应于round()函数的头文件

#include <boost/math/tr1.hpp> //对应于roundf()函数的头文件

(2)由于在 boost::math::tr1命名空间中支持C99中的函数

double round(double x);
float roundf(float x);
long double roundl(long double x);


在 boost::math命名空间中,定义的round()函数为:

template <class T, class Policy>
inline T round(const T& v, const Policy& pol)
{
BOOST_MATH_STD_USING
if(!(boost::math::isfinite)(v))
return policies::raise_rounding_error("boost::math::round<%1%>(%1%)", 0, v, v, pol);
return v < 0 ? static_cast<T>(ceil(v - 0.5f)) : static_cast<T>(floor(v + 0.5f));
}
template <class T>
inline T round(const T& v)
{
return round(v, policies::policy<>());
}

所以,在函数中使用round()函数和roundf()函数时需要加上命名空间,使用

boost::math::round(),这时候调用的即为上面的模板函数
boost::math::tr1::roundf(),调用的就为c99中的 float roundf(float x)函数。
注:添加命名空间的好处不仅能够区分不同命名空间定义的相同函数,而且对于开发的大规模的软件,它的编译时间是很长的,boost库已经在系统中安装创建,然后添加#include <boost/math/tr1.hpp> 并且使用 boost::math::tr1::roundf(x) 将会加速编译时间,减小目标文件的大小,而且还可以加快调试运行时间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: