c++ - 根据符号舍入 float 的最简单方法是什么

标签 c++

我将 SFML 库用于带有移动对象的游戏应用程序。在游戏中,我有一个球对象,我需要确保每次移动球在 Y 轴上的偏移量至少为 0.1(或 -0.1)

这是我现在使用的代码:

if (offset.y < 0.0 && offset.y > -0.1) offset.y = -0.1;
if (offset.y > 0.0 && offset.y < 0.1) offset.y = 0.1;

有没有更简单/更漂亮的方法来实现它?

编辑: 正如评论所指出的那样,代码应该包含 0.0 个案例

if (offset.y < 0.0 && offset.y > -0.1) offset.y = -0.1;
if (offset.y >= 0.0 && offset.y < 0.1) offset.y = 0.1;

最佳答案

只需使用 std::abs()std::copysign() :

if (std::abs(offset.y) < .1)
    offset.y = std::copysign(.1, offset.y);

以任何其他方式保留零的符号都很困难。

但是,请考虑您是否不能改用积分模型; .1 不能精确表示为二进制 float 。

关于c++ - 根据符号舍入 float 的最简单方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56693802/

相关文章:

c++ - 将 Objective C "code blocks"转换为 C++ 中的等价物

c++ - 使用 'this ->' 引用类的成员是否有好处或性能提升?

c++ - POSIX 线程运行

c++ - `std::chrono`时钟与 `boost::xtime`的比较

c++ - 在 DirectX9 中旋转单个对象

c++ - std::copy_n 是否适用于重叠范围?

c++ - 模块属性名称-值对 C++ API 框架 - reshape ?

c++ - 通过引用传递结构并分配字符串

python - 我使用 python3.5 和 OpenCV 3.1.0,OpenCV 函数 cv2.countNonZero(img) 我得到一个错误

c++ - 在 DATETIMEPICK_CLASS 元素中获取和设置日期