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中的函数
在 boost::math命名空间中,定义的round()函数为:
所以,在函数中使用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) 将会加速编译时间,减小目标文件的大小,而且还可以加快调试运行时间。
注:我是在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) 将会加速编译时间,减小目标文件的大小,而且还可以加快调试运行时间。
相关文章推荐
- c++使用boost正则表达式的简单用法
- boost::system::error_code ec 用法
- boost::function用法详解
- boost::function用法详解(一)
- windows下boost1.52.0版工具bcp用法
- boost.multi_array 的基本用法(2)
- SAS中取整函数(round、ceil、floor、int)用法详解
- boost socket 用法
- Boost.Bind用法详解(一)
- Jquery Math ceil()、floor()、round()比较与用法
- python之函数用法round()
- boost async_read_some 用法
- boost::asio::streambuf 基本用法和注意事项
- boost::intrusive_ptr用法
- java Math.round用法
- C++ Boost 正则表达式用法(转自:吴碧宇的cnblog)
- boost posix_time/time_duration/date 的基本用法
- boost::function的用法
- Boost Part III. 函数对象与高级编程 Library 10. Lambda 用法 switch_statement