Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 

bigfixed

Build Status Coverage Status DUB DUB

This module provides arbitrary precision fixed-point arithmetic.

// Return the square root of `n` to `prec` decimal places by a method of bisection.
string sqrt(ulong n, size_t prec)
{
    import std.conv : to;
    import std.math : ceil, log10;

    immutable size_t q = (prec / log10(2.0)).ceil.to!size_t() + 1;
    auto low = BigFixed(0, q);
    auto high = BigFixed(n, q);

    while ((high - low) != high.resolution) // BigFixed is integer internally.
    {
        immutable BigFixed mid = (high + low) >> 1; // Shift Expressions can be used.
        immutable bool isLess = (mid * mid) < n;
        if (isLess)
        {
            low = mid;
        }
        else
        {
            high = mid;
        }
    }
    return low.toDecimalString(prec);
}
// 10 digits before the 1,000th digit. See http://www.h2.dion.ne.jp/~dra/suu/chi2/heihoukon/2.html
immutable sqrt2_tail = "9518488472";
assert(sqrt(2, 1000)[$ - 10 .. $] == sqrt2_tail);

Documentation

Run dub fetch bigfixed && dub build bigfixed -b docs.

About

Arbitrary-precision fixed point number that using std.bigint internally

Topics

Resources

License

Packages

No packages published

Languages