Fixed-point arithmetic

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

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.


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.


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

Tags:

Python

Math