MultiPrecision Arithmetic Implements
.NET 8.0
AVX2 suppoted CPU. (Intel:Haswell(2013)-, AMD:Excavator(2015)-)
Exponent : ±2147483647
Mantissa : 128-32768 bits
Round: half away from zero
MaxValue: ±8.808065x10^646456992
| type | mantissa bits | significant digits | note | 
|---|---|---|---|
| MultiPrecision<Pow2.N4> | 128 | 34 | Fastest | 
| MultiPrecision<Pow2.N8> | 256 | 73 | Fast | 
| MultiPrecision<Pow2.N16> | 512 | 150 | Standard | 
| MultiPrecision<Pow2.N32> | 1024 | 304 | |
| MultiPrecision<Pow2.N64> | 2048 | 612 | Slow | 
| MultiPrecision<Pow2.N128> | 4096 | 1229 | |
| MultiPrecision<Pow2.N256> | 8192 | 2462 | Very slow | 
| MultiPrecision<Pow2.N512> | 16384 | 4928 | |
| MultiPrecision<Pow2.N1024> | 32768 | 9860 | Not recommended | 
| MultiPrecision<N> | Length x 32 | Length x 9.6 - 4 | public struct N : IConstant { public int Value => Length; } | 
| function | domain | mantissa error bits | note | 
|---|---|---|---|
| MultiPrecision<N>.Sqrt(x) | [0,+inf) | 1 | |
| MultiPrecision<N>.Cbrt(x) | (-inf,+inf) | 1 | |
| MultiPrecision<N>.Log2(x) | (0,+inf) | 0 | |
| MultiPrecision<N>.Log(x) | (0,+inf) | 1 | |
| MultiPrecision<N>.Log10(x) | (0,+inf) | 1 | |
| MultiPrecision<N>.Log1p(x) | (-1,+inf) | 1 | log(1+x) | 
| MultiPrecision<N>.Pow2(x) | (-inf,+inf) | 0 | |
| MultiPrecision<N>.Pow(x, y) | (-inf,+inf) | 1 | |
| MultiPrecision<N>.Pow10(x) | (-inf,+inf) | 1 | |
| MultiPrecision<N>.Exp(x) | (-inf,+inf) | 1 | |
| MultiPrecision<N>.Expm1(x) | (-inf,+inf) | 1 | exp(x)-1 | 
| MultiPrecision<N>.Sin(x) | (-inf,+inf) | 1 | |
| MultiPrecision<N>.Cos(x) | (-inf,+inf) | 1 | |
| MultiPrecision<N>.Tan(x) | (-inf,+inf) | 2 | |
| MultiPrecision<N>.SinPi(x) | (-inf,+inf) | 0 | sin(πx) | 
| MultiPrecision<N>.CosPi(x) | (-inf,+inf) | 0 | cos(πx) | 
| MultiPrecision<N>.TanPi(x) | (-inf,+inf) | 1 | tan(πx) | 
| MultiPrecision<N>.Sinh(x) | (-inf,+inf) | 2 | |
| MultiPrecision<N>.Cosh(x) | (-inf,+inf) | 2 | |
| MultiPrecision<N>.Tanh(x) | (-inf,+inf) | 2 | |
| MultiPrecision<N>.Asin(x) | [-1,1] | 2 | Accuracy deteriorates near x=-1,1. | 
| MultiPrecision<N>.Acos(x) | [-1,1] | 2 | Accuracy deteriorates near x=-1,1. | 
| MultiPrecision<N>.Atan(x) | (-inf,+inf) | 2 | |
| MultiPrecision<N>.Atan2(y, x) | (-inf,+inf) | 2 | |
| MultiPrecision<N>.Asinh(x) | (-inf,+inf) | 2 | |
| MultiPrecision<N>.Acosh(x) | [1,+inf) | 2 | |
| MultiPrecision<N>.Atanh(x) | (-1,1) | 4 | Accuracy deteriorates near x=-1,1. | 
| MultiPrecision<N>.Sinc(x, normalized) | (-inf,+inf) | 2 | normalized: x -> πx | 
| MultiPrecision<N>.Sinhc(x) | (-inf,+inf) | 3 | |
| MultiPrecision<N>.Erf(x) | (-1,1) | 2 | Length ≤ 256 | 
| MultiPrecision<N>.Erfc(x) | (0,2) | 2 | Length ≤ 256 | 
| MultiPrecision<N>.InverseErf(x) | (-1,1) | 2 | Length ≤ 256 | 
| MultiPrecision<N>.InverseErfc(x) | (0,2) | 4 | Length ≤ 256 | 
| MultiPrecision<N>.LogGamma(x) | (0,+inf) | 2 | Accuracy deteriorates near x=0. Length ≤ 256 | 
| MultiPrecision<N>.Gamma(x) | (-inf,+inf) | 2 | Accuracy deteriorates near non-positive intergers. Length ≤ 256 | 
| MultiPrecision<N>.Digamma(x) | (-inf,+inf) | 2 | Accuracy deteriorates near non-positive intergers and zero points. Length ≤ 256 | 
| MultiPrecision<N>.BesselJ(nu, z) | (-inf,+inf) | 2 | Accuracy deteriorates near zero points. (error ≤ 2^-(mantissa bits + 64)) Length ≤ 65 abs(nu) ≤ 64 | 
| MultiPrecision<N>.BesselY(nu, z) | (-inf,+inf) | 2 | Accuracy deteriorates near zero points. (error ≤ 2^-(mantissa bits + 64)) Length ≤ 65 abs(nu) ≤ 64 | 
| MultiPrecision<N>.BesselI(nu, z) | [0,+inf) | 2 | Length ≤ 65 abs(nu) ≤ 64 | 
| MultiPrecision<N>.BesselK(nu, z) | [0,+inf) | 2 | Length ≤ 65 abs(nu) ≤ 64 | 
| MultiPrecision<N>.Jinc(x) | (-inf,+inf) | 3 | |
| MultiPrecision<N>.EllipticK(m) | [0,1] | 1 | k: elliptic modulus, m=k^2 | 
| MultiPrecision<N>.EllipticE(m) | [0,1] | 1 | k: elliptic modulus, m=k^2 | 
| MultiPrecision<N>.EllipticPi(n, m) | [0,1] | 1 | k: elliptic modulus, m=k^2 | 
| MultiPrecision<N>.Ldexp(x, y) | (-inf,+inf) | N/A | |
| MultiPrecision<N>.Random(random) | N/A | N/A | generation uniform random [0, 1) | 
| MultiPrecision<N>.Min(x, y) | N/A | N/A | |
| MultiPrecision<N>.Max(x, y) | N/A | N/A | |
| MultiPrecision<N>.Floor(x) | N/A | N/A | |
| MultiPrecision<N>.Ceiling(x) | N/A | N/A | |
| MultiPrecision<N>.Round(x) | N/A | N/A | |
| MultiPrecision<N>.Truncate(x) | N/A | N/A | |
| IEnumerable<MultiPrecision<N>>.Sum() | N/A | N/A | kahan summation | 
| IEnumerable<MultiPrecision<N>>.Average() | N/A | N/A | kahan summation | 
| IEnumerable<MultiPrecision<N>>.Variance() | N/A | N/A | population variance | 
| IEnumerable<MultiPrecision<N>>.Min() | N/A | N/A | |
| IEnumerable<MultiPrecision<N>>.Max() | N/A | N/A | 
| constant | value | note | 
|---|---|---|
| MultiPrecision<N>.Pi | 3.141592653589793238462... | Pi | 
| MultiPrecision<N>.E | 2.718281828459045235360... | Napier's E | 
| MultiPrecision<N>.Sqrt2 | 1.414213562373095048801... | Sqrt(2) | 
| MultiPrecision<N>.Lg2 | 0.301029995663981195213... | log10(2) lg:=log10 (ISO 80000-2-12.6) | 
| MultiPrecision<N>.Lb10 | 3.321928094887362347870... | log2(10) lb:=log2 (ISO 80000-2-12.7) | 
| MultiPrecision<N>.Ln2 | 0.693147180559945309417... | log(2) ln:=log (ISO 80000-2-12.5) | 
| MultiPrecision<N>.LbE | 1.442695040888963407359... | log2(e) | 
| MultiPrecision<N>.EulerGamma | 0.577215664901532860606... | Euler's Gamma | 
| MultiPrecision<N>.Zeta3 | 1.202056903159594285399... | ζ(3), Apery const. | 
| MultiPrecision<N>.Zeta5 | 1.036927755143369926331... | ζ(5) | 
| MultiPrecision<N>.Zeta7 | 1.008349277381922826839... | ζ(7) | 
| sequence | note | 
|---|---|
| MultiPrecision<N>.TaylorSequence | Taylor, 1/n! | 
| MultiPrecision<N>.BernoulliSequence | Bernoulli, B(2k) | 
| MultiPrecision<N>.StirlingSequence | Stirling, Gamma convergent series, Bayes(1763) | 
| MultiPrecision<N>.HarmonicNumber | HarmonicNumber, H_n | 
| coefficient | note | 
|---|---|
| MultiPrecision<N>.ChebyshevCoef | Chebyshev, C(n, m) | 
- long (accurately)
MultiPrecision<N> v0 = 123;
long n0 = (long)v0;- double (accurately)
MultiPrecision<N> v1 = 0.5;
double n1 = (double)v1;- decimal (approximately)
MultiPrecision<N> v1 = 0.1m;
decimal n1 = (decimal)v1;- string (approximately)
MultiPrecision<N> v2 = "3.14e0";
string s0 = v2.ToString();
string s1 = v2.ToString("E8");
string s2 = $"{v2:E8}";BinaryWriter, BinaryReader