标签: fixed-point

我的定点算术的实现是否正确?

不久前,我创建了一堆用于定点值操作的C宏.在SO的几个问题和答案的鼓励下,我希望在我的计划的计算密集部分中获得性能提升.虽然代码似乎产生了正确的结果,但我想知道它是不是太天真/过于简单,因为它实际上比我的例程的常规浮点版本运行得慢(我在Wintel上进行双三次图像插值).您能否看一下包含我的宏的这段代码,并提出一些改进建议,特别是在性能方面?谢谢.

// these are architecture-dependent
typedef short int fixed16;
typedef int fixed32;
typedef __int64 fixed64;

// value of 2^n
#define POW2(n) (1 << n)

// create 16bit integer-based fixed point value from a floating point value, n is the number of bits reserved for the fractional part
#define FP_MAKE16(x, n) ((x) > 0.0 ? static_cast<fixed16>(floor((x) * POW2(n) + 0.5)) : static_cast<fixed16>(ceil((x) * POW2(n) - 0.5)))
// the same, 32bit
#define FP_MAKE32(x, n) ((x) > 0.0 ? static_cast<fixed32>(floor((x) * POW2(n) + …
Run Code Online (Sandbox Code Playgroud)

c++ fixed-point

1
推荐指数
1
解决办法
1582
查看次数

U0.8、U4.8、U12.8、S0.4、S4.4、S12.4、U8.8等定点表示究竟是什么意思?

我发现很难理解定点表示。当我有无符号类型的数据 (C++) 并且我想使用该数字时,就好像它是定点一样,我需要做一些我不清楚的位操作。

因此,假设我希望我的无符号数字最大为 255(8 位数字)以 U4.4 或 U12.8 或 S13.8 或任何符号表示(U - 无符号,S - 有符号,它来当我的号码是 int 时有问题)。基本上我正在扩大(或者我希望我是)数字,处理它,然后将其返回到以前的状态。

我怎么做?

有人可以分享链接,我可以在其中找到与此主题密切相关的内容。我找了三个小时,我发现的只是关于定点算术的一般解释,没有什么非常实用的。

谢谢

c++ fixed-point

1
推荐指数
1
解决办法
3260
查看次数

转换32位定点值

在我的Java应用程序中,我需要解释32位不动点值.数字格式如下:前15位描述逗号/点之前的位置,第16位表示值的符号,后面的16位描述小数位(1/2,1/4,1/8) 1/16,...).

输入是一个包含四个值的字节数组.字节数组中位的顺序是端.

我怎样才能将这样的数字转换成Java float

java fixed-point

1
推荐指数
1
解决办法
843
查看次数

Swift 中浮点数的定点表示

我试图在 Swift 中准确地表示浮点数。假设我们有一个 number let doubleNumber = 16.756。问题在于实际数字类似于16.7560009. 此外,在不同的手机上16.7559991,例如,由于处理器不平等。定点算术应该是这类问题的答案,但我不知道如何在 Swift 中解决它。老实说,在其他语言中也没有。那么如何在 Swift 中创建浮点数的定点表示呢?

我问的原因是,在跨设备准确模拟物理时,浮点数值的微小差异会导致完全不同的物理模拟。

fixed-point swift

1
推荐指数
1
解决办法
1186
查看次数

定点近似为 2^x,输入范围为 s5.26

如何使用 exp2() 的极小极大多项式近似来实现 2^x 定点算术 s5.26 并且输入值在 [-31.9, 31.9] 范围内 如何使用以下链接中提到的 Sollya 工具生成多项式 Power of 2 定点逼近

fixed-point approximation

1
推荐指数
1
解决办法
391
查看次数

带参数约束的定点幂 (pow) 函数的高效实现

我正在寻找函数的有效实现pow(a, b),其中a仅限于区间(0,1),并且b>= 1(两者都是实数 - 即不一定是整数)。

如果有帮助, b这不是一个很高的数字——假设它小于 10-20。这将打开迭代解决这个问题的可能性,迭代次数很少~=b

代码应该在 32 位微控制器上工作,可能没有浮点单元(即,使用定点实现)。

