g_math 0.4.2

Multi-domain fixed-point arithmetic with geometric extension: Lie groups, manifolds, ODE solvers, tensors, fiber bundles — zero-float, 0 ULP transcendentals
Documentation
// AUTO-GENERATED by scripts/generate_domain_arithmetic_refs.py
// Domain arithmetic reference values (profile-independent)
// mpmath precision: 250 decimal places / exact Fraction arithmetic
//
// Format: (a_str, b_str, expected_numerator: i128, expected_denominator: i128, label)
// Verification: evaluate() -> to_rational() -> numerator_i128/denominator_i128
//
// Decimal inputs: "1.5", "0.25" etc. (ExactDecimal -> Decimal domain)
// Symbolic inputs: "1/3", "22/7" etc. (ExactRational -> Symbolic domain)
// Cross-domain: mixed input types -> rational comparison

const DECIMAL_ADD_REFS: &[(&str, &str, i128, i128, &str)] = &[
    ("1.5", "2.5", 4, 1, "dec_add_0"),
    ("0.1", "0.9", 1, 1, "dec_add_1"),
    ("10.0", "20.0", 30, 1, "dec_add_2"),
    ("0.5", "0.5", 1, 1, "dec_add_3"),
    ("99.9", "0.1", 100, 1, "dec_add_4"),
    ("0.0", "1.5", 3, 2, "dec_add_5"),
    ("100.0", "0.0", 100, 1, "dec_add_6"),
    ("1.25", "2.75", 4, 1, "dec_add_7"),
    ("0.01", "0.99", 1, 1, "dec_add_8"),
    ("99.99", "0.01", 100, 1, "dec_add_9"),
    ("0.50", "0.50", 1, 1, "dec_add_10"),
    ("0.001", "0.999", 1, 1, "dec_add_11"),
    ("1.500", "2.500", 4, 1, "dec_add_12"),
    ("0.125", "0.875", 1, 1, "dec_add_13"),
    ("1.5", "0.25", 7, 4, "dec_add_14"),
    ("0.1", "0.01", 11, 100, "dec_add_15"),
    ("10.0", "0.001", 10001, 1000, "dec_add_16"),
];

const DECIMAL_SUB_REFS: &[(&str, &str, i128, i128, &str)] = &[
    ("2.5", "1.5", 1, 1, "dec_sub_0"),
    ("1.0", "0.5", 1, 2, "dec_sub_1"),
    ("10.0", "3.0", 7, 1, "dec_sub_2"),
    ("0.5", "0.5", 0, 1, "dec_sub_3"),
    ("100.0", "99.9", 1, 10, "dec_sub_4"),
    ("0.0", "0.0", 0, 1, "dec_sub_5"),
    ("5.5", "2.5", 3, 1, "dec_sub_6"),
    ("4.00", "1.25", 11, 4, "dec_sub_7"),
    ("0.99", "0.01", 49, 50, "dec_sub_8"),
    ("100.00", "0.01", 9999, 100, "dec_sub_9"),
    ("1.000", "0.001", 999, 1000, "dec_sub_10"),
    ("0.500", "0.125", 3, 8, "dec_sub_11"),
    ("1.5", "0.25", 5, 4, "dec_sub_12"),
    ("0.1", "0.01", 9, 100, "dec_sub_13"),
];

const DECIMAL_MUL_REFS: &[(&str, &str, i128, i128, &str)] = &[
    ("1.5", "2.5", 15, 4, "dec_mul_0"),
    ("0.1", "0.1", 1, 100, "dec_mul_1"),
    ("10.0", "3.0", 30, 1, "dec_mul_2"),
    ("0.5", "0.5", 1, 4, "dec_mul_3"),
    ("100.0", "0.1", 10, 1, "dec_mul_4"),
    ("0.0", "1.5", 0, 1, "dec_mul_5"),
    ("1.25", "4.00", 5, 1, "dec_mul_6"),
    ("0.10", "0.10", 1, 100, "dec_mul_7"),
    ("99.99", "1.00", 9999, 100, "dec_mul_8"),
    ("0.5", "0.25", 1, 8, "dec_mul_9"),
    ("2.0", "3.0", 6, 1, "dec_mul_10"),
    ("0.5", "2.0", 1, 1, "dec_mul_11"),
];

