import '../../../assert/js/assert.js';
import '../../../globals.js';
import IOType from '../../../tandem/js/types/IOType.js';
export type FractionStateObject = {
    numerator: number;
    denominator: number;
};
export default class Fraction {
    private _numerator;
    private _denominator;
    static readonly ZERO: Fraction;
    static readonly ONE: Fraction;
    constructor(numerator: number, denominator: number);
    /**
     * Sets the numerator, which must be an integer.
     */
    set numerator(value: number);
    /**
     * Gets the numerator.
     */
    get numerator(): number;
    /**
     * Sets the denominator, which must be an integer.
     */
    set denominator(value: number);
    /**
     * Gets the denominator.
     */
    get denominator(): number;
    /**
     * Computes the numeric value of the fraction.
     * Floating-point error is not an issue as long as numerator and denominator are integers < 2^53.
     */
    getValue(): number;
    get value(): number;
    /**
     * Does this fraction reduce to an integer value?
     */
    isInteger(): boolean;
    toString(): string;
    copy(): Fraction;
    /**
     * Reduces this fraction, modifies the numerator and denominator.
     */
    reduce(): Fraction;
    /**
     * Creates a reduced instance of this fraction.
     */
    reduced(): Fraction;
    /**
     * Is this fraction reduced?
     */
    isReduced(): boolean;
    /**
     * Returns whether the two fractions are equal (not whether their reduced values are equal).
     */
    equals(fraction: Fraction): boolean;
    /**
     * Returns whether this fraction has a value that is less than the provided fraction.
     */
    isLessThan(fraction: Fraction): boolean;
    /**
     * Gets the sign of the value, as defined by Math.sign
     */
    get sign(): number;
    /**
     * Returns the absolute value of this fraction.
     */
    abs(): Fraction;
    /**
     * Sets the value of this fraction to the provided fraction.
     */
    set(value: Fraction): Fraction;
    /**
     * Sets the value of this fraction to the sum of the two fractions:
     * numerator1 / denominator1 + numerator2 / denominator2
     */
    setToSum(numerator1: number, denominator1: number, numerator2: number, denominator2: number): Fraction;
    /**
     * Adds the provided fraction into this fraction (mutates this fraction). The result is NOT reduced,
     * and has a denominator that is the least-common multiple of the 2 denominators.
     */
    add(value: Fraction): Fraction;
    /**
     * Adds a fraction to this fraction to create a new fraction.
     * The result is not reduced, and has a denominator that is the least-common multiple of the 2 denominators.
     */
    plus(value: Fraction): Fraction;
    /**
     * Subtracts the provided fraction from this fraction (mutates this fraction). The result is NOT reduced,
     * and has a denominator that is the least-common multiple of the 2 denominators.
     */
    subtract(value: Fraction): Fraction;
    /**
     * Subtracts a fraction from this fraction to create a new fraction.
     * The result is not reduced, and has a denominator that is the least-common multiple of the 2 denominators.
     */
    minus(value: Fraction): Fraction;
    /**
     * Multiplies the provided fraction and this fraction, setting the result into this fraction (mutates).
     * The value is not reduced.
     */
    multiply(value: Fraction): Fraction;
    /**
     * Multiplies this fraction by another fraction to create a new fraction.
     * The result is not reduced.
     */
    times(value: Fraction): Fraction;
    /**
     * Divides this fraction by the provided fraction, setting the result into this fraction (mutates).
     * The value is not reduced.
     */
    divide(value: Fraction): Fraction;
    /**
     * Divides this fraction by another fraction to create a new fraction.
     * The result is not reduced.
     */
    divided(value: Fraction): Fraction;
    /**
     * Convenience method.
     * Adds an integer value to this fraction to create a new fraction.
     * The result is not reduced, and the denominator is the same as the denominator of this fraction.
     */
    plusInteger(value: number): Fraction;
    /**
     * Convenience method.
     * Subtracts an integer value from this fraction to create a new fraction.
     * The result is not reduced, and the denominator is the same as the denominator of this fraction.
     */
    minusInteger(value: number): Fraction;
    /**
     * Convenience method.
     * Multiplies this fraction by an integer to create a new fraction.
     * The result is not reduced, and the denominator is the same as the denominator of this fraction.
     */
    timesInteger(value: number): Fraction;
    /**
     * Convenience method.
     * Divides this fraction by an integer to create a new fraction.
     * This operation affects the value and sign of the denominator only, and the result is not reduced.
     * Careful! Division by zero is allowed here.
     */
    dividedInteger(value: number): Fraction;
    /**
     * Convenience method for constructing a fraction from an integer.
     */
    static fromInteger(value: number): Fraction;
    /**
     * Convert a number into a Fraction
     */
    static fromDecimal(value: number): Fraction;
    /**
     * Serializes this Fraction instance.
     */
    toStateObject(): FractionStateObject;
    /**
     * Deserializes a Fraction from PhET-iO state.
     */
    static fromStateObject(stateObject: FractionStateObject): Fraction;
    /**
     * IOType for Fraction.
     */
    static readonly FractionIO: IOType<Fraction, FractionStateObject, FractionStateObject>;
}
//# sourceMappingURL=Fraction.d.ts.map