From 7f1ff2d648f3c7aea8196ac19b60d6481f520ddd Mon Sep 17 00:00:00 2001 From: Neven Sajko Date: Mon, 5 Jan 2026 21:21:28 +0100 Subject: [PATCH 1/3] position: PSA: apply the double-angle sine formula Apply the double-angle sine formula: ``` sin(2 * x) = 2 * sin(x) * cos(x) ``` The idea is: * `sin(x)` and `sin(2 * x)` both appear as subexpressions within the same expression * computing `sin(x)` and `cos(x)` could conceivably be faster than computing directly `sin(x)` and `sin(2 * x)`, because `sin(x)` and `cos(x)` use the same polynomials in their implementations * this relies on the compiler being smart enough * this perhaps also relies on luck regarding things like inlining heuristics --- src/Positioning/psa.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Positioning/psa.jl b/src/Positioning/psa.jl index aca92e1..427f933 100644 --- a/src/Positioning/psa.jl +++ b/src/Positioning/psa.jl @@ -79,7 +79,8 @@ function _solar_position(obs::Observer{T}, dt::DateTime, alg::PSA) where {T} L = p3 + p4 * n # Eq. 4 g = p5 + p6 * n # Eq. 5 (sin_Ω, cos_Ω) = sincos(Ω) - λₑ = L + p7 * sin(g) + p8 * sin(2 * g) + p9 + p10 * sin_Ω # Eq. 6 + (sin_g, cos_g) = sincos(g) + λₑ = L + p7 * sin_g + (p8 * 2) * (sin_g * cos_g) + p9 + p10 * sin_Ω # Eq. 6 ϵ = p11 + p12 * n + p13 * cos_Ω # Eq. 7 # celestial right ascension (ra) and declination (d) From 871f8cbef2ba3013f862aae2f4ef721b9a194329 Mon Sep 17 00:00:00 2001 From: Neven Sajko <4944410+nsajko@users.noreply.github.com> Date: Thu, 15 Jan 2026 08:42:42 +0100 Subject: [PATCH 2/3] factor out `sin_g` --- src/Positioning/psa.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Positioning/psa.jl b/src/Positioning/psa.jl index 427f933..eeed9d9 100644 --- a/src/Positioning/psa.jl +++ b/src/Positioning/psa.jl @@ -80,7 +80,7 @@ function _solar_position(obs::Observer{T}, dt::DateTime, alg::PSA) where {T} g = p5 + p6 * n # Eq. 5 (sin_Ω, cos_Ω) = sincos(Ω) (sin_g, cos_g) = sincos(g) - λₑ = L + p7 * sin_g + (p8 * 2) * (sin_g * cos_g) + p9 + p10 * sin_Ω # Eq. 6 + λₑ = L + sin_g * (p7+ (p8 * 2) * cos_g) + p9 + p10 * sin_Ω # Eq. 6 ϵ = p11 + p12 * n + p13 * cos_Ω # Eq. 7 # celestial right ascension (ra) and declination (d) From e94454a2325139b2c41f2a1d5fc8d07339c70018 Mon Sep 17 00:00:00 2001 From: Neven Sajko Date: Thu, 15 Jan 2026 08:50:34 +0100 Subject: [PATCH 3/3] reformat, first automatically, then manually, sigh --- src/Positioning/psa.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Positioning/psa.jl b/src/Positioning/psa.jl index eeed9d9..748d36d 100644 --- a/src/Positioning/psa.jl +++ b/src/Positioning/psa.jl @@ -80,7 +80,7 @@ function _solar_position(obs::Observer{T}, dt::DateTime, alg::PSA) where {T} g = p5 + p6 * n # Eq. 5 (sin_Ω, cos_Ω) = sincos(Ω) (sin_g, cos_g) = sincos(g) - λₑ = L + sin_g * (p7+ (p8 * 2) * cos_g) + p9 + p10 * sin_Ω # Eq. 6 + λₑ = L + sin_g * (p7+(p8 * 2) * cos_g) + p9 + p10 * sin_Ω # Eq. 6 ϵ = p11 + p12 * n + p13 * cos_Ω # Eq. 7 # celestial right ascension (ra) and declination (d)