const DECIMAL_DIV_REFS: &[(&str, &str, i128, i128, &str)] = &[
    ("7.5", "2.5", 3, 1, "dec_div_0"),
    ("1.0", "2.0", 1, 2, "dec_div_1"),
    ("10.0", "4.0", 5, 2, "dec_div_2"),
    ("0.5", "0.5", 1, 1, "dec_div_3"),
    ("100.0", "10.0", 10, 1, "dec_div_4"),
    ("9.0", "3.0", 3, 1, "dec_div_5"),
    ("1.25", "0.25", 5, 1, "dec_div_6"),
    ("0.50", "0.10", 5, 1, "dec_div_7"),
    ("1.5", "2.5", 3, 5, "dec_div_8"),
    ("0.5", "0.25", 2, 1, "dec_div_9"),
    ("2.0", "1.0", 2, 1, "dec_div_10"),
    ("6.0", "3.0", 2, 1, "dec_div_11"),
];

const SYMBOLIC_ADD_REFS: &[(&str, &str, i128, i128, &str)] = &[
    ("1/3", "2/3", 1, 1, "sym_add_0"),
    ("1/3", "2/7", 13, 21, "sym_add_1"),
    ("1/2", "1/2", 1, 1, "sym_add_2"),
    ("1/6", "1/6", 1, 3, "sym_add_3"),
    ("3/4", "1/4", 1, 1, "sym_add_4"),
    ("1/3", "1/6", 1, 2, "sym_add_5"),
    ("0/1", "1/7", 1, 7, "sym_add_6"),
    ("5/8", "3/8", 1, 1, "sym_add_7"),
    ("1/10", "1/5", 3, 10, "sym_add_8"),
    ("7/11", "3/11", 10, 11, "sym_add_9"),
    ("1/100", "1/200", 3, 200, "sym_add_10"),
    ("99/100", "1/100", 1, 1, "sym_add_11"),
    ("22/7", "1/7", 23, 7, "sym_add_12"),
    ("1/997", "1/991", 1988, 988027, "sym_add_13"),
    ("1/13", "1/17", 30, 221, "sym_add_14"),
    ("100/3", "1/3", 101, 3, "sym_add_15"),
    ("1/1000", "1/1000", 1, 500, "sym_add_16"),
    ("3/5", "2/5", 1, 1, "sym_add_17"),
    ("7/12", "5/12", 1, 1, "sym_add_18"),
];

const SYMBOLIC_SUB_REFS: &[(&str, &str, i128, i128, &str)] = &[
    ("2/3", "1/3", 1, 3, "sym_sub_0"),
    ("1/2", "1/3", 1, 6, "sym_sub_1"),
    ("1/3", "1/3", 0, 1, "sym_sub_2"),
    ("3/4", "1/4", 1, 2, "sym_sub_3"),
    ("5/6", "1/6", 2, 3, "sym_sub_4"),
    ("1/7", "2/7", -1, 7, "sym_sub_5"),
    ("1/3", "1/6", 1, 6, "sym_sub_6"),
    ("0/1", "1/7", -1, 7, "sym_sub_7"),
    ("22/7", "1/7", 3, 1, "sym_sub_8"),
    ("1/997", "1/991", -6, 988027, "sym_sub_9"),
    ("100/3", "1/3", 33, 1, "sym_sub_10"),
    ("1/2", "1/4", 1, 4, "sym_sub_11"),
    ("7/8", "3/8", 1, 2, "sym_sub_12"),
    ("5/6", "5/6", 0, 1, "sym_sub_13"),
    ("11/13", "7/13", 4, 13, "sym_sub_14"),
];

const SYMBOLIC_MUL_REFS: &[(&str, &str, i128, i128, &str)] = &[
    ("1/3", "3/1", 1, 1, "sym_mul_0"),
    ("1/2", "1/2", 1, 4, "sym_mul_1"),
    ("2/3", "3/4", 1, 2, "sym_mul_2"),
    ("1/3", "1/3", 1, 9, "sym_mul_3"),
    ("1/7", "7/1", 1, 1, "sym_mul_4"),
    ("0/1", "1/3", 0, 1, "sym_mul_5"),
    ("5/6", "6/5", 1, 1, "sym_mul_6"),
    ("1/10", "1/10", 1, 100, "sym_mul_7"),
    ("22/7", "7/22", 1, 1, "sym_mul_8"),
    ("3/4", "4/5", 3, 5, "sym_mul_9"),
    ("1/100", "100/1", 1, 1, "sym_mul_10"),
    ("2/3", "3/2", 1, 1, "sym_mul_11"),
    ("7/11", "11/13", 7, 13, "sym_mul_12"),
    ("1/2", "2/1", 1, 1, "sym_mul_13"),
    ("3/7", "7/3", 1, 1, "sym_mul_14"),
];

