gpt4 book ai didi

c - C中 float 定点运算的位移位

转载 作者:太空宇宙 更新时间:2023-11-04 00:31:59 24 4
gpt4 key购买 nike

我写了下面的测试代码来检查定点运算和位移。

void main(){
float x = 2;
float y = 3;
float z = 1;
unsigned int * px = (unsigned int *) (& x);
unsigned int * py = (unsigned int *) (& y);
unsigned int * pz = (unsigned int *) (& z);
*px <<= 1;
*py <<= 1;
*pz <<= 1;
*pz =*px + *py;
*px >>= 1;
*py >>= 1;
*pz >>= 1;
printf("%f %f %f\n",x,y,z);
}

结果是2.000000 3.000000 0.000000

为什么最后一个数字是0?我期待看到 5.000000我想使用某种定点算法来绕过图像处理应用程序中 float 的使用。将我的 float 组转换为整数的最佳/最简单/最有效的方法是什么?上面的“欺骗编译器”是一个可靠的解决方法吗?有什么建议吗?

最佳答案

如果你想使用定点,不要使用类型“float”或“double”,因为它们有内部结构。 Floats 和 Doubles 有特定的符号位;一些用于指数,一些用于尾数(看看彩色图像 here );所以它们本质上是 float 。

您应该手动编写定点程序以整数类型存储数据,或者使用一些定点库(或语言扩展)。

在 GCC 中实现了浮点扩展的描述:http://gcc.gnu.org/onlinedocs/gcc/Fixed_002dPoint.html

C 有一些基于宏的定点手动实现:http://www.eetimes.com/discussion/other/4024639/Fixed-point-math-in-C

关于c - C中 float 定点运算的位移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10819436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com