这是一个基本问题,但我很困惑。
我有一个格式为 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/