在Python中复制C定点数学

问题描述 投票:1回答:1

我正在尝试使用最初用C语言编写的Python复制DSP算法。诀窍是,我还需要保留C版本中32位定点变量的相同行为,包括精度有限的所有数字错误。将介绍。

我认为当前可用的选项是:

我知道python的Decimal类型可以用于定点运算,但是据我所知,没有办法调整Decimal变量的大小。据我所知,numpy不支持执行定点运算。

我做了一个快速实验,以了解摆弄十进制精度如何影响事物:

>>> a = dc.Decimal(1.1)
>>> a
Decimal('1.100000000000000088817841970012523233890533447265625')
>>> sys.getsizeof(a)
104
>>> dc.getcontext().prec = 16
>>> a = dc.Decimal(1.1)
>>> a
Decimal('1.1999999999999999555910790149937383830547332763671875')
>>> sys.getsizeof(a)
104

精度更改之前/之后有更改,但是小数位数仍然很多。该变量的大小仍然相同,并且在其后还有很多小数位。

我如何最好地实现最初的目标?我确实知道Python ctypes具有C语言浮点数,但是我不知道这在这种情况下是否有用。我不知道是否还有一种方法可以准确地模拟Python中的C型定点数学。

谢谢!

python c precision numerical-methods fixed-point
1个回答
0
投票
我推荐

fxpmath模块,用于python中的定点操作。也许可以模拟定点算术,以位(小数部分)为单位定义精度。它支持数组和一些算术运算。

回购于:https://github.com/francof2a/fxpmath

这里举个例子:

from fxpmath import Fxp x = Fxp(1.1, True, 32, 16) # (val, signed, n_word, n_frac) print(x) print(x.precision)

结果:

1.0999908447265625 1.52587890625e-05

© www.soinside.com 2019 - 2024. All rights reserved.