Репликация математики C с фиксированной точкой в ​​Python - PullRequest
1 голос
/ 16 июня 2019

Я пытаюсь реплицировать алгоритм DSP на Python, который изначально был написан на C. Хитрость заключается в том, что мне также нужно сохранить то же поведение 32-битных переменных с фиксированной точкой из версии C, включая любые числовые ошибки, которые ограниченыточность представит.

Доступны следующие параметры:

Я знаю, что десятичный тип python можно использовать для арифметики с фиксированной запятой, однако из того, что я могу сказать, нет способа отрегулировать размердесятичной переменной.Насколько мне известно, 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 имеет плавающий язык Си, но я не знаю, будет ли это полезно в этом случае.Я не знаю, есть ли в Python способ точной имитации математики с фиксированной точкой типа C.

Спасибо!

...