type RoundingMode = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
type Comparison = -1 | 0 | 1;
type FixedPrecisionValue = string | number | bigint | FixedPrecision;
/**
 *  FixedPrecision Configuration System
 */
interface FixedPrecisionConfig {
    /**
     * Number of decimal places to use (0-20)
     * @default 8
     */
    places: number;
    /**
     * Default rounding mode for decimal operations:
     * 0: ROUND_UP
     * 1: ROUND_DOWN
     * 2: ROUND_CEIL
     * 3: ROUND_FLOOR
     * 4: ROUND_HALF_UP
     * 5: ROUND_HALF_DOWN
     * 6: ROUND_HALF_EVEN
     * 7: ROUND_HALF_CEIL
     * 8: ROUND_HALF_FLOOR
     * @default 4
     */
    roundingMode?: RoundingMode;
}
declare class FixedPrecision {
    private value;
    /**
     * Formatting settings.
     * By default, uses 8 decimal places and ROUND_HALF_UP rounding (4).
     */
    static format: {
        places: number;
        roundingMode: RoundingMode;
    };
    private static SCALENUMBER;
    private static SCALE;
    /**
     * Configures the FixedPrecision library.
     * @param config - FixedPrecision configuration
     */
    static configure(config: FixedPrecisionConfig): void;
    constructor(val: FixedPrecisionValue);
    static readonly POW10: readonly bigint[];
    static pow10Big: (n: number) => bigint;
    /**
     * Helper method to create a FixedPrecision instance from a raw, already scaled bigint.
     * @param rawValue - The raw bigint value.
     * @returns A new FixedPrecision instance with the internal value set to rawValue.
     */
    private static fromRaw;
    static fromString(str: string): bigint;
    static fromNumber(value: number): bigint;
    static toNumber(value: bigint): number;
    static toString(value: bigint): string;
    toNumber(): number;
    toString(): string;
    /** Returns a FixedPrecision whose value is the absolute value of this FixedPrecision. */
    abs(): FixedPrecision;
    /** Compares the values.
     *  Returns -1 if this < other, 0 if equal, and 1 if this > other.
     */
    cmp(other: FixedPrecision): Comparison;
    /** Returns true if this FixedPrecision equals other. */
    eq(other: FixedPrecision): boolean;
    /** Returns true if this FixedPrecision is greater than other. */
    gt(other: FixedPrecision): boolean;
    /** Returns true if this FixedPrecision is greater than or equal to other. */
    gte(other: FixedPrecision): boolean;
    /** Returns true if this FixedPrecision is less than other. */
    lt(other: FixedPrecision): boolean;
    /** Returns true if this FixedPrecision is less than or equal to other. */
    lte(other: FixedPrecision): boolean;
    isZero(): boolean;
    isPositive(): boolean;
    isNegative(): boolean;
    /** Returns a FixedPrecision whose value is this FixedPrecision plus n. */
    add(other: FixedPrecision): FixedPrecision;
    /** Alias for add. */
    plus(other: FixedPrecision): FixedPrecision;
    /** Returns a FixedPrecision whose value is this FixedPrecision minus n. */
    sub(other: FixedPrecision): FixedPrecision;
    /** Alias for sub. */
    minus(other: FixedPrecision): FixedPrecision;
    /** Returns a FixedPrecision whose value is this FixedPrecision times n. */
    mul(other: FixedPrecision): FixedPrecision;
    product(other: FixedPrecision): FixedPrecision;
    /** Returns a FixedPrecision whose value is this FixedPrecision divided by n. */
    div(other: FixedPrecision): FixedPrecision;
    fraction(other: FixedPrecision): FixedPrecision;
    /** Returns a FixedPrecision representing the integer remainder of dividing this by n. */
    mod(other: FixedPrecision): FixedPrecision;
    leftover(other: FixedPrecision): FixedPrecision;
    /** Returns a FixedPrecision whose value is the negation of this FixedPrecision. */
    neg(): FixedPrecision;
    /**
     * Returns a FixedPrecision whose value is this FixedPrecision raised to the power exp.
     * (Only integer exponents are supported.)
     */
    pow(exp: number): FixedPrecision;
    /**
     * Returns a FixedPrecision representing π (pi) with the current precision
     */
    static PI(): FixedPrecision;
    /**
     * Returns a FixedPrecision representing e (Euler's number) with current precision
     */
    static e(): FixedPrecision;
    /**
     * Returns a FixedPrecision representing φ (golden ratio) with current precision
     */
    static phi(): FixedPrecision;
    /**
     * Returns a FixedPrecision representing √2 with current precision
     */
    static sqrt2(): FixedPrecision;
    /**
     * Returns a FixedPrecision whose value is the square root of this FixedPrecision.
     * (For simplicity, we use Math.sqrt on the number value.)
     */
    sqrt(): FixedPrecision;
    /**
     * Newton–Raphson iteration for square root.
     * @param guess Current approximation.
     * @param iter  Remaining iterations.
     * @returns Improved square root approximation.
     */
    private sqrtGo;
    /**
     * Returns a JSON representation of this FixedPrecision (its string value).
     */
    toJSON(): string;
    /**
     * Returns a new FixedPrecision representing the ceiling of this value.
     * For positive numbers, rounds up; for negatives, rounds toward zero.
     */
    ceil(): FixedPrecision;
    /**
     * Returns a new FixedPrecision representing the floor of this value.
     * For positive numbers, rounds down; for negatives, rounds away from zero.
     */
    floor(): FixedPrecision;
    /**
     * Returns a new FixedPrecision representing the value truncated toward zero.
     */
    trunc(): FixedPrecision;
    /**
     * Returns a new FixedPrecision with its value shifted by n decimal places.
     * A positive n shifts to the left (multiplication), negative to the right (division).
     *
     * The operation is exact; if a negative shift does not divide evenly, an error is thrown.
     *
     * @param n - The number of places to shift.
     * @returns A new FixedPrecision instance with the shifted value.
     */
    shiftedBy(n: number): FixedPrecision;
    /**
     * Returns a new FixedPrecision with a pseudo-random value ≥ 0 and < 1.
     * The result will have the specified number of decimal places.
     *
     * @param decimalPlaces - Number of decimal places (default: FixedPrecision.format.places).
     * @returns A new FixedPrecision representing a random value.
     */
    static random(decimalPlaces?: number): FixedPrecision;
    /**
     * Rounds the internal value according to the given scaling factor and rounding mode.
     *
     * @param roundingFactor - The rounding factor (power of 10).
     * @param rm - Rounding mode to use
     * @returns The quotient after rounding (without the discarded digits)
     */
    private roundToScale;
    /**
     * Returns a new FixedPrecision with the value rounded to the specified number of decimal places.
     *
     * @param dp - Desired number of decimal places (default: FixedPrecision.format.places)
     * @param rm - Rounding mode (default: FixedPrecision.format.roundingMode)
     * @returns A new FixedPrecision instance with the rounded value.
     */
    round(dp?: number, rm?: RoundingMode): FixedPrecision;
    /**
     * Adjusts the number scale, rounding to the new number of decimal places.
     * Returns a new FixedPrecision with the adjusted value.
     *
     * Example:
     *    new FixedPrecision("1.23456789").scale(2)  // represents 1.23
     */
    scale(newScale: number, rm?: RoundingMode): FixedPrecision;
    toExponential(dp?: number, rm?: RoundingMode): string;
    toPrecision(sd: number, rm?: RoundingMode): string;
    /**
     * Returns a string representing the FixedPrecision in normal notation
     * to a fixed number of decimal places.
     */
    toFixed(places?: number, rm?: RoundingMode): string;
    valueOf(): string;
    /**
     * Returns the type of this object as a string ('FixedPrecision')
     */
    typeof(): 'FixedPrecision';
}
/**
 * Setup helper
 * Usage example:
 *
 *   import FixedPrecision, { fixedconfig } from './FixedPrecision';
 *   fixedconfig.configure({ places: 8, roundingMode: 4 });
 */
declare const fixedconfig: {
    configure: typeof FixedPrecision.configure;
};

export { type Comparison, type FixedPrecisionConfig, type FixedPrecisionValue, type RoundingMode, FixedPrecision as default, fixedconfig };
