【发布时间】:2017-07-28 17:43:11
【问题描述】:
我搜索了半天,发现了一些非常有趣的事情,即在 C++ 中使用定点数据类型和位移来完成除法运算,同时避免浮点数学。但是,我只能理解其中的一小部分,而且我似乎什么也做不了。
我想要做的就是取两个整数,将它们加起来,然后除以 2 得到平均值。不过,我需要能够很快地做到这一点,因为我在 Arduino 上插入相机像素数据,而且我还有其他操作要做。
所以我对总体上的转变感到困惑。假设我要除以 2 的整数是 27。27 的一半是 13.5。但无论我尝试什么定点数据类型,我都只能得到 13 作为输出。例如:
uint8_t x = 27;
Serial.println( x >> 1 );
返回 13
必须有一些简单的方法来做到这一点,对吧?
【问题讨论】:
-
最快的方法是使用普通除法,然后让编译器优化。
-
至于您的问题,您如何将带有小数的浮点值(如
13.5)表示为整数? -
整数数据类型不是定点,你在这里严重混淆了一些东西。
-
@SegeyA 你不应该只赞成“抵消反对票”。这实际上违背了投票系统的意义。
-
由于几个原因,我对这个问题投了反对票。大多数情况下,这是因为“我应该移位而不是除以 2”的问题被问了很多。此外,这个问题实际上与此无关。基本上是,“当我将 27 除以 2 时,为什么我得到 13 而不是 13.5?”这个问题也被问了很多。此外,OP使用术语“定点”,但似乎对什么是定点没有任何理解。任何对定点算术的好的解释都将解释如何进行算术运算。 TL;DR:这个问题没有显示任何研究工作
标签: c++ floating-point fixed-point