Readme

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

Introduction

Documentation Build Status

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) WinRPM.install("winpthreads-devel", 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.