# SoftPosit.jl

Julia types for the C-based SoftPosit library - a posit arithmetic emulator.

Posit numbers are an alternative to floating-point numbers. Posits extend floats by introducing regime bits, that allow for a higher precision around one, yet a wide dynamic range of representable numbers. For further information see https://posithub.org

If this library doesn't support a desired functionality or for anything else, please raise an issue.

# 8, 16 and 32bit posit formats

SoftPosit.jl emulates the following Posit number formats `Posit(n,es)`

, with `n`

number of bits including `es`

exponent bits: Posit(8,0), Posit(16,1), Posit(32,2) as primitive types called

```
Posit8, Posit16, Posit32
```

following the draft standard. Additionally, the following off-standard formats are defined as primitive types, which are internally stored as 32bit (the remaining bits are kept as zeros): Posit(8,1), Posit(8,2), Posit(16,1), Posit(16,2), Posit(24,1), and Posit(24,2) called `Posit8_1`

, `Posit8_2`

, `Posit16_1`

, `Posit16_2`

, `Posit24_1`

, and `Posit24_2`

.

For all the types `Posit8, Posit16, Posit32, Posit8_2, Posit16_2, Posit24_2`

conversions between Integers and Floats and basic arithmetic operations `+`

, `-`

, `*`

, `/`

and `sqrt`

(among others) are defined. Unfortunately, `Posit8_1, Posit16_1, Posit24_1`

are not yet fully supported by the underlying C library.

To support quires, `Quire8`

, `Quire16`

and `Quire32`

are implemented as 32 / 128 / 512bit types for fused multiply-add and fused multiply-subtract. Additional math functions like `exp`

,`log`

,`sin`

,`cos`

,`tan`

are defined via conversion to `Float64`

(no support yet of the C library) and therefore do not have error-free rounding.

# Examples

Conversion to and from `Float64`

and computing a square root

```
julia> using SoftPosit
julia> p = Posit16(16.0)
Posit16(0x7000)
julia> sqrt(p)
Posit16(0x6000)
julia> Float64(sqrt(p))
4.0
```

for a comprehensive notebook covering (almost) all the functionality of SoftPosit.jl please read softposit_examples.ipynb

# Installation

In the package manager do

`julia>] add SoftPosit`

and then simply `using SoftPosit`

which enables all of the functionality.