# Fixed-point arithmetic

Does anyone know of a library to do fixed point arithmetic in Python? Or, does anyone has sample code?

Asked by: Robert266 | Posted: 28-01-2022

If you are interested in doing fixed point arithmetic, the Python Standard Library has a decimal module that can do it.

Actually, it has a more flexible floating point ability than the built-in too. By flexible I mean that it:

• Has "signals" for various exceptional conditions (these can be set to do a variety of things on signaling)

• Has positive and negative infinities, as well as NaN (not a number)

• Can differentiate between positive and negative 0

• Allows you to set different rounding schemes.

• Allows you to set your own min and max values.

All in all, it is handy for a million household uses.

Answered by: Melanie349 | Posted: 01-03-2022

The deModel package sounds like what you're looking for.

Answered by: Kelvin726 | Posted: 01-03-2022

Another option worth considering if you want to simulate the behaviour of binary fixed-point numbers beyond simple arithmetic operations, is the spfpm module. That will allow you to calculate square-roots, powers, logarithms and trigonometric functions using fixed numbers of bits. It's a pure-python module, so doesn't offer the ultimate performance but can do hundreds of thousands of arithmetic operations per second on 256-bit numbers.

Answered by: Roland309 | Posted: 01-03-2022

recently I'm working on similar project, https://numfi.readthedocs.io/en/latest/

``````>>> from numfi import numfi
>>> x = numfi(0.68751,1,6,3)
>>> x + 1/3
numfi([1.125]) s7/3-r/s
>>> np.sin(x)
numfi([0.625     ]) s6/3-r/s
``````

Answered by: Emily608 | Posted: 01-03-2022

# Similar questions

Fixed-Point binary unpacking in python

I am struggling with a number-format problem in Python 3.6. My goal is to convert binary data from a file into printable decimal numbers. As an example, I need to convert two little-endian bytes in the form of a byte string... b'\x12\00' into its big-endian binary form... 0000000000010010 and finally to its

python - How can I create a fixed-point filter of type uint8 or int16 using fdatool in MATLAB?

I need to get the coefficients of a filter as uint8 or int16. I use fdatool to create a HPF. When I choose the fixed-point option and export the coefficients they are still floating point. Also, how can I choose the number of coefficients?

Regarding getting the decimal values as a fixed-point number in python

I have some decimal values as: 0 11.586 11.915 11.034 0 4.896 9.675 13.564 0 8.676 1.275 17.034 0 18.424 15.115 13.316 0 1.174 7.515 21.296 0 24.054 1.855 17.746 0 0.164 21.775 2.776 But i need the values in neat format and like this: 0 11.586 11.915 11.034 0 04.896 09.675 13.564 0 08.676 0...

python - How to implement fixed-point binary support in numpy

I have a homebrew binary fixed-point arithmetic support library and would like to add numpy array support. Specifically I would like to be able to pass around 2D arrays of fixed-point binary numbers and do various operations on them such as addition, subtraction, multiplication, rounding, changing of fixed point format, etc. The fixed-point support under the hood works on integers, and separate tracking of fixed-po...

python - Why is it not possible to implement fixed-point combinator like in the definition?

I'm trying to implement the Y-combinator like in the definition by Curry. This code does not work. It causes infinite recursion. F = (lambda f: (lambda x: (1 if x == 0 else (x * (f(x-1)))))) Y = ( lambda f: (lambda x: f(x(x))) (lambda x: f(x(x))) ) Y(F)(3) However, this on...