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.