rint 0.1.1

A pure Rust library for the numerical integration of real or complex valued functions of real variables in multiple dimensions.
Documentation
use crate::multi::generator::Generator;
use crate::multi::rule::{
    scales_norms, BasicErrorCoeff, Data, Rule, ScalesNorms, ADAPTIVE_ERROR_COEFF,
};

const N: usize = 3;
const TOTAL: usize = 13;
const FINAL: usize = TOTAL - 3;

pub(crate) const fn generate_rule() -> Rule<N, FINAL, TOTAL> {
    let evaluations = EVALUATIONS;
    let basic_error_coeff = BASIC_ERROR_COEFF;
    let adaptive_error_coeff = ADAPTIVE_ERROR_COEFF;
    let ratio = RATIO;

    let scales_norms = SCALES_NORMS;

    let initial_data = INITIAL_DATA;
    let final_data = FINAL_DATA;

    Rule {
        initial_data,
        final_data,
        scales_norms,
        basic_error_coeff,
        adaptive_error_coeff,
        evaluations,
        ratio,
    }
}

const EVALUATIONS: usize = 127;

const WEIGHTS: [[f64; 5]; TOTAL] = [
    [
        0.792_307_815_110_573_4e-2,
        0.171_500_624_822_468_4e+1,
        0.193_601_497_894_952_6e+1,
        0.517_082_819_560_576_0e+0,
        0.205_440_450_381_852_0e+1,
    ],
    [
        0.679_717_739_278_808_0e-1,
        -0.375_589_381_588_920_9e+0,
        -0.367_344_940_375_426_8e+0,
        0.144_526_914_491_404_4e-1,
        0.137_775_998_849_012_0e-1,
    ],
    [
        0.108_698_653_880_582_5e-2,
        0.148_863_214_514_054_9e+0,
        0.292_977_865_789_817_6e-1,
        -0.360_148_966_399_593_2e+0,
        -0.576_806_291_790_441_0e+0,
    ],
    [
        0.183_863_366_221_282_9e+0,
        -0.249_704_664_062_082_3e+0,
        -0.115_188_352_026_031_5e+0,
        0.362_830_700_341_848_5e+0,
        0.372_683_504_770_032_8e-1,
    ],
    [
        0.336_211_977_782_903_1e-1,
        0.179_250_141_913_520_4e+0,
        0.508_665_822_087_221_8e-1,
        0.714_880_265_087_272_9e-2,
        0.681_487_893_977_721_9e-2,
    ],
    [
        0.101_375_112_333_406_2e-1,
        0.344_612_675_897_389_0e-2,
        0.445_391_108_778_646_9e-1,
        -0.922_285_289_602_296_6e-1,
        0.572_316_973_385_184_9e-1,
    ],
    [
        0.168_764_868_398_523_5e-2,
        -0.514_048_318_555_582_5e-2,
        -0.228_782_825_712_590_0e-1,
        0.171_933_973_247_172_5e-1,
        -0.449_301_874_381_128_5e-1,
    ],
    [
        0.134_646_856_451_280_7e+0,
        0.653_601_783_987_642_5e-2,
        0.290_892_621_634_583_3e-1,
        -0.102_141_653_746_035_0e+0,
        0.272_923_657_386_634_8e-1,
    ],
    [
        0.175_014_588_460_038_6e-2,
        -0.651_345_493_922_970_0e-3,
        -0.289_888_435_066_920_7e-2,
        -0.750_439_786_108_049_3e-2,
        0.354_747_395_055_699_0e-3,
    ],
    [
        0.775_233_638_383_745_4e-1,
        -0.630_467_243_354_720_4e-2,
        -0.280_596_341_330_749_5e-1,
        0.164_836_253_772_671_1e-1,
        0.157_136_679_973_955_1e-1,
    ],
    [
        0.246_186_490_277_025_1e+0,
        0.126_695_939_978_826_3e-1,
        0.563_874_136_114_588_4e-1,
        0.523_461_015_846_933_4e-1,
        0.499_009_921_927_856_7e-1,
    ],
    [
        0.679_794_486_848_303_9e-1,
        -0.545_424_101_864_793_1e-2,
        -0.242_746_961_194_245_1e-1,
        0.144_543_233_161_306_6e-1,
        0.137_791_555_266_677_0e-1,
    ],
    [
        0.141_996_282_330_071_3e-1,
        0.482_699_527_476_842_7e-2,
        0.214_830_703_418_288_2e-1,
        0.301_923_627_536_777_7e-2,
        0.287_820_642_309_987_2e-2,
    ],
];

const RATIO: f64 = (0.500_000_000_000_000e+0 / 0.190_000_000_000_000e+0)
    * (0.500_000_000_000_000e+0 / 0.190_000_000_000_000e+0);

const SCALES_NORMS: [ScalesNorms<TOTAL>; 3] = scales_norms::<N, TOTAL>(&WEIGHTS, RULE_POINTS);

const INITIAL_DATA: [Data<N>; 3] = [
    Data::new(
        Generator::new([
            0.000_000_000_000_000e+0,
            0.000_000_000_000_000e+0,
            0.000_000_000_000_000e+0,
        ]),
        [
            0.792_307_815_110_573_4e-2,
            0.171_500_624_822_468_4e+1,
            0.193_601_497_894_952_6e+1,
            0.517_082_819_560_576_0e+0,
            0.205_440_450_381_852_0e+1,
        ],
    ),
    Data::new(
        Generator::new([
            0.190_000_000_000_000e+0,
            0.000_000_000_000_000e+0,
            0.000_000_000_000_000e+0,
        ]),
        [
            0.679_717_739_278_808_0e-1,
            -0.375_589_381_588_920_9e+0,
            -0.367_344_940_375_426_8e+0,
            0.144_526_914_491_404_4e-1,
            0.137_775_998_849_012_0e-1,
        ],
    ),
    Data::new(
        Generator::new([
            0.500_000_000_000_000e+0,
            0.000_000_000_000_000e+0,
            0.000_000_000_000_000e+0,
        ]),
        [
            0.108_698_653_880_582_5e-2,
            0.148_863_214_514_054_9e+0,
            0.292_977_865_789_817_6e-1,
            -0.360_148_966_399_593_2e+0,
            -0.576_806_291_790_441_0e+0,
        ],
    ),
];

