## HigherPrecision.jl

High precision replacements for Float64
Popularity
10 Stars
Updated Last
3 Years Ago
Started In
October 2017

This package will not be updated for Julia 1.0 / 0.7. It is recommended to use DoubleFloats.jl instead.

# Introduction

HigherPrecision defines the following subtypes of `AbstractFloat`

• `DoubleFloat64` - A 128 bit number type with around 30 digits of precision.

These types are intended as a drop-in replacement for `Float64` and `BigFloat`. Besides the basic arithmetic functions the following mathematical functions are defined:

`sin`, `cos`, `inv`, `rem`, `divrem`, `mod`, `sqrt`, `exp`, `log`, `sin`, `cos`, `tan`, `asin`, `acos`, `atan`, `atan2`, `sinh`, `cosh`, `sincos`, `sincosh`, `tanh`

Basic arithmetic operations are significantly faster than `BigFloat`, but the above mathematical functions can be slower than the corresponding `BigFloat` methods. In general this still should yield a significant performance boost.

## FMA Instructions

This library needs FMA instructions. If your processor supports these, you probably still need to rebuild your Julia system image. This can be done as follows

`include(joinpath(dirname(JULIA_HOME),"share","julia","build_sysimg.jl")); build_sysimg(force=true)`

If you are on Windows you need to run the following code first

```Pkg.add("WinRPM");
WinRPM.install("gcc", yes=true)

## Example

```# Simply convert an irrational number to a DoubleFloat64
double_π = DoubleFloat64(π)

# y is again a DoubleFloat64
y = rand() * double_π

# You can also create a DoubleFloat64 from a Float64
x = DoubleFloat64(0.42)

# And use the usual functions
sin(x * y)```

## Acknowledgement

This library is a port of the QD library from Yozo Hida (U.C. Berkeley), Xiaoye S. Li (Lawrence Berkeley National Lab) and David H. Bailey (Lawrence Berkeley National Lab) from C++ to Julia. See COPYING for the original modified BSD license. Also see this paper for some background informations.