C++ 的浮点数取整

作者: , 共 458 字 , 共阅读 0

C++的浮点数转整数有四种方法,直接类型转换、round、floor、ceil。其效果如下表:

x -1.9 -1.5 -1.1 1.1 1.5 1.9
static_cast<int>(x) -1 -1 -1 1 1 1
std::round(x) -2 -2 -1 1 2 2
std::floor(x) -2 -2 -2 1 1 1
std::ceil(x) -1 -1 -1 2 2 2

尤其注意

  • 类型转换并不等价于 round ,也不是 floor ,而是向 0 靠拢。
  • round 函数在 0.5 的位置是远离 0 的(和类型转换相反), round(0.5)=1round(-0.5)=-1
  • 注意在 c99 里没有 round 只能接收 double 为参数,接收 float 为参数的函数为 roundf。c++里都可以。
  • 除了第一个,后面三个函数均返回 float (或 double )类型,这是因为原数据的表达范围超过 int 的返回类型。

Q. E. D.

类似文章:
编程 » 算法, 算法分析
下面这个求$ 1/\sqrt{x}$ 的函数号称比直接调用 sqrt 库函数快 4 倍,来自游戏 Quake III 的源代码。
相似度: 0.054
编程 » C++, 算法, 代码片段
一个短小、高效的 C++函数,用来判断指定日期是星期几:
编程 » C++, C++标准库
std::tuple的原理并不复杂,但有些细节非常有意思。其中有一个是至少在gnu C++ std的实现中,std::tuple是倒序存储的:
编程 » C++,
C++的多行宏有标准定义方式,boostfolly库都采用了这种方式:
编程 » C++, 智能指针
理论上而言,当 C++提供了std::unique_ptr, C++的程序就不应该出现普通指针了。所有普通指针都可以用std::unique_ptr代替,避免手动删除对象。
std::thread是 C++ 11 新引入的标准线程库。在同样是 C++ 11 新引入的 lambda 函数的辅助下,std::thread用起来特别方便:
C++内存检查和性能分析工具 valgrind里介绍了 valgrind 的安装,以及用于效率分析 profiler 工具。valgrind 最本来的功能是内存检查。这篇文章做简单的介绍。
编程 » C++, 编译错误
在 gcc 中,存在继承关系的模版类,子类无法直接访问父类的成员,即使该成员是protectedpublic