use crate::Fraction;
#[cfg(test)]
#[allow(clippy::items_after_test_module)]
mod gen_and_test {
use std::f32::consts::PI;
use crate::tables::ARCTAN_SUBDIVISIONS;
use crate::{Angle, Fraction};
#[test]
fn sine_table() {
for i in 0..360 {
let sin = (f32::from(i) / 180. * PI).sin();
let fraction = Fraction::from(sin);
if fraction.denominator() == 1 {
println!("Fraction::new_whole({}),", fraction.numerator());
} else {
println!(
"Fraction::new_presimplified({}, {}),",
fraction.numerator(),
fraction.denominator()
);
}
let angle = Angle::degrees(i);
assert!((angle.sin().into_f32() - sin).abs() < 0.000_001);
}
}
#[test]
fn cosine_table() {
for i in 0..360 {
let cos = (f32::from(i) / 180. * PI).cos();
let fraction = Fraction::from(cos);
if fraction.denominator() == 1 {
println!("Fraction::new_whole({}),", fraction.numerator());
} else {
println!(
"Fraction::new_presimplified({}, {}),",
fraction.numerator(),
fraction.denominator()
);
}
let angle = Angle::degrees(i);
assert!((angle.cos().into_f32() - cos).abs() < 0.000_001);
}
}
#[test]
fn tangent_table() {
for i in 0..360 {
let tan = (f32::from(i) / 180. * PI).tan();
let fraction = Fraction::from(tan);
if fraction.denominator() == 1 {
println!("Fraction::new_whole({}),", fraction.numerator());
} else {
println!(
"Fraction::new_presimplified({}, {}),",
fraction.numerator(),
fraction.denominator()
);
}
let angle = Angle::degrees(i);
if i == 90 {
assert_eq!(angle.tan(), Fraction::MIN);
} else if i == 270 {
assert_eq!(angle.tan(), Fraction::MAX);
} else {
assert!(
(angle.tan().into_f32() - tan).abs() < 0.0001,
"{} ({}) != {}",
angle.tan(),
angle.tan().into_f32(),
tan
);
}
}
}
#[test]
fn arctan_table() {
for i in 0..=ARCTAN_SUBDIVISIONS {
let tan = (f32::from(i) / f32::from(ARCTAN_SUBDIVISIONS)).atan();
let fraction = Fraction::from(tan);
if fraction.denominator() == 1 {
println!("Fraction::new_whole({}),", fraction.numerator());
} else {
println!(
"Fraction::new_presimplified({}, {}),",
fraction.numerator(),
fraction.denominator()
);
}
}
}
}
pub const ARCTAN_SUBDIVISIONS: i16 = 2 * 3 * 7 * 11;
#[allow(clippy::cast_sign_loss)] #[allow(clippy::cast_possible_wrap, clippy::cast_possible_truncation)] pub fn approximate_via_lookup_table<const N: usize>(
fraction: Fraction,
table: &[Fraction; N],
) -> Fraction {
const fn next_degree(degree: i16, count: usize) -> i16 {
if degree < count as i16 - 1 {
degree + 1
} else {
0
}
}
const fn previous_degree(degree: i16, count: usize) -> i16 {
if degree > 0 {
degree - 1
} else {
count as i16 - 1
}
}
let (mut whole, mut fraction) = fraction.round_with_amount();
debug_assert!(!whole.is_negative());
if whole as usize > N - 1 {
whole = 0;
}
let approximate = table[whole as usize];
if fraction.is_zero() {
approximate
} else {
let next = if fraction.is_negative() {
fraction = -fraction;
previous_degree(whole, N)
} else {
next_degree(whole, N)
};
let next = table[next as usize];
approximate + (next - approximate) * fraction
}
}
pub static SINE_TABLE: [Fraction; 360] = [
Fraction::new_whole(0),
Fraction::new_maybe_reduced(67, 3839),
Fraction::new_maybe_reduced(179, 5129),
Fraction::new_maybe_reduced(177, 3382),
Fraction::new_maybe_reduced(149, 2136),
Fraction::new_maybe_reduced(1180, 13539),
Fraction::new_maybe_reduced(307, 2937),
Fraction::new_maybe_reduced(399, 3274),
Fraction::new_maybe_reduced(340, 2443),
Fraction::new_maybe_reduced(265, 1694),
Fraction::new_maybe_reduced(228, 1313),
Fraction::new_maybe_reduced(710, 3721),
Fraction::new_maybe_reduced(226, 1087),
Fraction::new_maybe_reduced(806, 3583),
Fraction::new_maybe_reduced(861, 3559),
Fraction::new_maybe_reduced(675, 2608),
Fraction::new_maybe_reduced(973, 3530),
Fraction::new_maybe_reduced(985, 3369),
Fraction::new_maybe_reduced(987, 3194),
Fraction::new_maybe_reduced(573, 1760),
Fraction::new_maybe_reduced(1588, 4643),
Fraction::new_maybe_reduced(606, 1691),
Fraction::new_maybe_reduced(357, 953),
Fraction::new_maybe_reduced(978, 2503),
Fraction::new_maybe_reduced(1123, 2761),
Fraction::new_maybe_reduced(2870, 6791),
Fraction::new_maybe_reduced(1195, 2726),
Fraction::new_maybe_reduced(967, 2130),
Fraction::new_maybe_reduced(915, 1949),
Fraction::new_maybe_reduced(1133, 2337),
Fraction::new_maybe_reduced(1, 2),
Fraction::new_maybe_reduced(2894, 5619),
Fraction::new_maybe_reduced(921, 1738),
Fraction::new_maybe_reduced(1275, 2341),
Fraction::new_maybe_reduced(1247, 2230),
Fraction::new_maybe_reduced(1793, 3126),
Fraction::new_maybe_reduced(3917, 6664),
Fraction::new_maybe_reduced(1061, 1763),
Fraction::new_maybe_reduced(684, 1111),
Fraction::new_maybe_reduced(2185, 3472),
Fraction::new_maybe_reduced(1319, 2052),
Fraction::new_maybe_reduced(2041, 3111),
Fraction::new_maybe_reduced(1901, 2841),
Fraction::new_maybe_reduced(860, 1261),
Fraction::new_maybe_reduced(2614, 3763),
Fraction::new_maybe_reduced(2378, 3363),
Fraction::new_maybe_reduced(4839, 6727),
Fraction::new_maybe_reduced(1059, 1448),
Fraction::new_maybe_reduced(1328, 1787),
Fraction::new_maybe_reduced(1923, 2548),
Fraction::new_maybe_reduced(1683, 2197),
Fraction::new_maybe_reduced(1367, 1759),
Fraction::new_maybe_reduced(1446, 1835),
Fraction::new_maybe_reduced(3161, 3958),
Fraction::new_maybe_reduced(2889, 3571),
Fraction::new_maybe_reduced(2686, 3279),
Fraction::new_maybe_reduced(2541, 3065),
Fraction::new_maybe_reduced(1388, 1655),
Fraction::new_maybe_reduced(1412, 1665),
Fraction::new_maybe_reduced(4981, 5811),
Fraction::new_maybe_reduced(2521, 2911),
Fraction::new_maybe_reduced(1437, 1643),
Fraction::new_maybe_reduced(2708, 3067),
Fraction::new_maybe_reduced(1496, 1679),
Fraction::new_maybe_reduced(2087, 2322),
Fraction::new_maybe_reduced(3434, 3789),
Fraction::new_maybe_reduced(2927, 3204),
Fraction::new_maybe_reduced(1459, 1585),
Fraction::new_maybe_reduced(6061, 6537),
Fraction::new_maybe_reduced(3022, 3237),
Fraction::new_maybe_reduced(2384, 2537),
Fraction::new_maybe_reduced(538, 569),
Fraction::new_maybe_reduced(3556, 3739),
Fraction::new_maybe_reduced(4027, 4211),
Fraction::new_maybe_reduced(1737, 1807),
Fraction::new_maybe_reduced(652, 675),
Fraction::new_maybe_reduced(6631, 6834),
Fraction::new_maybe_reduced(2243, 2302),
Fraction::new_maybe_reduced(940, 961),
Fraction::new_maybe_reduced(374, 381),
Fraction::new_maybe_reduced(1102, 1119),
Fraction::new_maybe_reduced(3931, 3980),
Fraction::new_maybe_reduced(4579, 4624),
Fraction::new_maybe_reduced(2530, 2549),
Fraction::new_maybe_reduced(1997, 2008),
Fraction::new_maybe_reduced(1309, 1314),
Fraction::new_maybe_reduced(819, 821),
Fraction::new_maybe_reduced(2186, 2189),
Fraction::new_maybe_reduced(1641, 1642),
Fraction::new_maybe_reduced(6560, 6561),
Fraction::new_whole(1),
Fraction::new_maybe_reduced(6560, 6561),
Fraction::new_maybe_reduced(1641, 1642),
Fraction::new_maybe_reduced(2186, 2189),
Fraction::new_maybe_reduced(819, 821),
Fraction::new_maybe_reduced(3665, 3679),
Fraction::new_maybe_reduced(1997, 2008),
Fraction::new_maybe_reduced(2530, 2549),
Fraction::new_maybe_reduced(4579, 4624),
Fraction::new_maybe_reduced(3931, 3980),
Fraction::new_maybe_reduced(1102, 1119),
Fraction::new_maybe_reduced(374, 381),
Fraction::new_maybe_reduced(2999, 3066),
Fraction::new_maybe_reduced(2243, 2302),
Fraction::new_maybe_reduced(6631, 6834),
Fraction::new_maybe_reduced(652, 675),
Fraction::new_maybe_reduced(1737, 1807),
Fraction::new_maybe_reduced(766, 801),
Fraction::new_maybe_reduced(2701, 2840),
Fraction::new_maybe_reduced(5623, 5947),
Fraction::new_maybe_reduced(2384, 2537),
Fraction::new_maybe_reduced(3022, 3237),
Fraction::new_maybe_reduced(5679, 6125),
Fraction::new_maybe_reduced(1459, 1585),
Fraction::new_maybe_reduced(2927, 3204),
Fraction::new_maybe_reduced(2457, 2711),
Fraction::new_maybe_reduced(1714, 1907),
Fraction::new_maybe_reduced(1496, 1679),
Fraction::new_maybe_reduced(2708, 3067),
Fraction::new_maybe_reduced(1437, 1643),
Fraction::new_maybe_reduced(2521, 2911),
Fraction::new_maybe_reduced(4981, 5811),
Fraction::new_maybe_reduced(1412, 1665),
Fraction::new_maybe_reduced(1388, 1655),
Fraction::new_maybe_reduced(1576, 1901),
Fraction::new_maybe_reduced(2763, 3373),
Fraction::new_maybe_reduced(1292, 1597),
Fraction::new_maybe_reduced(3395, 4251),
Fraction::new_maybe_reduced(2353, 2986),
Fraction::new_maybe_reduced(1367, 1759),
Fraction::new_maybe_reduced(1313, 1714),
Fraction::new_maybe_reduced(1883, 2495),
Fraction::new_maybe_reduced(1328, 1787),
Fraction::new_maybe_reduced(1059, 1448),
Fraction::new_maybe_reduced(305, 424),
Fraction::new_maybe_reduced(2378, 3363),
Fraction::new_maybe_reduced(2796, 4025),
Fraction::new_maybe_reduced(860, 1261),
Fraction::new_maybe_reduced(1901, 2841),
Fraction::new_maybe_reduced(2577, 3928),
Fraction::new_maybe_reduced(1319, 2052),
Fraction::new_maybe_reduced(1657, 2633),
Fraction::new_maybe_reduced(684, 1111),
Fraction::new_maybe_reduced(1658, 2755),
Fraction::new_maybe_reduced(3686, 6271),
Fraction::new_maybe_reduced(1259, 2195),
Fraction::new_maybe_reduced(1247, 2230),
Fraction::new_maybe_reduced(1275, 2341),
Fraction::new_maybe_reduced(983, 1855),
Fraction::new_maybe_reduced(3442, 6683),
Fraction::new_maybe_reduced(1, 2),
Fraction::new_maybe_reduced(1133, 2337),
Fraction::new_maybe_reduced(915, 1949),
Fraction::new_maybe_reduced(1041, 2293),
Fraction::new_maybe_reduced(1195, 2726),
Fraction::new_maybe_reduced(3012, 7127),
Fraction::new_maybe_reduced(1123, 2761),
Fraction::new_maybe_reduced(1037, 2654),
Fraction::new_maybe_reduced(357, 953),
Fraction::new_maybe_reduced(606, 1691),
Fraction::new_maybe_reduced(1903, 5564),
Fraction::new_maybe_reduced(573, 1760),
Fraction::new_maybe_reduced(987, 3194),
Fraction::new_maybe_reduced(916, 3133),
Fraction::new_maybe_reduced(465, 1687),
Fraction::new_maybe_reduced(653, 2523),
Fraction::new_maybe_reduced(569, 2352),
Fraction::new_maybe_reduced(806, 3583),
Fraction::new_maybe_reduced(226, 1087),
Fraction::new_maybe_reduced(519, 2720),
Fraction::new_maybe_reduced(485, 2793),
Fraction::new_maybe_reduced(265, 1694),
Fraction::new_maybe_reduced(313, 2249),
Fraction::new_maybe_reduced(326, 2675),
Fraction::new_maybe_reduced(307, 2937),
Fraction::new_maybe_reduced(914, 10487),
Fraction::new_maybe_reduced(149, 2136),
Fraction::new_maybe_reduced(149, 2847),
Fraction::new_maybe_reduced(205, 5874),
Fraction::new_maybe_reduced(57, 3266),
Fraction::new_whole(0),
Fraction::new_maybe_reduced(-67, 3839),
Fraction::new_maybe_reduced(-127, 3639),
Fraction::new_maybe_reduced(-177, 3382),
Fraction::new_maybe_reduced(-149, 2136),
Fraction::new_maybe_reduced(-1465, 16809),
Fraction::new_maybe_reduced(-307, 2937),
Fraction::new_maybe_reduced(-472, 3873),
Fraction::new_maybe_reduced(-340, 2443),
Fraction::new_maybe_reduced(-265, 1694),
Fraction::new_maybe_reduced(-485, 2793),
Fraction::new_maybe_reduced(-710, 3721),
Fraction::new_maybe_reduced(-473, 2275),
Fraction::new_maybe_reduced(-577, 2565),
Fraction::new_maybe_reduced(-569, 2352),
Fraction::new_maybe_reduced(-719, 2778),
Fraction::new_maybe_reduced(-508, 1843),
Fraction::new_maybe_reduced(-847, 2897),
Fraction::new_maybe_reduced(-305, 987),
Fraction::new_maybe_reduced(-573, 1760),
Fraction::new_maybe_reduced(-1168, 3415),
Fraction::new_maybe_reduced(-773, 2157),
Fraction::new_maybe_reduced(-357, 953),
Fraction::new_maybe_reduced(-919, 2352),
Fraction::new_maybe_reduced(-966, 2375),
Fraction::new_maybe_reduced(-2799, 6623),
Fraction::new_maybe_reduced(-1195, 2726),
Fraction::new_maybe_reduced(-967, 2130),
Fraction::new_maybe_reduced(-1484, 3161),
Fraction::new_maybe_reduced(-1133, 2337),
Fraction::new_maybe_reduced(-1, 2),
Fraction::new_maybe_reduced(-2620, 5087),
Fraction::new_maybe_reduced(-983, 1855),
Fraction::new_maybe_reduced(-1214, 2229),
Fraction::new_maybe_reduced(-1247, 2230),
Fraction::new_maybe_reduced(-1259, 2195),
Fraction::new_maybe_reduced(-5226, 8891),
Fraction::new_maybe_reduced(-1061, 1763),
Fraction::new_maybe_reduced(-2225, 3614),
Fraction::new_maybe_reduced(-528, 839),
Fraction::new_maybe_reduced(-1319, 2052),
Fraction::new_maybe_reduced(-3113, 4745),
Fraction::new_maybe_reduced(-2263, 3382),
Fraction::new_maybe_reduced(-860, 1261),
Fraction::new_maybe_reduced(-2432, 3501),
Fraction::new_maybe_reduced(-985, 1393),
Fraction::new_maybe_reduced(-4839, 6727),
Fraction::new_maybe_reduced(-2069, 2829),
Fraction::new_maybe_reduced(-1328, 1787),
Fraction::new_maybe_reduced(-1923, 2548),
Fraction::new_maybe_reduced(-1683, 2197),
Fraction::new_maybe_reduced(-1367, 1759),
Fraction::new_maybe_reduced(-1446, 1835),
Fraction::new_maybe_reduced(-2693, 3372),
Fraction::new_maybe_reduced(-1292, 1597),
Fraction::new_maybe_reduced(-2686, 3279),
Fraction::new_maybe_reduced(-2541, 3065),
Fraction::new_maybe_reduced(-1388, 1655),
Fraction::new_maybe_reduced(-1825, 2152),
Fraction::new_maybe_reduced(-4957, 5783),
Fraction::new_maybe_reduced(-2521, 2911),
Fraction::new_maybe_reduced(-1437, 1643),
Fraction::new_maybe_reduced(-2708, 3067),
Fraction::new_maybe_reduced(-1496, 1679),
Fraction::new_maybe_reduced(-2087, 2322),
Fraction::new_maybe_reduced(-3434, 3789),
Fraction::new_maybe_reduced(-2927, 3204),
Fraction::new_maybe_reduced(-1459, 1585),
Fraction::new_maybe_reduced(-7207, 7773),
Fraction::new_maybe_reduced(-2769, 2966),
Fraction::new_maybe_reduced(-2384, 2537),
Fraction::new_maybe_reduced(-538, 569),
Fraction::new_maybe_reduced(-2701, 2840),
Fraction::new_maybe_reduced(-3261, 3410),
Fraction::new_maybe_reduced(-1737, 1807),
Fraction::new_maybe_reduced(-652, 675),
Fraction::new_maybe_reduced(-7219, 7440),
Fraction::new_maybe_reduced(-2243, 2302),
Fraction::new_maybe_reduced(-2999, 3066),
Fraction::new_maybe_reduced(-374, 381),
Fraction::new_maybe_reduced(-1102, 1119),
Fraction::new_maybe_reduced(-3209, 3249),
Fraction::new_maybe_reduced(-4172, 4213),
Fraction::new_maybe_reduced(-2530, 2549),
Fraction::new_maybe_reduced(-1997, 2008),
Fraction::new_maybe_reduced(-1309, 1314),
Fraction::new_maybe_reduced(-819, 821),
Fraction::new_maybe_reduced(-2186, 2189),
Fraction::new_maybe_reduced(-1641, 1642),
Fraction::new_maybe_reduced(-6560, 6561),
Fraction::new_whole(-1),
Fraction::new_maybe_reduced(-6560, 6561),
Fraction::new_maybe_reduced(-1641, 1642),
Fraction::new_maybe_reduced(-2186, 2189),
Fraction::new_maybe_reduced(-819, 821),
Fraction::new_maybe_reduced(-1309, 1314),
Fraction::new_maybe_reduced(-1997, 2008),
Fraction::new_maybe_reduced(-2530, 2549),
Fraction::new_maybe_reduced(-4579, 4624),
Fraction::new_maybe_reduced(-3931, 3980),
Fraction::new_maybe_reduced(-2917, 2962),
Fraction::new_maybe_reduced(-374, 381),
Fraction::new_maybe_reduced(-2999, 3066),
Fraction::new_maybe_reduced(-2243, 2302),
Fraction::new_maybe_reduced(-6631, 6834),
Fraction::new_maybe_reduced(-3997, 4138),
Fraction::new_maybe_reduced(-1737, 1807),
Fraction::new_maybe_reduced(-3261, 3410),
Fraction::new_maybe_reduced(-2701, 2840),
Fraction::new_maybe_reduced(-538, 569),
Fraction::new_maybe_reduced(-2384, 2537),
Fraction::new_maybe_reduced(-3022, 3237),
Fraction::new_maybe_reduced(-5297, 5713),
Fraction::new_maybe_reduced(-1459, 1585),
Fraction::new_maybe_reduced(-2927, 3204),
Fraction::new_maybe_reduced(-3434, 3789),
Fraction::new_maybe_reduced(-1714, 1907),
Fraction::new_maybe_reduced(-1496, 1679),
Fraction::new_maybe_reduced(-2708, 3067),
Fraction::new_maybe_reduced(-1437, 1643),
Fraction::new_maybe_reduced(-2521, 2911),
Fraction::new_maybe_reduced(-5017, 5853),
Fraction::new_maybe_reduced(-1412, 1665),
Fraction::new_maybe_reduced(-2069, 2467),
Fraction::new_maybe_reduced(-2541, 3065),
Fraction::new_maybe_reduced(-2686, 3279),
Fraction::new_maybe_reduced(-1292, 1597),
Fraction::new_maybe_reduced(-3629, 4544),
Fraction::new_maybe_reduced(-2353, 2986),
Fraction::new_maybe_reduced(-1503, 1934),
Fraction::new_maybe_reduced(-1683, 2197),
Fraction::new_maybe_reduced(-1923, 2548),
Fraction::new_maybe_reduced(-2141, 2881),
Fraction::new_maybe_reduced(-1059, 1448),
Fraction::new_maybe_reduced(-305, 424),
Fraction::new_maybe_reduced(-1393, 1970),
Fraction::new_maybe_reduced(-2887, 4156),
Fraction::new_maybe_reduced(-2239, 3283),
Fraction::new_maybe_reduced(-1539, 2300),
Fraction::new_maybe_reduced(-536, 817),
Fraction::new_maybe_reduced(-1319, 2052),
Fraction::new_maybe_reduced(-1657, 2633),
Fraction::new_maybe_reduced(-2225, 3614),
Fraction::new_maybe_reduced(-1061, 1763),
Fraction::new_maybe_reduced(-4071, 6926),
Fraction::new_maybe_reduced(-1259, 2195),
Fraction::new_maybe_reduced(-1025, 1833),
Fraction::new_maybe_reduced(-1214, 2229),
Fraction::new_maybe_reduced(-983, 1855),
Fraction::new_maybe_reduced(-2894, 5619),
Fraction::new_maybe_reduced(-1, 2),
Fraction::new_maybe_reduced(-1133, 2337),
Fraction::new_maybe_reduced(-915, 1949),
Fraction::new_maybe_reduced(-1115, 2456),
Fraction::new_maybe_reduced(-1195, 2726),
Fraction::new_maybe_reduced(-2231, 5279),
Fraction::new_maybe_reduced(-1280, 3147),
Fraction::new_maybe_reduced(-978, 2503),
Fraction::new_maybe_reduced(-1189, 3174),
Fraction::new_maybe_reduced(-1045, 2916),
Fraction::new_maybe_reduced(-1273, 3722),
Fraction::new_maybe_reduced(-1132, 3477),
Fraction::new_maybe_reduced(-987, 3194),
Fraction::new_maybe_reduced(-778, 2661),
Fraction::new_maybe_reduced(-887, 3218),
Fraction::new_maybe_reduced(-631, 2438),
Fraction::new_maybe_reduced(-569, 2352),
Fraction::new_maybe_reduced(-1035, 4601),
Fraction::new_maybe_reduced(-226, 1087),
Fraction::new_maybe_reduced(-328, 1719),
Fraction::new_maybe_reduced(-655, 3772),
Fraction::new_maybe_reduced(-265, 1694),
Fraction::new_maybe_reduced(-313, 2249),
Fraction::new_maybe_reduced(-472, 3873),
Fraction::new_maybe_reduced(-247, 2363),
Fraction::new_maybe_reduced(-762, 8743),
Fraction::new_maybe_reduced(-146, 2093),
Fraction::new_maybe_reduced(-177, 3382),
Fraction::new_maybe_reduced(-127, 3639),
Fraction::new_maybe_reduced(-127, 7277),
];
pub static COSINE_TABLE: [Fraction; 360] = [
Fraction::new_whole(1),
Fraction::new_maybe_reduced(6560, 6561),
Fraction::new_maybe_reduced(1641, 1642),
Fraction::new_maybe_reduced(2186, 2189),
Fraction::new_maybe_reduced(819, 821),
Fraction::new_maybe_reduced(1309, 1314),
Fraction::new_maybe_reduced(1997, 2008),
Fraction::new_maybe_reduced(2530, 2549),
Fraction::new_maybe_reduced(4579, 4624),
Fraction::new_maybe_reduced(3931, 3980),
Fraction::new_maybe_reduced(1102, 1119),
Fraction::new_maybe_reduced(374, 381),
Fraction::new_maybe_reduced(940, 961),
Fraction::new_maybe_reduced(2243, 2302),
Fraction::new_maybe_reduced(6631, 6834),
Fraction::new_maybe_reduced(652, 675),
Fraction::new_maybe_reduced(1737, 1807),
Fraction::new_maybe_reduced(766, 801),
Fraction::new_maybe_reduced(3556, 3739),
Fraction::new_maybe_reduced(538, 569),
Fraction::new_maybe_reduced(2384, 2537),
Fraction::new_maybe_reduced(3022, 3237),
Fraction::new_maybe_reduced(6061, 6537),
Fraction::new_maybe_reduced(1459, 1585),
Fraction::new_maybe_reduced(2927, 3204),
Fraction::new_maybe_reduced(2457, 2711),
Fraction::new_maybe_reduced(1714, 1907),
Fraction::new_maybe_reduced(1496, 1679),
Fraction::new_maybe_reduced(2708, 3067),
Fraction::new_maybe_reduced(1437, 1643),
Fraction::new_maybe_reduced(2521, 2911),
Fraction::new_maybe_reduced(4981, 5811),
Fraction::new_maybe_reduced(1412, 1665),
Fraction::new_maybe_reduced(1388, 1655),
Fraction::new_maybe_reduced(2541, 3065),
Fraction::new_maybe_reduced(2763, 3373),
Fraction::new_maybe_reduced(1292, 1597),
Fraction::new_maybe_reduced(3395, 4251),
Fraction::new_maybe_reduced(1446, 1835),
Fraction::new_maybe_reduced(1503, 1934),
Fraction::new_maybe_reduced(1313, 1714),
Fraction::new_maybe_reduced(1923, 2548),
Fraction::new_maybe_reduced(1328, 1787),
Fraction::new_maybe_reduced(1059, 1448),
Fraction::new_maybe_reduced(5449, 7575),
Fraction::new_maybe_reduced(2378, 3363),
Fraction::new_maybe_reduced(2705, 3894),
Fraction::new_maybe_reduced(860, 1261),
Fraction::new_maybe_reduced(1539, 2300),
Fraction::new_maybe_reduced(2041, 3111),
Fraction::new_maybe_reduced(1319, 2052),
Fraction::new_maybe_reduced(2185, 3472),
Fraction::new_maybe_reduced(684, 1111),
Fraction::new_maybe_reduced(1061, 1763),
Fraction::new_maybe_reduced(3686, 6271),
Fraction::new_maybe_reduced(1259, 2195),
Fraction::new_maybe_reduced(1247, 2230),
Fraction::new_maybe_reduced(1214, 2229),
Fraction::new_maybe_reduced(983, 1855),
Fraction::new_maybe_reduced(3168, 6151),
Fraction::new_maybe_reduced(1, 2),
Fraction::new_maybe_reduced(1133, 2337),
Fraction::new_maybe_reduced(915, 1949),
Fraction::new_maybe_reduced(967, 2130),
Fraction::new_maybe_reduced(1604, 3659),
Fraction::new_maybe_reduced(2728, 6455),
Fraction::new_maybe_reduced(1123, 2761),
Fraction::new_maybe_reduced(978, 2503),
Fraction::new_maybe_reduced(357, 953),
Fraction::new_maybe_reduced(773, 2157),
Fraction::new_maybe_reduced(1798, 5257),
Fraction::new_maybe_reduced(573, 1760),
Fraction::new_maybe_reduced(987, 3194),
Fraction::new_maybe_reduced(916, 3133),
Fraction::new_maybe_reduced(465, 1687),
Fraction::new_maybe_reduced(675, 2608),
Fraction::new_maybe_reduced(861, 3559),
Fraction::new_maybe_reduced(806, 3583),
Fraction::new_maybe_reduced(226, 1087),
Fraction::new_maybe_reduced(519, 2720),
Fraction::new_maybe_reduced(228, 1313),
Fraction::new_maybe_reduced(265, 1694),
Fraction::new_maybe_reduced(340, 2443),
Fraction::new_maybe_reduced(399, 3274),
Fraction::new_maybe_reduced(277, 2650),
Fraction::new_maybe_reduced(1427, 16373),
Fraction::new_maybe_reduced(146, 2093),
Fraction::new_maybe_reduced(177, 3382),
Fraction::new_maybe_reduced(179, 5129),
Fraction::new_maybe_reduced(67, 3839),
Fraction::new_whole(0),
Fraction::new_maybe_reduced(-57, 3266),
Fraction::new_maybe_reduced(-127, 3639),
Fraction::new_maybe_reduced(-177, 3382),
Fraction::new_maybe_reduced(-149, 2136),
Fraction::new_maybe_reduced(-19, 218),
Fraction::new_maybe_reduced(-337, 3224),
Fraction::new_maybe_reduced(-399, 3274),
Fraction::new_maybe_reduced(-340, 2443),
Fraction::new_maybe_reduced(-265, 1694),
Fraction::new_maybe_reduced(-485, 2793),
Fraction::new_maybe_reduced(-710, 3721),
Fraction::new_maybe_reduced(-226, 1087),
Fraction::new_maybe_reduced(-806, 3583),
Fraction::new_maybe_reduced(-861, 3559),
Fraction::new_maybe_reduced(-675, 2608),
Fraction::new_maybe_reduced(-465, 1687),
Fraction::new_maybe_reduced(-985, 3369),
Fraction::new_maybe_reduced(-305, 987),
Fraction::new_maybe_reduced(-573, 1760),
Fraction::new_maybe_reduced(-1588, 4643),
Fraction::new_maybe_reduced(-773, 2157),
Fraction::new_maybe_reduced(-1310, 3497),
Fraction::new_maybe_reduced(-978, 2503),
Fraction::new_maybe_reduced(-1123, 2761),
Fraction::new_maybe_reduced(-3012, 7127),
Fraction::new_maybe_reduced(-786, 1793),
Fraction::new_maybe_reduced(-1041, 2293),
Fraction::new_maybe_reduced(-915, 1949),
Fraction::new_maybe_reduced(-1516, 3127),
Fraction::new_maybe_reduced(-1, 2),
Fraction::new_maybe_reduced(-3442, 6683),
Fraction::new_maybe_reduced(-921, 1738),
Fraction::new_maybe_reduced(-1275, 2341),
Fraction::new_maybe_reduced(-1469, 2627),
Fraction::new_maybe_reduced(-1259, 2195),
Fraction::new_maybe_reduced(-3686, 6271),
Fraction::new_maybe_reduced(-1061, 1763),
Fraction::new_maybe_reduced(-684, 1111),
Fraction::new_maybe_reduced(-2185, 3472),
Fraction::new_maybe_reduced(-1319, 2052),
Fraction::new_maybe_reduced(-1505, 2294),
Fraction::new_maybe_reduced(-1901, 2841),
Fraction::new_maybe_reduced(-860, 1261),
Fraction::new_maybe_reduced(-2523, 3632),
Fraction::new_maybe_reduced(-2378, 3363),
Fraction::new_maybe_reduced(-3924, 5455),
Fraction::new_maybe_reduced(-2069, 2829),
Fraction::new_maybe_reduced(-1328, 1787),
Fraction::new_maybe_reduced(-1923, 2548),
Fraction::new_maybe_reduced(-1683, 2197),
Fraction::new_maybe_reduced(-1367, 1759),
Fraction::new_maybe_reduced(-1446, 1835),
Fraction::new_maybe_reduced(-2927, 3665),
Fraction::new_maybe_reduced(-2889, 3571),
Fraction::new_maybe_reduced(-2609, 3185),
Fraction::new_maybe_reduced(-2541, 3065),
Fraction::new_maybe_reduced(-1388, 1655),
Fraction::new_maybe_reduced(-1412, 1665),
Fraction::new_maybe_reduced(-4981, 5811),
Fraction::new_maybe_reduced(-2521, 2911),
Fraction::new_maybe_reduced(-2588, 2959),
Fraction::new_maybe_reduced(-2708, 3067),
Fraction::new_maybe_reduced(-1496, 1679),
Fraction::new_maybe_reduced(-1714, 1907),
Fraction::new_maybe_reduced(-2457, 2711),
Fraction::new_maybe_reduced(-2927, 3204),
Fraction::new_maybe_reduced(-2698, 2931),
Fraction::new_maybe_reduced(-6634, 7155),
Fraction::new_maybe_reduced(-2769, 2966),
Fraction::new_maybe_reduced(-2384, 2537),
Fraction::new_maybe_reduced(-5623, 5947),
Fraction::new_maybe_reduced(-2701, 2840),
Fraction::new_maybe_reduced(-4027, 4211),
Fraction::new_maybe_reduced(-1737, 1807),
Fraction::new_maybe_reduced(-652, 675),
Fraction::new_maybe_reduced(-6631, 6834),
Fraction::new_maybe_reduced(-2243, 2302),
Fraction::new_maybe_reduced(-940, 961),
Fraction::new_maybe_reduced(-374, 381),
Fraction::new_maybe_reduced(-1102, 1119),
Fraction::new_maybe_reduced(-3931, 3980),
Fraction::new_maybe_reduced(-4172, 4213),
Fraction::new_maybe_reduced(-2530, 2549),
Fraction::new_maybe_reduced(-1997, 2008),
Fraction::new_maybe_reduced(-1309, 1314),
Fraction::new_maybe_reduced(-819, 821),
Fraction::new_maybe_reduced(-2186, 2189),
Fraction::new_maybe_reduced(-1641, 1642),
Fraction::new_maybe_reduced(-6560, 6561),
Fraction::new_whole(-1),
Fraction::new_maybe_reduced(-6560, 6561),
Fraction::new_maybe_reduced(-1641, 1642),
Fraction::new_maybe_reduced(-2186, 2189),
Fraction::new_maybe_reduced(-819, 821),
Fraction::new_maybe_reduced(-1309, 1314),
Fraction::new_maybe_reduced(-1997, 2008),
Fraction::new_maybe_reduced(-2530, 2549),
Fraction::new_maybe_reduced(-4579, 4624),
Fraction::new_maybe_reduced(-3931, 3980),
Fraction::new_maybe_reduced(-1102, 1119),
Fraction::new_maybe_reduced(-374, 381),
Fraction::new_maybe_reduced(-2999, 3066),
Fraction::new_maybe_reduced(-2243, 2302),
Fraction::new_maybe_reduced(-6631, 6834),
Fraction::new_maybe_reduced(-4649, 4813),
Fraction::new_maybe_reduced(-1737, 1807),
Fraction::new_maybe_reduced(-4027, 4211),
Fraction::new_maybe_reduced(-2701, 2840),
Fraction::new_maybe_reduced(-538, 569),
Fraction::new_maybe_reduced(-2384, 2537),
Fraction::new_maybe_reduced(-3022, 3237),
Fraction::new_maybe_reduced(-5679, 6125),
Fraction::new_maybe_reduced(-1459, 1585),
Fraction::new_maybe_reduced(-2927, 3204),
Fraction::new_maybe_reduced(-3434, 3789),
Fraction::new_maybe_reduced(-1714, 1907),
Fraction::new_maybe_reduced(-1496, 1679),
Fraction::new_maybe_reduced(-2097, 2375),
Fraction::new_maybe_reduced(-1437, 1643),
Fraction::new_maybe_reduced(-2521, 2911),
Fraction::new_maybe_reduced(-4993, 5825),
Fraction::new_maybe_reduced(-1412, 1665),
Fraction::new_maybe_reduced(-1388, 1655),
Fraction::new_maybe_reduced(-2541, 3065),
Fraction::new_maybe_reduced(-2686, 3279),
Fraction::new_maybe_reduced(-1292, 1597),
Fraction::new_maybe_reduced(-3395, 4251),
Fraction::new_maybe_reduced(-1446, 1835),
Fraction::new_maybe_reduced(-1503, 1934),
Fraction::new_maybe_reduced(-1683, 2197),
Fraction::new_maybe_reduced(-1923, 2548),
Fraction::new_maybe_reduced(-2141, 2881),
Fraction::new_maybe_reduced(-1059, 1448),
Fraction::new_maybe_reduced(-305, 424),
Fraction::new_maybe_reduced(-1393, 1970),
Fraction::new_maybe_reduced(-2705, 3894),
Fraction::new_maybe_reduced(-2239, 3283),
Fraction::new_maybe_reduced(-1539, 2300),
Fraction::new_maybe_reduced(-536, 817),
Fraction::new_maybe_reduced(-1319, 2052),
Fraction::new_maybe_reduced(-2185, 3472),
Fraction::new_maybe_reduced(-1541, 2503),
Fraction::new_maybe_reduced(-1658, 2755),
Fraction::new_maybe_reduced(-4610, 7843),
Fraction::new_maybe_reduced(-1259, 2195),
Fraction::new_maybe_reduced(-1247, 2230),
Fraction::new_maybe_reduced(-1153, 2117),
Fraction::new_maybe_reduced(-1045, 1972),
Fraction::new_maybe_reduced(-4401, 8545),
Fraction::new_maybe_reduced(-1, 2),
Fraction::new_maybe_reduced(-1133, 2337),
Fraction::new_maybe_reduced(-915, 1949),
Fraction::new_maybe_reduced(-1115, 2456),
Fraction::new_maybe_reduced(-409, 933),
Fraction::new_maybe_reduced(-2515, 5951),
Fraction::new_maybe_reduced(-1123, 2761),
Fraction::new_maybe_reduced(-919, 2352),
Fraction::new_maybe_reduced(-1546, 4127),
Fraction::new_maybe_reduced(-606, 1691),
Fraction::new_maybe_reduced(-1798, 5257),
Fraction::new_maybe_reduced(-573, 1760),
Fraction::new_maybe_reduced(-305, 987),
Fraction::new_maybe_reduced(-847, 2897),
Fraction::new_maybe_reduced(-465, 1687),
Fraction::new_maybe_reduced(-653, 2523),
Fraction::new_maybe_reduced(-277, 1145),
Fraction::new_maybe_reduced(-577, 2565),
Fraction::new_maybe_reduced(-699, 3362),
Fraction::new_maybe_reduced(-519, 2720),
Fraction::new_maybe_reduced(-228, 1313),
Fraction::new_maybe_reduced(-186, 1189),
Fraction::new_maybe_reduced(-286, 2055),
Fraction::new_maybe_reduced(-326, 2675),
Fraction::new_maybe_reduced(-277, 2650),
Fraction::new_maybe_reduced(-1085, 12449),
Fraction::new_maybe_reduced(-149, 2136),
Fraction::new_maybe_reduced(-121, 2312),
Fraction::new_maybe_reduced(-26, 745),
Fraction::new_maybe_reduced(-77, 4412),
Fraction::new_whole(0),
Fraction::new_maybe_reduced(77, 4412),
Fraction::new_maybe_reduced(101, 2894),
Fraction::new_maybe_reduced(233, 4452),
Fraction::new_maybe_reduced(149, 2136),
Fraction::new_maybe_reduced(1161, 13321),
Fraction::new_maybe_reduced(277, 2650),
Fraction::new_maybe_reduced(764, 6269),
Fraction::new_maybe_reduced(340, 2443),
Fraction::new_maybe_reduced(265, 1694),
Fraction::new_maybe_reduced(257, 1480),
Fraction::new_maybe_reduced(519, 2720),
Fraction::new_maybe_reduced(699, 3362),
Fraction::new_maybe_reduced(577, 2565),
Fraction::new_maybe_reduced(861, 3559),
Fraction::new_maybe_reduced(741, 2863),
Fraction::new_maybe_reduced(551, 1999),
Fraction::new_maybe_reduced(847, 2897),
Fraction::new_maybe_reduced(305, 987),
Fraction::new_maybe_reduced(573, 1760),
Fraction::new_maybe_reduced(1063, 3108),
Fraction::new_maybe_reduced(940, 2623),
Fraction::new_maybe_reduced(953, 2544),
Fraction::new_maybe_reduced(919, 2352),
Fraction::new_maybe_reduced(1123, 2761),
Fraction::new_maybe_reduced(2515, 5951),
Fraction::new_maybe_reduced(786, 1793),
Fraction::new_maybe_reduced(967, 2130),
Fraction::new_maybe_reduced(1484, 3161),
Fraction::new_maybe_reduced(1133, 2337),
Fraction::new_maybe_reduced(1, 2),
Fraction::new_maybe_reduced(2346, 4555),
Fraction::new_maybe_reduced(921, 1738),
Fraction::new_maybe_reduced(1275, 2341),
Fraction::new_maybe_reduced(1247, 2230),
Fraction::new_maybe_reduced(1259, 2195),
Fraction::new_maybe_reduced(4918, 8367),
Fraction::new_maybe_reduced(1061, 1763),
Fraction::new_maybe_reduced(684, 1111),
Fraction::new_maybe_reduced(528, 839),
Fraction::new_maybe_reduced(1319, 2052),
Fraction::new_maybe_reduced(536, 817),
Fraction::new_maybe_reduced(2263, 3382),
Fraction::new_maybe_reduced(860, 1261),
Fraction::new_maybe_reduced(2250, 3239),
Fraction::new_maybe_reduced(985, 1393),
Fraction::new_maybe_reduced(3619, 5031),
Fraction::new_maybe_reduced(2069, 2829),
Fraction::new_maybe_reduced(1328, 1787),
Fraction::new_maybe_reduced(1963, 2601),
Fraction::new_maybe_reduced(1683, 2197),
Fraction::new_maybe_reduced(1367, 1759),
Fraction::new_maybe_reduced(1446, 1835),
Fraction::new_maybe_reduced(3161, 3958),
Fraction::new_maybe_reduced(1292, 1597),
Fraction::new_maybe_reduced(2532, 3091),
Fraction::new_maybe_reduced(965, 1164),
Fraction::new_maybe_reduced(1388, 1655),
Fraction::new_maybe_reduced(1412, 1665),
Fraction::new_maybe_reduced(4993, 5825),
Fraction::new_maybe_reduced(1351, 1560),
Fraction::new_maybe_reduced(2588, 2959),
Fraction::new_maybe_reduced(2708, 3067),
Fraction::new_maybe_reduced(1823, 2046),
Fraction::new_maybe_reduced(1714, 1907),
Fraction::new_maybe_reduced(977, 1078),
Fraction::new_maybe_reduced(2610, 2857),
Fraction::new_maybe_reduced(1459, 1585),
Fraction::new_maybe_reduced(7971, 8597),
Fraction::new_maybe_reduced(2516, 2695),
Fraction::new_maybe_reduced(2384, 2537),
Fraction::new_maybe_reduced(5623, 5947),
Fraction::new_maybe_reduced(3556, 3739),
Fraction::new_maybe_reduced(3261, 3410),
Fraction::new_maybe_reduced(1737, 1807),
Fraction::new_maybe_reduced(652, 675),
Fraction::new_maybe_reduced(6925, 7137),
Fraction::new_maybe_reduced(2243, 2302),
Fraction::new_maybe_reduced(2999, 3066),
Fraction::new_maybe_reduced(374, 381),
Fraction::new_maybe_reduced(1102, 1119),
Fraction::new_maybe_reduced(3931, 3980),
Fraction::new_maybe_reduced(4579, 4624),
Fraction::new_maybe_reduced(2530, 2549),
Fraction::new_maybe_reduced(1997, 2008),
Fraction::new_maybe_reduced(1309, 1314),
Fraction::new_maybe_reduced(819, 821),
Fraction::new_maybe_reduced(2186, 2189),
Fraction::new_maybe_reduced(1641, 1642),
Fraction::new_maybe_reduced(6560, 6561),
];
pub static TANGENT_TABLE: [Fraction; 360] = [
Fraction::new_whole(0),
Fraction::new_maybe_reduced(31, 1776),
Fraction::new_maybe_reduced(426, 12199),
Fraction::new_maybe_reduced(308, 5877),
Fraction::new_maybe_reduced(153, 2188),
Fraction::new_maybe_reduced(193, 2206),
Fraction::new_maybe_reduced(348, 3311),
Fraction::new_maybe_reduced(478, 3893),
Fraction::new_maybe_reduced(1751, 12459),
Fraction::new_maybe_reduced(647, 4085),
Fraction::new_maybe_reduced(289, 1639),
Fraction::new_maybe_reduced(505, 2598),
Fraction::new_maybe_reduced(799, 3759),
Fraction::new_maybe_reduced(359, 1555),
Fraction::new_maybe_reduced(371, 1488),
Fraction::new_maybe_reduced(571, 2131),
Fraction::new_maybe_reduced(437, 1524),
Fraction::new_maybe_reduced(1019, 3333),
Fraction::new_maybe_reduced(708, 2179),
Fraction::new_maybe_reduced(950, 2759),
Fraction::new_maybe_reduced(2875, 7899),
Fraction::new_maybe_reduced(904, 2355),
Fraction::new_maybe_reduced(863, 2136),
Fraction::new_maybe_reduced(1051, 2476),
Fraction::new_maybe_reduced(1451, 3259),
Fraction::new_maybe_reduced(2339, 5016),
Fraction::new_maybe_reduced(1153, 2364),
Fraction::new_maybe_reduced(1364, 2677),
Fraction::new_maybe_reduced(1157, 2176),
Fraction::new_maybe_reduced(1087, 1961),
Fraction::new_maybe_reduced(1351, 2340),
Fraction::new_maybe_reduced(1117, 1859),
Fraction::new_maybe_reduced(598, 957),
Fraction::new_maybe_reduced(1480, 2279),
Fraction::new_maybe_reduced(1921, 2848),
Fraction::new_maybe_reduced(675, 964),
Fraction::new_maybe_reduced(1719, 2366),
Fraction::new_maybe_reduced(6626, 8793),
Fraction::new_maybe_reduced(2054, 2629),
Fraction::new_maybe_reduced(2814, 3475),
Fraction::new_maybe_reduced(2013, 2399),
Fraction::new_maybe_reduced(2035, 2341),
Fraction::new_maybe_reduced(3119, 3464),
Fraction::new_maybe_reduced(16789, 18004),
Fraction::new_maybe_reduced(1942, 2011),
Fraction::new_whole(1),
Fraction::new_maybe_reduced(2011, 1942),
Fraction::new_maybe_reduced(14255, 13293),
Fraction::new_maybe_reduced(743, 669),
Fraction::new_maybe_reduced(2341, 2035),
Fraction::new_maybe_reduced(2399, 2013),
Fraction::new_maybe_reduced(3843, 3112),
Fraction::new_maybe_reduced(3516, 2747),
Fraction::new_maybe_reduced(8371, 6308),
Fraction::new_maybe_reduced(3112, 2261),
Fraction::new_maybe_reduced(5297, 3709),
Fraction::new_maybe_reduced(2848, 1921),
Fraction::new_maybe_reduced(2279, 1480),
Fraction::new_maybe_reduced(4777, 2985),
Fraction::new_maybe_reduced(3951, 2374),
Fraction::new_maybe_reduced(5042, 2911),
Fraction::new_maybe_reduced(1961, 1087),
Fraction::new_maybe_reduced(2381, 1266),
Fraction::new_maybe_reduced(2887, 1471),
Fraction::new_maybe_reduced(6399, 3121),
Fraction::new_maybe_reduced(6871, 3204),
Fraction::new_maybe_reduced(6801, 3028),
Fraction::new_maybe_reduced(6521, 2768),
Fraction::new_maybe_reduced(5663, 2288),
Fraction::new_maybe_reduced(5119, 1965),
Fraction::new_maybe_reduced(7355, 2677),
Fraction::new_maybe_reduced(6276, 2161),
Fraction::new_maybe_reduced(10578, 3437),
Fraction::new_maybe_reduced(6823, 2086),
Fraction::new_maybe_reduced(5681, 1629),
Fraction::new_maybe_reduced(5042, 1351),
Fraction::new_maybe_reduced(10789, 2690),
Fraction::new_maybe_reduced(1555, 359),
Fraction::new_maybe_reduced(3759, 799),
Fraction::new_maybe_reduced(8221, 1598),
Fraction::new_maybe_reduced(10645, 1877),
Fraction::new_maybe_reduced(9780, 1549),
Fraction::new_maybe_reduced(18194, 2557),
Fraction::new_maybe_reduced(4683, 575),
Fraction::new_maybe_reduced(3311, 348),
Fraction::new_maybe_reduced(17728, 1551),
Fraction::new_maybe_reduced(6278, 439),
Fraction::new_maybe_reduced(20932, 1097),
Fraction::new_maybe_reduced(23854, 833),
Fraction::new_maybe_reduced(13234, 231),
Fraction::new_whole(-32768),
Fraction::new_maybe_reduced(-16213, 283),
Fraction::new_maybe_reduced(-29123, 1017),
Fraction::new_maybe_reduced(-16696, 875),
Fraction::new_maybe_reduced(-8609, 602),
Fraction::new_maybe_reduced(-21237, 1858),
Fraction::new_maybe_reduced(-4310, 453),
Fraction::new_maybe_reduced(-12469, 1531),
Fraction::new_maybe_reduced(-13939, 1959),
Fraction::new_maybe_reduced(-17407, 2757),
Fraction::new_maybe_reduced(-6970, 1229),
Fraction::new_maybe_reduced(-7367, 1432),
Fraction::new_maybe_reduced(-6403, 1361),
Fraction::new_maybe_reduced(-5436, 1255),
Fraction::new_maybe_reduced(-4837, 1206),
Fraction::new_maybe_reduced(-10864, 2911),
Fraction::new_maybe_reduced(-28541, 8184),
Fraction::new_maybe_reduced(-7137, 2182),
Fraction::new_maybe_reduced(-2496, 811),
Fraction::new_maybe_reduced(-3517, 1211),
Fraction::new_maybe_reduced(-9803, 3568),
Fraction::new_maybe_reduced(-9011, 3459),
Fraction::new_maybe_reduced(-2881, 1164),
Fraction::new_maybe_reduced(-8474, 3597),
Fraction::new_maybe_reduced(-7367, 3280),
Fraction::new_maybe_reduced(-5387, 2512),
Fraction::new_maybe_reduced(-4402, 2147),
Fraction::new_maybe_reduced(-6404, 3263),
Fraction::new_maybe_reduced(-4557, 2423),
Fraction::new_maybe_reduced(-5349, 2965),
Fraction::new_maybe_reduced(-3691, 2131),
Fraction::new_maybe_reduced(-3951, 2374),
Fraction::new_maybe_reduced(-6707, 4191),
Fraction::new_maybe_reduced(-2279, 1480),
Fraction::new_maybe_reduced(-3613, 2437),
Fraction::new_maybe_reduced(-5297, 3709),
Fraction::new_maybe_reduced(-3112, 2261),
Fraction::new_maybe_reduced(-11114, 8375),
Fraction::new_maybe_reduced(-1742, 1361),
Fraction::new_maybe_reduced(-4211, 3410),
Fraction::new_maybe_reduced(-2399, 2013),
Fraction::new_maybe_reduced(-1094, 951),
Fraction::new_maybe_reduced(-2721, 2450),
Fraction::new_maybe_reduced(-14255, 13293),
Fraction::new_maybe_reduced(-1807, 1745),
Fraction::new_whole(-1),
Fraction::new_maybe_reduced(-2139, 2215),
Fraction::new_maybe_reduced(-12533, 13440),
Fraction::new_maybe_reduced(-2450, 2721),
Fraction::new_maybe_reduced(-2035, 2341),
Fraction::new_maybe_reduced(-2571, 3064),
Fraction::new_maybe_reduced(-3261, 4027),
Fraction::new_maybe_reduced(-2054, 2629),
Fraction::new_maybe_reduced(-4241, 5628),
Fraction::new_maybe_reduced(-1990, 2739),
Fraction::new_maybe_reduced(-2366, 3379),
Fraction::new_maybe_reduced(-1749, 2593),
Fraction::new_maybe_reduced(-1480, 2279),
Fraction::new_maybe_reduced(-2387, 3820),
Fraction::new_maybe_reduced(-1117, 1859),
Fraction::new_maybe_reduced(-1351, 2340),
Fraction::new_maybe_reduced(-1087, 1961),
Fraction::new_maybe_reduced(-1157, 2176),
Fraction::new_maybe_reduced(-1578, 3097),
Fraction::new_maybe_reduced(-1153, 2364),
Fraction::new_maybe_reduced(-2166, 4645),
Fraction::new_maybe_reduced(-1325, 2976),
Fraction::new_maybe_reduced(-1717, 4045),
Fraction::new_maybe_reduced(-863, 2136),
Fraction::new_maybe_reduced(-904, 2355),
Fraction::new_maybe_reduced(-1984, 5451),
Fraction::new_maybe_reduced(-950, 2759),
Fraction::new_maybe_reduced(-708, 2179),
Fraction::new_maybe_reduced(-971, 3176),
Fraction::new_maybe_reduced(-437, 1524),
Fraction::new_maybe_reduced(-780, 2911),
Fraction::new_maybe_reduced(-371, 1488),
Fraction::new_maybe_reduced(-359, 1555),
Fraction::new_maybe_reduced(-518, 2437),
Fraction::new_maybe_reduced(-588, 3025),
Fraction::new_maybe_reduced(-289, 1639),
Fraction::new_maybe_reduced(-647, 4085),
Fraction::new_maybe_reduced(-2921, 20784),
Fraction::new_maybe_reduced(-381, 3103),
Fraction::new_maybe_reduced(-348, 3311),
Fraction::new_maybe_reduced(-193, 2206),
Fraction::new_maybe_reduced(-153, 2188),
Fraction::new_maybe_reduced(-197, 3759),
Fraction::new_maybe_reduced(-11, 315),
Fraction::new_maybe_reduced(-38, 2177),
Fraction::new_whole(0),
Fraction::new_maybe_reduced(31, 1776),
Fraction::new_maybe_reduced(294, 8419),
Fraction::new_maybe_reduced(308, 5877),
Fraction::new_maybe_reduced(153, 2188),
Fraction::new_maybe_reduced(193, 2206),
Fraction::new_maybe_reduced(313, 2978),
Fraction::new_maybe_reduced(672, 5473),
Fraction::new_maybe_reduced(1751, 12459),
Fraction::new_maybe_reduced(596, 3763),
Fraction::new_maybe_reduced(362, 2053),
Fraction::new_maybe_reduced(505, 2598),
Fraction::new_maybe_reduced(606, 2851),
Fraction::new_maybe_reduced(537, 2326),
Fraction::new_maybe_reduced(371, 1488),
Fraction::new_maybe_reduced(933, 3482),
Fraction::new_maybe_reduced(993, 3463),
Fraction::new_maybe_reduced(923, 3019),
Fraction::new_maybe_reduced(811, 2496),
Fraction::new_maybe_reduced(689, 2001),
Fraction::new_maybe_reduced(99, 272),
Fraction::new_maybe_reduced(747, 1946),
Fraction::new_maybe_reduced(863, 2136),
Fraction::new_maybe_reduced(829, 1953),
Fraction::new_maybe_reduced(1577, 3542),
Fraction::new_maybe_reduced(2512, 5387),
Fraction::new_maybe_reduced(1153, 2364),
Fraction::new_maybe_reduced(1364, 2677),
Fraction::new_maybe_reduced(1048, 1971),
Fraction::new_maybe_reduced(1087, 1961),
Fraction::new_maybe_reduced(780, 1351),
Fraction::new_maybe_reduced(1117, 1859),
Fraction::new_maybe_reduced(598, 957),
Fraction::new_maybe_reduced(1041, 1603),
Fraction::new_maybe_reduced(1921, 2848),
Fraction::new_maybe_reduced(675, 964),
Fraction::new_maybe_reduced(1177, 1620),
Fraction::new_maybe_reduced(5990, 7949),
Fraction::new_maybe_reduced(2747, 3516),
Fraction::new_maybe_reduced(2218, 2739),
Fraction::new_maybe_reduced(1528, 1821),
Fraction::new_maybe_reduced(3119, 3588),
Fraction::new_maybe_reduced(1781, 1978),
Fraction::new_maybe_reduced(152, 163),
Fraction::new_maybe_reduced(1548, 1603),
Fraction::new_whole(1),
Fraction::new_maybe_reduced(2011, 1942),
Fraction::new_maybe_reduced(8387, 7821),
Fraction::new_maybe_reduced(743, 669),
Fraction::new_maybe_reduced(1247, 1084),
Fraction::new_maybe_reduced(1821, 1528),
Fraction::new_maybe_reduced(3843, 3112),
Fraction::new_maybe_reduced(3580, 2797),
Fraction::new_maybe_reduced(4573, 3446),
Fraction::new_maybe_reduced(1993, 1448),
Fraction::new_maybe_reduced(5307, 3716),
Fraction::new_maybe_reduced(2848, 1921),
Fraction::new_maybe_reduced(3457, 2245),
Fraction::new_maybe_reduced(4769, 2980),
Fraction::new_maybe_reduced(4417, 2654),
Fraction::new_maybe_reduced(1351, 780),
Fraction::new_maybe_reduced(1961, 1087),
Fraction::new_maybe_reduced(2176, 1157),
Fraction::new_maybe_reduced(3727, 1899),
Fraction::new_maybe_reduced(1345, 656),
Fraction::new_maybe_reduced(9097, 4242),
Fraction::new_maybe_reduced(3542, 1577),
Fraction::new_maybe_reduced(2476, 1051),
Fraction::new_maybe_reduced(18828, 7607),
Fraction::new_maybe_reduced(3173, 1218),
Fraction::new_maybe_reduced(8443, 3073),
Fraction::new_maybe_reduced(9035, 3111),
Fraction::new_maybe_reduced(9667, 3141),
Fraction::new_maybe_reduced(12233, 3740),
Fraction::new_maybe_reduced(6790, 1947),
Fraction::new_maybe_reduced(9513, 2549),
Fraction::new_maybe_reduced(4833, 1205),
Fraction::new_maybe_reduced(3881, 896),
Fraction::new_maybe_reduced(9461, 2011),
Fraction::new_maybe_reduced(3025, 588),
Fraction::new_maybe_reduced(6142, 1083),
Fraction::new_maybe_reduced(14307, 2266),
Fraction::new_maybe_reduced(185, 26),
Fraction::new_maybe_reduced(13145, 1614),
Fraction::new_maybe_reduced(2978, 313),
Fraction::new_maybe_reduced(12093, 1058),
Fraction::new_maybe_reduced(28587, 1999),
Fraction::new_maybe_reduced(3053, 160),
Fraction::new_maybe_reduced(32216, 1125),
Fraction::new_maybe_reduced(1776, 31),
Fraction::new_whole(32767),
Fraction::new_maybe_reduced(-25265, 441),
Fraction::new_maybe_reduced(-7474, 261),
Fraction::new_maybe_reduced(-29423, 1542),
Fraction::new_maybe_reduced(-13271, 928),
Fraction::new_maybe_reduced(-2206, 193),
Fraction::new_maybe_reduced(-9267, 974),
Fraction::new_maybe_reduced(-26917, 3305),
Fraction::new_maybe_reduced(-11349, 1595),
Fraction::new_maybe_reduced(-5373, 851),
Fraction::new_maybe_reduced(-11507, 2029),
Fraction::new_maybe_reduced(-17723, 3445),
Fraction::new_maybe_reduced(-8139, 1730),
Fraction::new_maybe_reduced(-10088, 2329),
Fraction::new_maybe_reduced(-6325, 1577),
Fraction::new_maybe_reduced(-1351, 362),
Fraction::new_maybe_reduced(-1939, 556),
Fraction::new_maybe_reduced(-6195, 1894),
Fraction::new_maybe_reduced(-14659, 4763),
Fraction::new_maybe_reduced(-2759, 950),
Fraction::new_maybe_reduced(-24197, 8807),
Fraction::new_maybe_reduced(-7375, 2831),
Fraction::new_maybe_reduced(-3626, 1465),
Fraction::new_maybe_reduced(-2476, 1051),
Fraction::new_maybe_reduced(-7367, 3280),
Fraction::new_maybe_reduced(-9097, 4242),
Fraction::new_maybe_reduced(-7459, 3638),
Fraction::new_maybe_reduced(-2467, 1257),
Fraction::new_maybe_reduced(-2176, 1157),
Fraction::new_maybe_reduced(-1961, 1087),
Fraction::new_maybe_reduced(-1351, 780),
Fraction::new_maybe_reduced(-1626, 977),
Fraction::new_maybe_reduced(-3836, 2397),
Fraction::new_maybe_reduced(-2955, 1919),
Fraction::new_maybe_reduced(-2848, 1921),
Fraction::new_maybe_reduced(-5307, 3716),
Fraction::new_maybe_reduced(-1993, 1448),
Fraction::new_maybe_reduced(-16178, 12191),
Fraction::new_maybe_reduced(-2629, 2054),
Fraction::new_maybe_reduced(-2555, 2069),
Fraction::new_maybe_reduced(-1821, 1528),
Fraction::new_maybe_reduced(-1247, 1084),
Fraction::new_maybe_reduced(-1978, 1781),
Fraction::new_maybe_reduced(-18656, 17397),
Fraction::new_maybe_reduced(-1399, 1351),
Fraction::new_whole(-1),
Fraction::new_maybe_reduced(-2139, 2215),
Fraction::new_maybe_reduced(-9037, 9691),
Fraction::new_maybe_reduced(-3788, 4207),
Fraction::new_maybe_reduced(-2301, 2647),
Fraction::new_maybe_reduced(-2571, 3064),
Fraction::new_maybe_reduced(-3559, 4395),
Fraction::new_maybe_reduced(-2747, 3516),
Fraction::new_maybe_reduced(-5990, 7949),
Fraction::new_maybe_reduced(-1719, 2366),
Fraction::new_maybe_reduced(-1691, 2415),
Fraction::new_maybe_reduced(-1577, 2338),
Fraction::new_maybe_reduced(-1041, 1603),
Fraction::new_maybe_reduced(-598, 957),
Fraction::new_maybe_reduced(-1117, 1859),
Fraction::new_maybe_reduced(-1769, 3064),
Fraction::new_maybe_reduced(-1235, 2228),
Fraction::new_maybe_reduced(-1266, 2381),
Fraction::new_maybe_reduced(-2006, 3937),
Fraction::new_maybe_reduced(-1153, 2364),
Fraction::new_maybe_reduced(-173, 371),
Fraction::new_maybe_reduced(-1199, 2693),
Fraction::new_maybe_reduced(-1273, 2999),
Fraction::new_maybe_reduced(-1385, 3428),
Fraction::new_maybe_reduced(-1532, 3991),
Fraction::new_maybe_reduced(-99, 272),
Fraction::new_maybe_reduced(-1211, 3517),
Fraction::new_maybe_reduced(-708, 2179),
Fraction::new_maybe_reduced(-827, 2705),
Fraction::new_maybe_reduced(-755, 2633),
Fraction::new_maybe_reduced(-989, 3691),
Fraction::new_maybe_reduced(-371, 1488),
Fraction::new_maybe_reduced(-359, 1555),
Fraction::new_maybe_reduced(-281, 1322),
Fraction::new_maybe_reduced(-671, 3452),
Fraction::new_maybe_reduced(-505, 2864),
Fraction::new_maybe_reduced(-596, 3763),
Fraction::new_maybe_reduced(-1881, 13384),
Fraction::new_maybe_reduced(-575, 4683),
Fraction::new_maybe_reduced(-278, 2645),
Fraction::new_maybe_reduced(-286, 3269),
Fraction::new_maybe_reduced(-143, 2045),
Fraction::new_maybe_reduced(-308, 5877),
Fraction::new_maybe_reduced(-316, 9049),
Fraction::new_maybe_reduced(-55, 3151),
];
pub static ARCTAN_TABLE: [Fraction; (ARCTAN_SUBDIVISIONS + 1) as usize] = [
Fraction::new_whole(0),
Fraction::new_maybe_reduced(1, 462),
Fraction::new_maybe_reduced(1, 231),
Fraction::new_maybe_reduced(1, 154),
Fraction::new_maybe_reduced(113, 13052),
Fraction::new_maybe_reduced(47, 4343),
Fraction::new_maybe_reduced(199, 15324),
Fraction::new_maybe_reduced(180, 11881),
Fraction::new_maybe_reduced(41, 2368),
Fraction::new_maybe_reduced(50, 2567),
Fraction::new_maybe_reduced(82, 3789),
Fraction::new_maybe_reduced(123, 5167),
Fraction::new_maybe_reduced(57, 2195),
Fraction::new_maybe_reduced(73, 2595),
Fraction::new_maybe_reduced(98, 3235),
Fraction::new_maybe_reduced(37, 1140),
Fraction::new_maybe_reduced(97, 2802),
Fraction::new_maybe_reduced(53, 1441),
Fraction::new_maybe_reduced(103, 2645),
Fraction::new_maybe_reduced(88, 2141),
Fraction::new_maybe_reduced(166, 3837),
Fraction::new_maybe_reduced(66, 1453),
Fraction::new_maybe_reduced(63, 1324),
Fraction::new_maybe_reduced(251, 5046),
Fraction::new_maybe_reduced(101, 1946),
Fraction::new_maybe_reduced(249, 4606),
Fraction::new_maybe_reduced(250, 4447),
Fraction::new_maybe_reduced(268, 4591),
Fraction::new_maybe_reduced(198, 3271),
Fraction::new_maybe_reduced(104, 1659),
Fraction::new_maybe_reduced(185, 2853),
Fraction::new_maybe_reduced(215, 3209),
Fraction::new_maybe_reduced(241, 3485),
Fraction::new_maybe_reduced(421, 5904),
Fraction::new_maybe_reduced(173, 2355),
Fraction::new_maybe_reduced(111, 1468),
Fraction::new_maybe_reduced(135, 1736),
Fraction::new_maybe_reduced(343, 4292),
Fraction::new_maybe_reduced(394, 4801),
Fraction::new_maybe_reduced(167, 1983),
Fraction::new_maybe_reduced(330, 3821),
Fraction::new_maybe_reduced(319, 3604),
Fraction::new_maybe_reduced(397, 4379),
Fraction::new_maybe_reduced(169, 1821),
Fraction::new_maybe_reduced(363, 3823),
Fraction::new_maybe_reduced(107, 1102),
Fraction::new_maybe_reduced(222, 2237),
Fraction::new_maybe_reduced(1041, 10268),
Fraction::new_maybe_reduced(420, 4057),
Fraction::new_maybe_reduced(235, 2224),
Fraction::new_maybe_reduced(337, 3126),
Fraction::new_maybe_reduced(178, 1619),
Fraction::new_maybe_reduced(359, 3203),
Fraction::new_maybe_reduced(886, 7757),
Fraction::new_maybe_reduced(249, 2140),
Fraction::new_maybe_reduced(339, 2861),
Fraction::new_maybe_reduced(410, 3399),
Fraction::new_maybe_reduced(212, 1727),
Fraction::new_maybe_reduced(139, 1113),
Fraction::new_maybe_reduced(535, 4212),
Fraction::new_maybe_reduced(362, 2803),
Fraction::new_maybe_reduced(421, 3207),
Fraction::new_maybe_reduced(518, 3883),
Fraction::new_maybe_reduced(140, 1033),
Fraction::new_maybe_reduced(1447, 10512),
Fraction::new_maybe_reduced(311, 2225),
Fraction::new_maybe_reduced(549, 3869),
Fraction::new_maybe_reduced(195, 1354),
Fraction::new_maybe_reduced(331, 2265),
Fraction::new_maybe_reduced(412, 2779),
Fraction::new_maybe_reduced(506, 3365),
Fraction::new_maybe_reduced(371, 2433),
Fraction::new_maybe_reduced(331, 2141),
Fraction::new_maybe_reduced(349, 2227),
Fraction::new_maybe_reduced(1340, 8437),
Fraction::new_maybe_reduced(131, 814),
Fraction::new_maybe_reduced(1072, 6575),
Fraction::new_maybe_reduced(272, 1647),
Fraction::new_maybe_reduced(617, 3689),
Fraction::new_maybe_reduced(472, 2787),
Fraction::new_maybe_reduced(626, 3651),
Fraction::new_maybe_reduced(407, 2345),
Fraction::new_maybe_reduced(599, 3410),
Fraction::new_maybe_reduced(195, 1097),
Fraction::new_maybe_reduced(491, 2730),
Fraction::new_maybe_reduced(510, 2803),
Fraction::new_maybe_reduced(542, 2945),
Fraction::new_maybe_reduced(1012, 5437),
Fraction::new_maybe_reduced(799, 4245),
Fraction::new_maybe_reduced(326, 1713),
Fraction::new_maybe_reduced(673, 3498),
Fraction::new_maybe_reduced(303, 1558),
Fraction::new_maybe_reduced(183, 931),
Fraction::new_maybe_reduced(293, 1475),
Fraction::new_maybe_reduced(111, 553),
Fraction::new_maybe_reduced(391, 1928),
Fraction::new_maybe_reduced(689, 3363),
Fraction::new_maybe_reduced(792, 3827),
Fraction::new_maybe_reduced(644, 3081),
Fraction::new_maybe_reduced(529, 2506),
Fraction::new_maybe_reduced(962, 4513),
Fraction::new_maybe_reduced(913, 4242),
Fraction::new_maybe_reduced(676, 3111),
Fraction::new_maybe_reduced(859, 3916),
Fraction::new_maybe_reduced(428, 1933),
Fraction::new_maybe_reduced(1247, 5580),
Fraction::new_maybe_reduced(507, 2248),
Fraction::new_maybe_reduced(523, 2298),
Fraction::new_maybe_reduced(533, 2321),
Fraction::new_maybe_reduced(829, 3578),
Fraction::new_maybe_reduced(1179, 5044),
Fraction::new_maybe_reduced(419, 1777),
Fraction::new_maybe_reduced(655, 2754),
Fraction::new_maybe_reduced(397, 1655),
Fraction::new_maybe_reduced(262, 1083),
Fraction::new_maybe_reduced(414, 1697),
Fraction::new_maybe_reduced(169, 687),
Fraction::new_maybe_reduced(1355, 5463),
Fraction::new_maybe_reduced(959, 3835),
Fraction::new_maybe_reduced(872, 3459),
Fraction::new_maybe_reduced(1109, 4364),
Fraction::new_maybe_reduced(406, 1585),
Fraction::new_maybe_reduced(1121, 4342),
Fraction::new_maybe_reduced(893, 3432),
Fraction::new_maybe_reduced(617, 2353),
Fraction::new_maybe_reduced(877, 3319),
Fraction::new_maybe_reduced(471, 1769),
Fraction::new_maybe_reduced(481, 1793),
Fraction::new_maybe_reduced(1083, 4007),
Fraction::new_maybe_reduced(617, 2266),
Fraction::new_maybe_reduced(223, 813),
Fraction::new_maybe_reduced(197, 713),
Fraction::new_maybe_reduced(563, 2023),
Fraction::new_maybe_reduced(636, 2269),
Fraction::new_maybe_reduced(1676, 5937),
Fraction::new_maybe_reduced(400, 1407),
Fraction::new_maybe_reduced(501, 1750),
Fraction::new_maybe_reduced(659, 2286),
Fraction::new_maybe_reduced(811, 2794),
Fraction::new_maybe_reduced(396, 1355),
Fraction::new_maybe_reduced(148, 503),
Fraction::new_maybe_reduced(681, 2299),
Fraction::new_maybe_reduced(925, 3102),
Fraction::new_maybe_reduced(1053, 3508),
Fraction::new_maybe_reduced(662, 2191),
Fraction::new_maybe_reduced(229, 753),
Fraction::new_maybe_reduced(689, 2251),
Fraction::new_maybe_reduced(723, 2347),
Fraction::new_maybe_reduced(913, 2945),
Fraction::new_maybe_reduced(711, 2279),
Fraction::new_maybe_reduced(955, 3042),
Fraction::new_maybe_reduced(1419, 4492),
Fraction::new_maybe_reduced(739, 2325),
Fraction::new_maybe_reduced(386, 1207),
Fraction::new_maybe_reduced(1213, 3770),
Fraction::new_maybe_reduced(851, 2629),
Fraction::new_maybe_reduced(1256, 3857),
Fraction::new_maybe_reduced(1861, 5681),
Fraction::new_maybe_reduced(490, 1487),
Fraction::new_maybe_reduced(1061, 3201),
Fraction::new_maybe_reduced(1860, 5579),
Fraction::new_maybe_reduced(1235, 3683),
Fraction::new_maybe_reduced(717, 2126),
Fraction::new_maybe_reduced(967, 2851),
Fraction::new_maybe_reduced(600, 1759),
Fraction::new_maybe_reduced(2407, 7017),
Fraction::new_maybe_reduced(1347, 3905),
Fraction::new_maybe_reduced(701, 2021),
Fraction::new_maybe_reduced(979, 2807),
Fraction::new_maybe_reduced(1570, 4477),
Fraction::new_maybe_reduced(1178, 3341),
Fraction::new_maybe_reduced(564, 1591),
Fraction::new_maybe_reduced(989, 2775),
Fraction::new_maybe_reduced(1043, 2911),
Fraction::new_maybe_reduced(970, 2693),
Fraction::new_maybe_reduced(340, 939),
Fraction::new_maybe_reduced(483, 1327),
Fraction::new_maybe_reduced(1267, 3463),
Fraction::new_maybe_reduced(1973, 5365),
Fraction::new_maybe_reduced(3007, 8135),
Fraction::new_maybe_reduced(1307, 3518),
Fraction::new_maybe_reduced(1833, 4909),
Fraction::new_maybe_reduced(1906, 5079),
Fraction::new_maybe_reduced(5125, 13589),
Fraction::new_maybe_reduced(1098, 2897),
Fraction::new_maybe_reduced(996, 2615),
Fraction::new_maybe_reduced(3083, 8055),
Fraction::new_maybe_reduced(2743, 7132),
Fraction::new_maybe_reduced(2381, 6161),
Fraction::new_maybe_reduced(1097, 2825),
Fraction::new_maybe_reduced(1183, 3032),
Fraction::new_maybe_reduced(1022, 2607),
Fraction::new_maybe_reduced(1182, 3001),
Fraction::new_maybe_reduced(1163, 2939),
Fraction::new_maybe_reduced(1203, 3026),
Fraction::new_maybe_reduced(921, 2306),
Fraction::new_maybe_reduced(849, 2116),
Fraction::new_maybe_reduced(3291, 8165),
Fraction::new_maybe_reduced(1854, 4579),
Fraction::new_maybe_reduced(569, 1399),
Fraction::new_maybe_reduced(373, 913),
Fraction::new_maybe_reduced(1069, 2605),
Fraction::new_maybe_reduced(927, 2249),
Fraction::new_maybe_reduced(763, 1843),
Fraction::new_maybe_reduced(689, 1657),
Fraction::new_maybe_reduced(583, 1396),
Fraction::new_maybe_reduced(367, 875),
Fraction::new_maybe_reduced(123, 292),
Fraction::new_maybe_reduced(1135, 2683),
Fraction::new_maybe_reduced(633, 1490),
Fraction::new_maybe_reduced(1160, 2719),
Fraction::new_maybe_reduced(404, 943),
Fraction::new_maybe_reduced(863, 2006),
Fraction::new_maybe_reduced(829, 1919),
Fraction::new_maybe_reduced(940, 2167),
Fraction::new_maybe_reduced(828, 1901),
Fraction::new_maybe_reduced(506, 1157),
Fraction::new_maybe_reduced(970, 2209),
Fraction::new_maybe_reduced(977, 2216),
Fraction::new_maybe_reduced(1675, 3784),
Fraction::new_maybe_reduced(1947, 4381),
Fraction::new_maybe_reduced(485, 1087),
Fraction::new_maybe_reduced(3472, 7751),
Fraction::new_maybe_reduced(523, 1163),
Fraction::new_maybe_reduced(1367, 3028),
Fraction::new_maybe_reduced(983, 2169),
Fraction::new_maybe_reduced(712, 1565),
Fraction::new_maybe_reduced(849, 1859),
Fraction::new_maybe_reduced(1081, 2358),
Fraction::new_maybe_reduced(2681, 5826),
Fraction::new_maybe_reduced(1134, 2455),
Fraction::new_maybe_reduced(1116, 2407),
Fraction::new_maybe_reduced(1035, 2224),
Fraction::new_maybe_reduced(5403, 11567),
Fraction::new_maybe_reduced(1113, 2374),
Fraction::new_maybe_reduced(1446, 3073),
Fraction::new_maybe_reduced(860, 1821),
Fraction::new_maybe_reduced(1585, 3344),
Fraction::new_maybe_reduced(1967, 4135),
Fraction::new_maybe_reduced(412, 863),
Fraction::new_maybe_reduced(1594, 3327),
Fraction::new_maybe_reduced(1466, 3049),
Fraction::new_maybe_reduced(814, 1687),
Fraction::new_maybe_reduced(13493, 27866),
Fraction::new_maybe_reduced(1827, 3760),
Fraction::new_maybe_reduced(1474, 3023),
Fraction::new_maybe_reduced(662, 1353),
Fraction::new_maybe_reduced(761, 1550),
Fraction::new_maybe_reduced(1307, 2653),
Fraction::new_maybe_reduced(1351, 2733),
Fraction::new_maybe_reduced(931, 1877),
Fraction::new_maybe_reduced(857, 1722),
Fraction::new_maybe_reduced(1529, 3062),
Fraction::new_maybe_reduced(1236, 2467),
Fraction::new_maybe_reduced(845, 1681),
Fraction::new_maybe_reduced(1279, 2536),
Fraction::new_maybe_reduced(211, 417),
Fraction::new_maybe_reduced(365, 719),
Fraction::new_maybe_reduced(1013, 1989),
Fraction::new_maybe_reduced(4713, 9224),
Fraction::new_maybe_reduced(1282, 2501),
Fraction::new_maybe_reduced(1517, 2950),
Fraction::new_maybe_reduced(1121, 2173),
Fraction::new_maybe_reduced(1315, 2541),
Fraction::new_maybe_reduced(827, 1593),
Fraction::new_maybe_reduced(1905, 3658),
Fraction::new_maybe_reduced(2017, 3861),
Fraction::new_maybe_reduced(229, 437),
Fraction::new_maybe_reduced(1783, 3392),
Fraction::new_maybe_reduced(1547, 2934),
Fraction::new_maybe_reduced(1291, 2441),
Fraction::new_maybe_reduced(1731, 3263),
Fraction::new_maybe_reduced(1268, 2383),
Fraction::new_maybe_reduced(6832, 12801),
Fraction::new_maybe_reduced(2039, 3809),
Fraction::new_maybe_reduced(1651, 3075),
Fraction::new_maybe_reduced(902, 1675),
Fraction::new_maybe_reduced(1495, 2768),
Fraction::new_maybe_reduced(903, 1667),
Fraction::new_maybe_reduced(772, 1421),
Fraction::new_maybe_reduced(1342, 2463),
Fraction::new_maybe_reduced(1153, 2110),
Fraction::new_maybe_reduced(2191, 3998),
Fraction::new_maybe_reduced(892, 1623),
Fraction::new_maybe_reduced(1411, 2560),
Fraction::new_maybe_reduced(1593, 2882),
Fraction::new_maybe_reduced(3899, 7034),
Fraction::new_maybe_reduced(1567, 2819),
Fraction::new_maybe_reduced(1354, 2429),
Fraction::new_maybe_reduced(2895, 5179),
Fraction::new_maybe_reduced(1736, 3097),
Fraction::new_maybe_reduced(1557, 2770),
Fraction::new_maybe_reduced(1789, 3174),
Fraction::new_maybe_reduced(815, 1442),
Fraction::new_maybe_reduced(603, 1064),
Fraction::new_maybe_reduced(745, 1311),
Fraction::new_maybe_reduced(1253, 2199),
Fraction::new_maybe_reduced(897, 1570),
Fraction::new_maybe_reduced(1820, 3177),
Fraction::new_maybe_reduced(166, 289),
Fraction::new_maybe_reduced(1191, 2068),
Fraction::new_maybe_reduced(645, 1117),
Fraction::new_maybe_reduced(2933, 5066),
Fraction::new_maybe_reduced(1302, 2243),
Fraction::new_maybe_reduced(827, 1421),
Fraction::new_maybe_reduced(2425, 4156),
Fraction::new_maybe_reduced(5647, 9653),
Fraction::new_maybe_reduced(1573, 2682),
Fraction::new_maybe_reduced(892, 1517),
Fraction::new_maybe_reduced(1673, 2838),
Fraction::new_maybe_reduced(1273, 2154),
Fraction::new_maybe_reduced(1829, 3087),
Fraction::new_maybe_reduced(1084, 1825),
Fraction::new_maybe_reduced(839, 1409),
Fraction::new_maybe_reduced(2614, 4379),
Fraction::new_maybe_reduced(757, 1265),
Fraction::new_maybe_reduced(1144, 1907),
Fraction::new_maybe_reduced(967, 1608),
Fraction::new_maybe_reduced(2676, 4439),
Fraction::new_maybe_reduced(1179, 1951),
Fraction::new_maybe_reduced(8714, 14385),
Fraction::new_maybe_reduced(739, 1217),
Fraction::new_maybe_reduced(4077, 6698),
Fraction::new_maybe_reduced(2069, 3391),
Fraction::new_maybe_reduced(1888, 3087),
Fraction::new_maybe_reduced(1795, 2928),
Fraction::new_maybe_reduced(5249, 8542),
Fraction::new_maybe_reduced(1631, 2648),
Fraction::new_maybe_reduced(1144, 1853),
Fraction::new_maybe_reduced(1013, 1637),
Fraction::new_maybe_reduced(2089, 3368),
Fraction::new_maybe_reduced(281, 452),
Fraction::new_maybe_reduced(577, 926),
Fraction::new_maybe_reduced(2693, 4312),
Fraction::new_maybe_reduced(979, 1564),
Fraction::new_maybe_reduced(857, 1366),
Fraction::new_maybe_reduced(559, 889),
Fraction::new_maybe_reduced(1527, 2423),
Fraction::new_maybe_reduced(775, 1227),
Fraction::new_maybe_reduced(2020, 3191),
Fraction::new_maybe_reduced(748, 1179),
Fraction::new_maybe_reduced(9577, 15062),
Fraction::new_maybe_reduced(1126, 1767),
Fraction::new_maybe_reduced(1048, 1641),
Fraction::new_maybe_reduced(889, 1389),
Fraction::new_maybe_reduced(2837, 4423),
Fraction::new_maybe_reduced(1877, 2920),
Fraction::new_maybe_reduced(1653, 2566),
Fraction::new_maybe_reduced(1306, 2023),
Fraction::new_maybe_reduced(1105, 1708),
Fraction::new_maybe_reduced(2546, 3927),
Fraction::new_maybe_reduced(1545, 2378),
Fraction::new_maybe_reduced(1935, 2972),
Fraction::new_maybe_reduced(1361, 2086),
Fraction::new_maybe_reduced(695, 1063),
Fraction::new_maybe_reduced(19, 29),
Fraction::new_maybe_reduced(1382, 2105),
Fraction::new_maybe_reduced(2773, 4215),
Fraction::new_maybe_reduced(3463, 5253),
Fraction::new_maybe_reduced(1269, 1921),
Fraction::new_maybe_reduced(1541, 2328),
Fraction::new_maybe_reduced(1243, 1874),
Fraction::new_maybe_reduced(870, 1309),
Fraction::new_maybe_reduced(955, 1434),
Fraction::new_maybe_reduced(1739, 2606),
Fraction::new_maybe_reduced(2936, 4391),
Fraction::new_maybe_reduced(3041, 4539),
Fraction::new_maybe_reduced(821, 1223),
Fraction::new_maybe_reduced(602, 895),
Fraction::new_maybe_reduced(1234, 1831),
Fraction::new_maybe_reduced(4841, 7169),
Fraction::new_maybe_reduced(2069, 3058),
Fraction::new_maybe_reduced(1227, 1810),
Fraction::new_maybe_reduced(1552, 2285),
Fraction::new_maybe_reduced(1932, 2839),
Fraction::new_maybe_reduced(3313, 4859),
Fraction::new_maybe_reduced(2531, 3705),
Fraction::new_maybe_reduced(2119, 3096),
Fraction::new_maybe_reduced(1283, 1871),
Fraction::new_maybe_reduced(2711, 3946),
Fraction::new_maybe_reduced(1632, 2371),
Fraction::new_maybe_reduced(491, 712),
Fraction::new_maybe_reduced(827, 1197),
Fraction::new_maybe_reduced(2053, 2966),
Fraction::new_maybe_reduced(880, 1269),
Fraction::new_maybe_reduced(4661, 6709),
Fraction::new_maybe_reduced(1170, 1681),
Fraction::new_maybe_reduced(2725, 3908),
Fraction::new_maybe_reduced(533, 763),
Fraction::new_maybe_reduced(1611, 2302),
Fraction::new_maybe_reduced(835, 1191),
Fraction::new_maybe_reduced(925, 1317),
Fraction::new_maybe_reduced(2317, 3293),
Fraction::new_maybe_reduced(246, 349),
Fraction::new_maybe_reduced(1026, 1453),
Fraction::new_maybe_reduced(863, 1220),
Fraction::new_maybe_reduced(1109, 1565),
Fraction::new_maybe_reduced(1172, 1651),
Fraction::new_maybe_reduced(2885, 4057),
Fraction::new_maybe_reduced(1689, 2371),
Fraction::new_maybe_reduced(887, 1243),
Fraction::new_maybe_reduced(935, 1308),
Fraction::new_maybe_reduced(2242, 3131),
Fraction::new_maybe_reduced(1464, 2041),
Fraction::new_maybe_reduced(1090, 1517),
Fraction::new_maybe_reduced(1374, 1909),
Fraction::new_maybe_reduced(1633, 2265),
Fraction::new_maybe_reduced(1305, 1807),
Fraction::new_maybe_reduced(3319, 4588),
Fraction::new_maybe_reduced(1492, 2059),
Fraction::new_maybe_reduced(1607, 2214),
Fraction::new_maybe_reduced(2035, 2799),
Fraction::new_maybe_reduced(1825, 2506),
Fraction::new_maybe_reduced(2672, 3663),
Fraction::new_maybe_reduced(2786, 3813),
Fraction::new_maybe_reduced(2612, 3569),
Fraction::new_maybe_reduced(1925, 2626),
Fraction::new_maybe_reduced(1177, 1603),
Fraction::new_maybe_reduced(1187, 1614),
Fraction::new_maybe_reduced(909, 1234),
Fraction::new_maybe_reduced(439, 595),
Fraction::new_maybe_reduced(2200, 2977),
Fraction::new_maybe_reduced(1809, 2444),
Fraction::new_maybe_reduced(622, 839),
Fraction::new_maybe_reduced(2437, 3282),
Fraction::new_maybe_reduced(1123, 1510),
Fraction::new_maybe_reduced(1673, 2246),
Fraction::new_maybe_reduced(708, 949),
Fraction::new_maybe_reduced(1073, 1436),
Fraction::new_maybe_reduced(1615, 2158),
Fraction::new_maybe_reduced(2439, 3254),
Fraction::new_maybe_reduced(807, 1075),
Fraction::new_maybe_reduced(1521, 2023),
Fraction::new_maybe_reduced(939, 1247),
Fraction::new_maybe_reduced(1859, 2465),
Fraction::new_maybe_reduced(1957, 2591),
Fraction::new_maybe_reduced(1817, 2402),
Fraction::new_maybe_reduced(1097, 1448),
Fraction::new_maybe_reduced(1563, 2060),
Fraction::new_maybe_reduced(1231, 1620),
Fraction::new_maybe_reduced(1503, 1975),
Fraction::new_maybe_reduced(1051, 1379),
Fraction::new_maybe_reduced(3679, 4820),
Fraction::new_maybe_reduced(451, 590),
Fraction::new_maybe_reduced(2994, 3911),
Fraction::new_maybe_reduced(2681, 3497),
Fraction::new_maybe_reduced(1749, 2278),
Fraction::new_maybe_reduced(2665, 3466),
Fraction::new_maybe_reduced(3626, 4709),
Fraction::new_maybe_reduced(2281, 2958),
Fraction::new_maybe_reduced(2526, 3271),
Fraction::new_maybe_reduced(1805, 2334),
Fraction::new_maybe_reduced(1607, 2075),
Fraction::new_maybe_reduced(1517, 1956),
Fraction::new_maybe_reduced(1318, 1697),
Fraction::new_maybe_reduced(6555, 8428),
Fraction::new_maybe_reduced(2314, 2971),
Fraction::new_maybe_reduced(1471, 1886),
Fraction::new_maybe_reduced(2201, 2818),
Fraction::new_maybe_reduced(1454, 1859),
Fraction::new_maybe_reduced(2251, 2874),
Fraction::new_maybe_reduced(13091, 16691),
Fraction::new_maybe_reduced(355, 452),
];