26#ifndef SIM_MATH_SPECIAL_FUNCTIONS_H
27#define SIM_MATH_SPECIAL_FUNCTIONS_H
39#ifndef SIM_DIAGNOSTICS
40#define SIM_DIAGNOSTICS 0
47#ifndef SIM_HAVE_SIMCOMPLEXFLOAT
54#ifndef SIM_HAVE_SIMCOMPLEXDOUBLE
72#ifndef SIM_DIGAMMA_SQUARE_DEFORMATION_DEFAULT
73#define SIM_DIGAMMA_SQUARE_DEFORMATION_DEFAULT 0.25
85double sim_digamma_f64_12(
double x);
86double sim_digamma_f64_7(
double x);
87double sim_digamma_f64_5(
double x);
91float sim_digamma_f32_12(
float x);
92float sim_digamma_f32_7(
float x);
93float sim_digamma_f32_5(
float x);
140double sim_special_digamma(
double x);
155 double inner_radians,
167 double inner_radians,
187double sim_trigamma_f64_12(
double x);
188double sim_trigamma_f64_7(
double x);
189double sim_trigamma_f64_5(
double x);
192float sim_trigamma_f32_12(
float x);
193float sim_trigamma_f32_7(
float x);
194float sim_trigamma_f32_5(
float x);
229#define sim_digamma_f64_speedy sim_digamma_f64_mortici
230#define sim_digamma_f32_speedy sim_digamma_f32_mortici
231#define sim_trigamma_f64_speedy sim_trigamma_f64_mortici
232#define sim_trigamma_f32_speedy sim_trigamma_f32_mortici
235double sim_special_trigamma(
double x);
243double sim_tetragamma_f64_12(
double x);
244double sim_tetragamma_f64_7(
double x);
245double sim_tetragamma_f64_5(
double x);
248float sim_tetragamma_f32_12(
float x);
249float sim_tetragamma_f32_7(
float x);
250float sim_tetragamma_f32_5(
float x);
263double sim_special_tetragamma(
double x);
323double sim_qhyperexp_phi_deriv(
double lambda,
double epsilon,
int K,
double q);
374typedef struct SimSpecialDiagnosticsSnapshot {
375 uint64_t reflection_count;
376 uint64_t recurrence_shift_samples;
377 double max_recurrence_shift;
378 uint64_t stirling_tail_samples;
379 double max_stirling_tail;
380 uint64_t pole_proximity_samples;
381 double min_pole_distance;
382} SimSpecialDiagnosticsSnapshot;
390void sim_special_diagnostics_snapshot(SimSpecialDiagnosticsSnapshot* out,
bool reset);
446SimResult sim_hyperexp_phi_safe(
double lambda,
454SimResult sim_hyperexp_phi_deriv_safe(
double lambda,
515void sim_digamma_mpfr(mpfr_t y,
const mpfr_t x,
const mpfr_t tol);
518void sim_trigamma_mpfr(mpfr_t y,
const mpfr_t x,
const mpfr_t tol);
523void sim_digamma_mpc(mpc_t y,
const mpc_t z,
const mpfr_t tol);
525void sim_trigamma_mpc(mpc_t y,
const mpc_t z,
const mpfr_t tol);
Multidimensional contiguous field abstraction with configurable layout.
SimResult
Return codes shared by libsimcore modules.
Definition field.h:29
double sim_digamma_square_base_real(double amplitude, double inner_radians, SimDigammaBackend backend, double tolerance)
Legacy digamma-square base with the quarter-shift deformation.
SimComplexDouble sim_qhyperexp_phi_complex(SimComplexDouble lambda, SimComplexDouble epsilon, int K, double q)
Experimental complex q-φ and derivative.
SimComplexDouble sim_digamma_c64_mortici(SimComplexDouble z)
Speedy Mortici-style digamma (complex, double).
SimComplexDouble sim_ghn_HK_d1_complex(SimComplexDouble a, int K)
Complex first derivative using trigamma difference.
double sim_q_digamma(double x, double q)
Experimental q-digamma ψ_q(z) with analytic continuation via Jackson series.
double sim_ghn_HK(double a, int K)
Generalized harmonic ladder H_K(a) = Σ_{k=0}^{K-1} 1/(a+k).
double sim_hyperexp_phi_deriv(double lambda, double epsilon, int K)
∂φ/∂λ = [ψ(λ+ε+K) − ψ(λ+ε)] + λ[ψ₁(λ+ε+K) − ψ₁(λ+ε)].
double sim_ghn_HK_d1(double a, int K)
First derivative H'_K(a) = ψ₁(a+K) − ψ₁(a). (Negative for a>0,K>0.)
double sim_trigamma_f64_mortici(double x)
Speedy trigamma (real, double): ψ₁(x) ≈ 1/x + 1/(2x²) + 1/(6x³) for x>0, with reflection+recurrence e...
SimComplexDouble sim_digamma_c64_tail(SimComplexDouble z, double tol)
Complex digamma with adaptive tail.
double sim_digamma_f64_tail(double x, double tol)
Digamma with adaptive tail: run Bernoulli series until |next term| < tol.
double sim_q_number(double x, double q)
Experimental Jackson q-number [x]_q = (1 - q^x) / (1 - q) with stable q→1 limit.
SimComplexDouble sim_q_digamma_complex(SimComplexDouble z, double q)
Experimental complex q-digamma ψ_q(z) for SimComplexDouble argument.
double sim_q_zeta(double s, double a, double q)
Experimental q-zeta (Hurwitz-style) ζ_q(s, a) = Σ_{n>=0} q^{(n+a)(s-1)} / [n+a]_q^s.
double sim_qhyperexp_phi(double lambda, double epsilon, int K, double q)
q-deformed φ_q(λ,ε;K,q) := Σ_{k=0}^{K-1} λ / (λ + ε q^k).
SimDigammaBackend
Backend choice for digamma/trigamma evaluation.
Definition special_functions.h:64
@ SIM_DIGAMMA_BACKEND_5_TAIL
Definition special_functions.h:67
@ SIM_DIGAMMA_BACKEND_7_TAIL
Definition special_functions.h:66
@ SIM_DIGAMMA_BACKEND_ADAPTIVE
Definition special_functions.h:68
@ SIM_DIGAMMA_BACKEND_12_TAIL
Definition special_functions.h:65
@ SIM_DIGAMMA_BACKEND_MORTICI
Definition special_functions.h:69
SimComplexDouble sim_ghn_HK_d2_complex(SimComplexDouble a, int K)
Complex second derivative using tetragamma difference.
SimComplexDouble sim_ghn_HK_complex(SimComplexDouble a, int K)
Complex generalized harmonic ladder using ψ difference.
double sim_digamma_f64_mortici(double x)
Speedy Mortici-style digamma (real, double).
const char * sim_special_fault_name(SimSpecialFault fault)
Convert a fault enum to a human-readable string.
SimSpecialFault
Fault categories for special-function helpers when evaluation fails.
Definition special_functions.h:396
@ SIM_SPECIAL_FAULT_NONE
Definition special_functions.h:397
@ SIM_SPECIAL_FAULT_SINGULARITY
Definition special_functions.h:399
@ SIM_SPECIAL_FAULT_ITERATION_LIMIT
Definition special_functions.h:400
@ SIM_SPECIAL_FAULT_DOMAIN
Definition special_functions.h:398
@ SIM_SPECIAL_FAULT_NUMERIC
Definition special_functions.h:401
double sim_digamma_square_base_deformed_real(double amplitude, double a, double inner_radians, SimDigammaBackend backend, double tolerance)
Deformable digamma-square base using notebook-style shift parameter a.
SimComplexDouble sim_hyperexp_phi_complex(SimComplexDouble lambda, SimComplexDouble epsilon, int K)
Complex φ using the same ψ-difference identity.
float sim_trigamma_f32_mortici(float x)
Speedy trigamma (real, float).
SimComplexDouble sim_trigamma_c64_tail(SimComplexDouble z, double tol)
Trigamma with adaptive tail (complex).
double sim_trigamma_f64_tail(double x, double tol)
Trigamma with adaptive tail (real).
SimComplexDouble sim_q_number_complex(SimComplexDouble z, double q)
Experimental complex Jackson q-number for SimComplexDouble argument.
double sim_ghn_HK_d2(double a, int K)
Second derivative H''_K(a) = ψ₂(a+K) − ψ₂(a). (Positive for a>0,K>0.)
float sim_digamma_f32_mortici(float x)
Speedy Mortici-style digamma (real, float).
double sim_hyperexp_phi(double lambda, double epsilon, int K)
Finite ladder helper φ(λ,ε;K) = Σ_{k=0}^{K-1} λ/(λ+ε+k).
SimResult(* SimSpecialFallbackFn)(void *userdata, const SimSpecialEvalReport *report, SimComplexDouble *value_out)
Callback signature used to provide fallback values on failure.
Definition special_functions.h:420
Explicit in-memory representation for a complex double scalar (re, im)
Definition field.h:175
Fallback ABI-compatible complex float if not in field.h.
Definition special_functions.h:49
float im
Definition special_functions.h:50
Structured report describing why a special-function helper failed.
Definition special_functions.h:407
double exponent_param
Definition special_functions.h:413
double tolerance
Definition special_functions.h:416
SimComplexDouble input
Definition special_functions.h:410
double aux_param
Definition special_functions.h:412
int iteration_count
Definition special_functions.h:414
const char * function
Definition special_functions.h:409
double residual
Definition special_functions.h:415
SimSpecialFault fault
Definition special_functions.h:408
double q_param
Definition special_functions.h:411