const SYMBOLIC_DIV_REFS: &[(&str, &str, i128, i128, &str)] = &[
    ("1/3", "2/7", 7, 6, "sym_div_0"),
    ("1/2", "1/2", 1, 1, "sym_div_1"),
    ("3/4", "1/4", 3, 1, "sym_div_2"),
    ("1/3", "1/3", 1, 1, "sym_div_3"),
    ("1/7", "1/7", 1, 1, "sym_div_4"),
    ("5/6", "5/6", 1, 1, "sym_div_5"),
    ("22/7", "11/7", 2, 1, "sym_div_6"),
    ("1/10", "1/5", 1, 2, "sym_div_7"),
    ("3/4", "3/8", 2, 1, "sym_div_8"),
    ("100/3", "10/3", 10, 1, "sym_div_9"),
    ("1/2", "3/4", 2, 3, "sym_div_10"),
    ("7/11", "7/13", 13, 11, "sym_div_11"),
    ("1/2", "2/1", 1, 4, "sym_div_12"),
    ("3/7", "7/3", 9, 49, "sym_div_13"),
];

const CROSS_ADD_REFS: &[(&str, &str, i128, i128, &str)] = &[
    ("7", "1.5", 17, 2, "cross_add_0"),
    ("0", "0.5", 1, 2, "cross_add_1"),
    ("100", "0.01", 10001, 100, "cross_add_2"),
    ("1", "0.1", 11, 10, "cross_add_3"),
    ("7", "1/3", 22, 3, "cross_add_4"),
    ("0", "1/7", 1, 7, "cross_add_5"),
    ("10", "1/10", 101, 10, "cross_add_6"),
    ("3", "2/3", 11, 3, "cross_add_7"),
    ("1.5", "1/3", 11, 6, "cross_add_8"),
    ("0.5", "1/6", 2, 3, "cross_add_9"),
    ("2.5", "1/4", 11, 4, "cross_add_10"),
];

const CROSS_SUB_REFS: &[(&str, &str, i128, i128, &str)] = &[
    ("7", "1.5", 11, 2, "cross_sub_0"),
    ("100", "0.01", 9999, 100, "cross_sub_1"),
    ("7", "1/3", 20, 3, "cross_sub_2"),
    ("10", "1/10", 99, 10, "cross_sub_3"),
    ("1.5", "1/3", 7, 6, "cross_sub_4"),
    ("0.5", "1/6", 1, 3, "cross_sub_5"),
    ("3", "2/3", 7, 3, "cross_sub_6"),
];

const CROSS_MUL_REFS: &[(&str, &str, i128, i128, &str)] = &[
    ("7", "1.5", 21, 2, "cross_mul_0"),
    ("0", "0.5", 0, 1, "cross_mul_1"),
    ("100", "0.01", 1, 1, "cross_mul_2"),
    ("2", "0.25", 1, 2, "cross_mul_3"),
    ("9", "1/3", 3, 1, "cross_mul_4"),
    ("14", "1/7", 2, 1, "cross_mul_5"),
    ("6", "2/3", 4, 1, "cross_mul_6"),
    ("0.5", "1/3", 1, 6, "cross_mul_7"),
    ("1.5", "2/3", 1, 1, "cross_mul_8"),
];

const CROSS_DIV_REFS: &[(&str, &str, i128, i128, &str)] = &[
    ("7", "1.5", 14, 3, "cross_div_0"),
    ("100", "0.5", 200, 1, "cross_div_1"),
    ("1", "0.25", 4, 1, "cross_div_2"),
    ("10", "1/10", 100, 1, "cross_div_3"),
    ("1.5", "1/3", 9, 2, "cross_div_4"),
    ("0.5", "1/6", 3, 1, "cross_div_5"),
    ("9", "1/3", 27, 1, "cross_div_6"),
    ("6", "2/3", 9, 1, "cross_div_7"),
];