pub mod pattern_strings {
pub const PI: &str = "3.141592653589793238462643383279502884197169399375105820974944592307816406286208";
pub const E: &str = "2.718281828459045235360287471352662497757247093699959574966967627724076630353547";
pub const SQRT_2: &str = "1.414213562373095048801688724209698078569671875376948073176679737990732478462107";
pub const LN_2: &str = "0.693147180559945309417232121458176568075500134360255254120680009493393621969694";
pub const PHI: &str = "1.618033988749894848204586834365638117720309179805762862135448622705260462818902";
pub const LN_10: &str = "2.302585092994045684017991454684364207601101488628772976033327900967572609677352";
pub const SQRT_3: &str = "1.732050807568877293527446341505872366942805253810380628055806979451933016908800";
pub const SQRT_5: &str = "2.236067977499789696409173668731276235440618359611525724270897245410520925637804";
}
pub struct MathematicalConstants;
impl MathematicalConstants {
pub fn PI() -> ([u64; 8], [u64; 8]) {
([16879528277178023780, 3875935943307565470, 2286737745937781472, 2, 0, 0, 0, 0], [16683826102159719681, 8370299678927232452, 12471453244769638155, 0, 0, 0, 0, 0])
}
pub fn E() -> ([u64; 8], [u64; 8]) {
([15549786295664299283, 17847673579535346927, 3731277553469026454, 2, 0, 0, 0, 0], [12500633254747468231, 14971085667557169412, 14945016103763502498, 0, 0, 0, 0, 0])
}
pub fn SQRT_2() -> ([u64; 8], [u64; 8]) {
([8244243163236592705, 12035739098855898000, 3890764422566278991, 1, 0, 0, 0, 0], [17273128830610837064, 6299338421866601369, 15795003732528759980, 0, 0, 0, 0, 0])
}
pub fn LN_2() -> ([u64; 8], [u64; 8]) {
([9038192031840200551, 15674841081221099744, 1993300579094989349, 0, 0, 0, 0, 0], [14485735966755992440, 10437720826247320631, 2875724860461440098, 0, 0, 0, 0, 0])
}
pub fn PHI() -> ([u64; 8], [u64; 8]) {
([6975937847948586786, 11114252427560526737, 8235796751627502637, 1, 0, 0, 0, 0], [9715891493880950281, 8395866524443275412, 16490717136264970986, 0, 0, 0, 0, 0])
}
pub fn LN_10() -> ([u64; 8], [u64; 8]) {
([10250914012532030822, 9440446899017872546, 11303204042390417364, 1, 0, 0, 0, 0], [13940729699019027251, 16620772777872615008, 12920238303730258780, 0, 0, 0, 0, 0])
}
pub fn SQRT_3() -> ([u64; 8], [u64; 8]) {
([18198941405764252957, 11494132313148535700, 5012911507814423146, 1, 0, 0, 0, 0], [16854458849668663931, 16924147936517437507, 13544438465088773383, 0, 0, 0, 0, 0])
}
pub fn SQRT_5() -> ([u64; 8], [u64; 8]) {
([3980488381000467866, 4729620701368762973, 11385243475223946497, 1, 0, 0, 0, 0], [12711340960829069201, 14780498250635039176, 13341270412668527126, 0, 0, 0, 0, 0])
}
pub fn EULER_GAMMA() -> ([u64; 8], [u64; 8]) {
([11882717094487321867, 3727855520574179249, 2670882161227486846, 0, 0, 0, 0, 0], [1142102631132684455, 1933268350002864516, 4627182392361288843, 0, 0, 0, 0, 0])
}
pub fn E_SQUARED() -> ([u64; 8], [u64; 8]) {
([7986770191216690061, 7103447143038895726, 8014767408280672384, 0, 0, 0, 0, 0], [1401880492104434429, 17499005525826240779, 1084680817275237031, 0, 0, 0, 0, 0])
}
pub fn GOLDEN_RATIO() -> ([u64; 8], [u64; 8]) {
Self::PHI()
}
pub fn PI_OVER_2() -> ([u64; 8], [u64; 8]) {
([8439764138589011890, 1937967971653782735, 1143368872968890736, 1, 0, 0, 0, 0], [16683826102159719681, 8370299678927232452, 12471453244769638155, 0, 0, 0, 0, 0])
}
pub fn PI_OVER_4() -> ([u64; 8], [u64; 8]) {
([13443254106149281753, 968983985826891367, 9795056473339221176, 0, 0, 0, 0, 0], [16683826102159719681, 8370299678927232452, 12471453244769638155, 0, 0, 0, 0, 0])
}
pub fn PI_OVER_6() -> ([u64; 8], [u64; 8]) {
([8439764138589011890, 1937967971653782735, 1143368872968890736, 1, 0, 0, 0, 0], [13157990159060055811, 6664154963072145742, 520871586889811234, 2, 0, 0, 0, 0])
}
pub fn ONE_OVER_E() -> ([u64; 8], [u64; 8]) {
([12500633254747468231, 14971085667557169412, 14945016103763502498, 0, 0, 0, 0, 0], [15549786295664299283, 17847673579535346927, 3731277553469026454, 2, 0, 0, 0, 0])
}
#[inline]
pub fn extract_i128_from_u64_8(arr: [u64; 8]) -> i128 {
let low = arr[0] as i128;
let high = arr[1] as i128;
low | (high << 64)
}
#[inline]
pub fn extract_u64_4_from_u64_8(arr: [u64; 8]) -> [u64; 4] {
[arr[0], arr[1], arr[2], arr[3]]
}
}