Abstract
We pin down the principal real branches and guard policies for arcsin, arccos, arctan, and arccot when lifted to symbolic numerals (m, a). Each lift acts on the magnitude and carries alignment unchanged. We state domains, ranges, monotonicity, endpoint behavior, collapse checks, and stable evaluation identities suitable for numerical guards. Under collapse phi(m,a) = m, all formulas reduce to the classical inverse trigonometric functions.
Principal real branches (classical reference)
arcsin: domain [-1, 1], range [-pi/2, +pi/2], strictly increasing
arccos: domain [-1, 1], range [0, pi], strictly decreasing
arctan: domain R, range (-pi/2, +pi/2), strictly increasing
arccot (principal): domain R, range (0, pi), strictly decreasing
Notes:
- arcsin(0) = 0, arccos(1) = 0, arctan(0) = 0.
- arccot is continuous and decreases from pi (as m -> -inf) to 0 (as m -> +inf) on the principal branch.
- Endpoints: arcsin(+-1) = +-pi/2; arccos(+-1) = {0, pi}; arctan has vertical asymptotes at +-pi/2.
Symbolic lifts (alignment carry)
For x = (m, a):
arcsin*(m, a) = ( arcsin(m) , a ) for m in [-1, 1]
arccos*(m, a) = ( arccos(m) , a ) for m in [-1, 1]
arctan*(m, a) = ( arctan(m) , a ) for m in R
arccot*(m, a) = ( arccot(m) , a ) for m in R (principal branch with range (0, pi))
Alignment is carried unchanged because each is a unary magnitude map.
Collapse and order
Collapse check: phi( f*(m, a) ) = f(m) for f in {arcsin, arccos, arctan, arccot}.
Magnitude-order rules on the stated domains:
- Increasing maps (arcsin, arctan): if m1 <= m2 then f(m1) <= f(m2).
- Decreasing maps (arccos, arccot): if m1 <= m2 then f(m1) >= f(m2).
Order claims for arccos and arccot are branchwise on their principal ranges.
Endpoint behavior and monotonicity
- arcsin: strictly increasing; arcsin(-1) = -pi/2, arcsin(0) = 0, arcsin(1) = +pi/2.
- arccos: strictly decreasing; arccos(-1) = pi, arccos(1) = 0.
- arctan: strictly increasing; arctan(m) -> +pi/2 as m -> +inf, and -> -pi/2 as m -> -inf.
- arccot (principal): strictly decreasing; arccot(m) -> 0 as m -> +inf, and -> pi as m -> -inf.
Domain and branch guard policies (manifest recommendations)
domain_guard:
- arcsin*, arccos*: “error” for |m| > 1 (default). Optional: “clamp_to_edge” for visualizations only (map to +-1).
- arctan*, arccot*: defined on R; no domain error on reals.
branch: - arccot*.branch = “principal_(0,pi)” (default). Alternative branches must be explicitly declared and documented.
zero_policy: - If the result magnitude is exactly 0 (e.g., arcsin(0) or arctan(0)), record (0, +1).
Stable numerics and identities (ASCII)
Prefer identities that avoid catastrophic cancellation near endpoints and large |m|:
- arctan: use standard arctan with argument reduction
For |m| > 1: arctan(m) = sign(m) * (pi/2) – arctan( 1/|m| ) - arcsin and arccos via arctan2-style formulas (principal real values)
Let r = sqrt( max(0, 1 – m^2) ). Then for m in [-1, 1]:
arcsin(m) = arctan2( m, r )
arccos(m) = arctan2( r, m )
If arctan2 is unavailable, use guarded single-arg fallbacks:
arcsin(m) = arctan( m / max(r, eps) ) with a quadrant fix when m < 0 and r small
arccos(m) = arctan( max(r, eps) / m ) with range-mapping into [0, pi] - arccot (principal) via arctan
arccot(m) = arctan( 1/m ) for m != 0, then map into (0, pi):
if m > 0: arccot(m) in (0, pi/2)
if m < 0: arccot(m) in (pi/2, pi)
At m = 0 define arccot(0) = pi/2 on the principal branch.
Robust alternative: arccot(m) = arctan2( 1, m ) with range (0, pi).
Numerical notes:
- Use hypot-style sqrt for r = sqrt(1 – m^2) to reduce loss near |m| ~ 1.
- For arctan reductions, switch at a threshold (e.g., |m| > 1) to maintain accuracy.
Worked examples
A) Valid interior points (alignment carry).
x1 = ( 0.5, 0.7 ) -> arcsin*(x1) = ( arcsin(0.5), 0.7 ) = ( pi/6, 0.7 ) approx ( 0.5236, 0.7 )
x2 = ( 0.5, 0.7 ) -> arccos*(x2) = ( arccos(0.5), 0.7 ) = ( pi/3, 0.7 ) approx ( 1.0472, 0.7 )
B) Large magnitude for arctan (reduction).
y = ( 20, -0.4 )
arctan*(y) = ( arctan(20), -0.4 ) = ( pi/2 – arctan(1/20), -0.4 )
Numerically approx ( 1.5208, -0.4 )
C) Principal arccot at zero and signs.
w1 = ( 0, 0.2 ) -> arccot*(w1) = ( pi/2, 0.2 ) approx ( 1.5708, 0.2 )
w2 = ( -3, 0.2 ) -> arccot*(w2) in (pi/2, pi): arctan(1/(-3)) = negative small; map to pi – arctan(1/3)
arccot*(w2) approx ( 2.8198, 0.2 )
D) Domain guard for arcsin/arccos.
z = ( 1.2, 0.5 )
arcsin*(z) => domain_guard policy (|m| > 1)
arccos*(z) => domain_guard policy (|m| > 1)
Implementation notes (manifest)
inverse_trig.branch = { arccot: “principal_(0,pi)” }
domain_guard = { arcsin: “error”, arccos: “error”, arctan: “allow”, arccot: “allow” }
atan.reduction_threshold = 1.0
use_arctan2 = true_if_available
sqrt_guard = “hypot_style”
zero_policy = “canonical_zero”
report_ranges = true
Takeaway
Inverse trigonometric lifts act on magnitudes and carry alignment unchanged. With principal real branches fixed and domain guards explicit, order and endpoint behavior are classical on the magnitude channel. Stable identities (arctan reduction and arctan2-based arcsin/arccos) provide robust numerics near endpoints and large |m|. Collapse returns the standard inverse trig functions exactly.
Navigation
Previous -> Inverse trigonometric functions (2.33)
Next -> Inverse trigonometric functions — atan2 and signed-angle lift (2.33B)
Disclaimer
Observation only. Results reproduce mathematically; domain claims require independent peer review. Defaults: use principal real branches; domain_guard as stated; eps > 0 for guards; |a| < 1. All formulas are presented in plain text. Collapse uses phi(m,a) = m.