项目作者: davidchall

项目描述 :
Arbitrary-precision arithmetic for R
高级语言: C++
项目地址: git://github.com/davidchall/bignum.git
创建时间: 2020-09-13T18:10:44Z
项目社区:https://github.com/davidchall/bignum

开源协议:Other

下载


bignum

Lifecycle:
experimental
CRAN
status
R build
status
Coverage
status

bignum provides numeric vectors with greater precision than R atomic
numeric vectors.

  • biginteger() stores any integer (i.e. arbitrary precision).
  • bigfloat() stores 50 decimal digits of precision.

They prioritize precision over performance, so computations are slower
than those using integer() or double().

Under the hood, bignum uses the
cpp_int
and
cpp_bin_float_50
data types from the Boost.Multiprecision C++ library.

Installation

You can install the released version of bignum from
CRAN with:

  1. install.packages("bignum")

Or you can install the development version from GitHub:

  1. # install.packages("remotes")
  2. remotes::install_github("davidchall/bignum")

Usage

Before starting, we’ll increase the displayed precision so we can see
the benefits of bignum.

  1. options(digits = 20)
  2. options(bignum.sigfig = 50)
  3. options(bignum.max_dec_width = 52)

Arbitrary-precision integer vector

The limited precision of atomic vectors introduces errors when working
with very large integers. As an example, let’s calculate the factorial
of 23. In base R, we’d calculate:

  1. factorial(23)
  2. #> [1] 25852016738884978212864

The factorial of 23 includes a factor of 10, and so the final digit
must be zero. Using biginteger() yields the correct result:

  1. prod(biginteger(1:23))
  2. #> <biginteger[1]>
  3. #> [1] 25852016738884976640000

High-precision floating-point vector

bigfloat() vectors support much higher precision than double()
vectors:

  1. 1 / 3
  2. #> [1] 0.33333333333333331483
  3. bigfloat(1) / 3
  4. #> <bigfloat[1]>
  5. #> [1] 0.33333333333333333333333333333333333333333333333333

However, you need to be careful not to limit the precision accidentally:

  1. bigfloat(1 / 3)
  2. #> <bigfloat[1]>
  3. #> [1] 0.333333333333333

Please note that the bignum project is released with a Contributor Code
of
Conduct
.
By contributing to this project, you agree to abide by its terms.