Metadata-Version: 2.1
Name: sfpy
Version: 0.4.2
Summary: softfloat and softposit in python
Home-page: https://github.com/billzorn/sfpy
Author: Bill Zorn
Author-email: bill.zorn@gmail.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: License :: OSI Approved :: MIT License
Description-Content-Type: text/markdown

# sfpy
softfloat and softposit in Python
  * support for softfloat float16, float32, and float64
  * support for softposit posit8, quire8, posit16, and quire16

## Installation
On most linux distros with CPython 2.7, 3.4, 3.5, 3.6, or 3.7, sfpy should work out of the box:

```
pip install sfpy
```

Under the hood, sfpy uses Cython to create bindings for the softposit and softfloat C libraries.
The building instructions are tested on Ubuntu 16.04 - for other platforms they may need some
adaptation.

## Demo
```
>>> import sfpy
>>> from sfpy import *
>>> a, b = Float16(1.3), Float16(1.4)
>>> a * b - a / b
Float16(0.89208984375)
>>> sfpy.float.flag_get_inexact()
True
>>> a += b
>>> a
Float16(2.69921875)
>>>
>>> x, y = Posit16(3.0), Posit16(3)
>>> x
Posit16(3.0)
>>> x.bits
22528
>>> y
Posit16(2.9802322387695312e-08)
>>> y.bits
3
>>> x * y
Posit16(8.940696716308594e-08)
>>> acc = Posit16(0)
>>> for i in range(10000):
...   acc = acc.fma(x, y)
... 
>>> acc
Posit16(1.9073486328125e-06)
>>> acc.bits
24
>>> q = Quire16(0)
>>> for i in range(10000):
...   q.iqma(x, y)
... 
>>> q
Quire16(0.00089263916015625)
>>> q.bits
64424509440000
>>> q.to_posit()
Posit16(0.00089263916015625)
>>> q.to_posit().bits
490
```

## Building
See [BUILDING](https://github.com/billzorn/sfpy/blob/master/BUILDING.md).


