c++ - float 到固定转换

标签 c++ math floating-point fixed-point

这是一个基本问题,但我很困惑。

我有一个格式为 1.4.12 的寄存器。这意味着它需要一个 float 并取范围 -15.9999 - 15.9999,这是正确的,还是有多少个 9?我对这个范围感到困惑。

我需要将 C++ float 转换为定点数并将其放入寄存器中吗?是否有任何 std::库可以在 C 中执行此操作?如果没有,是否有人可以向我指出任何标准代码?

另外,固定值怎么转为 float 值好呢?

最佳答案

自己做这个很简单:

typedef int32_t fixed;

fixed float_to_fixed(float x)
{
    return (fixed)(x * 65536.0f / 16.0f);
}

请注意,这没有范围检查,因此如果 x 可能超出您的定点类型的有效范围,那么您可能需要添加一些检查并根据需要饱和或抛出错误。

其他方向的转换也类似:

float fixed_to_float(fixed x)
{
    return (float)x * 16.0f / 65536.0f;
}

(这个当然不需要任何范围检查。)

关于c++ - float 到固定转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28483652/

相关文章:

parsing - 编译器解析精确 float

c++ - 如何在 C++ 中使用共享/弱指针干净地实现两个引用彼此的对象?

c++ - 未命名命名空间中 `using namespace` 的范围

c++ - 当 C 代码调用 Fortran 子程序时,子程序顶部发生段错误

c++ - 如何将可选参数传递给 C++ 中的方法?

python - 限制 python 仅使用实数空间

python - 如何让用户使用 "sqrt()"+ 输入求输入的平方根?

c++ - floor() 的奇怪行为

javascript - 数字格式化函数 : What algorithm is used for rounding values ending in 5?

java - 在 Java 中防止在 String.format ("%.2f", doubleValue) 中四舍五入