我如何实现这样一个功能,针对以下约束进行优化?我正在寻找算法本身,所以伪代码是可以接受的。

algorithm math optimization fixed-point pow

1
推荐指数
1
解决办法
311
查看次数

(8.8) 格式中的 Pi (3,1415..) 在 AX 上的 MUL 操作如何在 Assembly 中工作?

我是 Assembly 的新手,正在学习定点算法。

AX 是一个 16 位寄存器-

 MUL Pi  ; Multiplies EAX with Pi and stores result in EAX
 DIV 256 ; Divides EAX by 256 which equals the necessary right- shift for the 8,8 format
Run Code Online (Sandbox Code Playgroud)

但我不认为它是这样工作的。

x86 assembly fixed-point

1
推荐指数
1
解决办法
82
查看次数

32位定点运算1x1不等于1

我正在实现 32 位有符号整数定点算术。范围是从1到-1,INT32_MAX对应于1。我不确定是否要制作INT32_MIN-INT32_MAX对应于-1,但这暂时放在一边。

我做了一些乘法和舍入操作,如下所示:

#define mul(a, b) ((int64_t)(a) * (b))
Run Code Online (Sandbox Code Playgroud)
#define round(x) (int32_t)((x + (1 << 30)) >> 31)
Run Code Online (Sandbox Code Playgroud)

然后可以使用 找到两个数字的乘积round(mul(a, b))

当我检查身份时,问题就出现了。主要问题是 1x1 不是 1。它是INT32_MAX-1。这显然是不希望的,因为我想要位精度。我想这会影响其他附近的数字,因此如果操作数都是 ,则修复不是仅加 1 的情况INT32_MAX。另外,-1x-1 不是-1,1x-1 不是-1,并且-1x-1=-1。所以这些身份都站不住脚。

是否有一个简单的解决方案,或者这只是使用定点算术的症状?

c fixed-point

1
推荐指数
1
解决办法
237
查看次数

固定点乘以/除以15.16的数字

我正在寻找一种算法来乘以和除以15.16的固定点数.

我已经有加法和减法.那些很简单 - 简单的32位加法和减法.通过乘法和除法,我还可以添加许多三角函数和指数/日志函数.而且我认为我可以处理多次,因为我的库有一个互惠函数,我可以用它来实现除法:a * (1/b) = a / b.但是32位乘法不起作用,因为它忽略了小数点.

我正在研究一个16位微控制器,所以我想避免超过32位乘法,这在我的处理器上需要大约4个周期.但这并不重要,我只是想替换浮点数学.

我听说我需要移动或旋转结果,但我不确定这将如何帮助或具体如何改变它.任何建议或帮助表示赞赏!

fixed-point

0
推荐指数
1
解决办法
6082
查看次数

汇编中的定点乘法 (x86)

我想将 ax 寄存器中的无符号 8.8 定点数与 1.00125 相乘和相除,并将结果也存储在 ax 中。

我知道定点乘法/除法需要一些额外的步骤,但我不知道如何在汇编中实现这些步骤。

非常感谢您的帮助。

math x86 assembly fixed-point

0
推荐指数
1
解决办法
1460
查看次数

寻找除以2的最快方法

我搜索了半天,发现了一些非常有趣的事情,关于在C++中使用定点数据类型和位移来完成除法运算,同时避免浮点数学运算.但是,我只能理解它的一小部分,我似乎无法得到任何工作.

我想要做的就是取两个整数,加上它们,除以2得到平均值.我需要能够非常快速地做到这一点,因为我在Arduino上插入相机像素数据,我还有其他操作要做.

所以我对一般的转变感到困惑.假设我想要除以2的整数是27. 27的一半是13.5.但无论我尝试什么定点数据类型,我只能得到13作为输出.例如:

uint8_t  x = 27;
Serial.println(  x >> 1 );
Run Code Online (Sandbox Code Playgroud)

返回13

必须有一些简单的方法来做到这一点,对吧?

c++ floating-point fixed-point

-1
推荐指数
1
解决办法
497
查看次数