const FINAL_DATA: [Data<N>; FINAL] = [
    Data::new(
        Generator::new([
            0.750_000_000_000_000e+0,
            0.000_000_000_000_000e+0,
            0.000_000_000_000_000e+0,
        ]),
        [
            0.183_863_366_221_282_9e+0,
            -0.249_704_664_062_082_3e+0,
            -0.115_188_352_026_031_5e+0,
            0.362_830_700_341_848_5e+0,
            0.372_683_504_770_032_8e-1,
        ],
    ),
    Data::new(
        Generator::new([
            0.800_000_000_000_000e+0,
            0.000_000_000_000_000e+0,
            0.000_000_000_000_000e+0,
        ]),
        [
            0.336_211_977_782_903_1e-1,
            0.179_250_141_913_520_4e+0,
            0.508_665_822_087_221_8e-1,
            0.714_880_265_087_272_9e-2,
            0.681_487_893_977_721_9e-2,
        ],
    ),
    Data::new(
        Generator::new([
            0.994_999_999_999_999_9e+0,
            0.000_000_000_000_000e+0,
            0.000_000_000_000_000e+0,
        ]),
        [
            0.101_375_112_333_406_2e-1,
            0.344_612_675_897_389_0e-2,
            0.445_391_108_778_646_9e-1,
            -0.922_285_289_602_296_6e-1,
            0.572_316_973_385_184_9e-1,
        ],
    ),
    Data::new(
        Generator::new([
            0.998_734_499_835_140e+0,
            0.998_734_499_835_140e+0,
            0.000_000_000_000_000e+0,
        ]),
        [
            0.168_764_868_398_523_5e-2,
            -0.514_048_318_555_582_5e-2,
            -0.228_782_825_712_590_0e-1,
            0.171_933_973_247_172_5e-1,
            -0.449_301_874_381_128_5e-1,
        ],
    ),
    Data::new(
        Generator::new([
            0.779_370_368_567_242_3e+0,
            0.779_370_368_567_242_3e+0,
            0.000_000_000_000_000e+0,
        ]),
        [
            0.134_646_856_451_280_7e+0,
            0.653_601_783_987_642_5e-2,
            0.290_892_621_634_583_3e-1,
            -0.102_141_653_746_035_0e+0,
            0.272_923_657_386_634_8e-1,
        ],
    ),
    Data::new(
        Generator::new([
            0.999_969_899_308_876_7e+0,
            0.999_969_899_308_876_7e+0,
            0.999_969_899_308_876_7e+0,
        ]),
        [
            0.175_014_588_460_038_6e-2,
            -0.651_345_493_922_970_0e-3,
            -0.289_888_435_066_920_7e-2,
            -0.750_439_786_108_049_3e-2,
            0.354_747_395_055_699_0e-3,
        ],
    ),
    Data::new(
        Generator::new([
            0.790_263_722_477_178_8e+0,
            0.790_263_722_477_178_8e+0,
            0.790_263_722_477_178_8e+0,
        ]),
        [
            0.775_233_638_383_745_4e-1,
            -0.630_467_243_354_720_4e-2,
            -0.280_596_341_330_749_5e-1,
            0.164_836_253_772_671_1e-1,
            0.157_136_679_973_955_1e-1,
        ],
    ),
    Data::new(
        Generator::new([
            0.440_339_668_765_073_7e+0,
            0.440_339_668_765_073_7e+0,
            0.440_339_668_765_073_7e+0,
        ]),
        [
            0.246_186_490_277_025_1e+0,
            0.126_695_939_978_826_3e-1,
            0.563_874_136_114_588_4e-1,
            0.523_461_015_846_933_4e-1,
            0.499_009_921_927_856_7e-1,
        ],
    ),
    Data::new(
        Generator::new([
            0.954_937_382_279_459_3e+0,
            0.437_847_845_900_686_2e+0,
            0.437_847_845_900_686_2e+0,
        ]),
        [
            0.679_794_486_848_303_9e-1,
            -0.545_424_101_864_793_1e-2,
            -0.242_746_961_194_245_1e-1,
            0.144_543_233_161_306_6e-1,
            0.137_791_555_266_677_0e-1,
        ],
    ),
    Data::new(
        Generator::new([
            0.966_109_313_363_074_8e+0,
            0.966_109_313_363_074_8e+0,
            0.457_710_587_776_313_4e+0,
        ]),
        [
            0.141_996_282_330_071_3e-1,
            0.482_699_527_476_842_7e-2,
            0.214_830_703_418_288_2e-1,
            0.301_923_627_536_777_7e-2,
            0.287_820_642_309_987_2e-2,
        ],
    ),
];

const RULE_POINTS: [f64; TOTAL] = [
    1.0, 6.0, 6.0, 6.0, 6.0, 6.0, 12.0, 12.0, 8.0, 8.0, 8.0, 24.0, 24.0,
];

const BASIC_ERROR_COEFF: BasicErrorCoeff = BasicErrorCoeff::new(4.0, 4.0, 0.5, 3.0);