Skip to content

Conversation

@nsajko
Copy link
Contributor

@nsajko nsajko commented Jan 5, 2026

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(::Float64) and cos(::Float64) 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

Checklist

  • I am following the contributing guidelines
  • Tests are passing
  • Lint workflow is passing
  • Docs were updated and workflow is passing

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
@github-actions
Copy link

github-actions bot commented Jan 5, 2026

Benchmark Results (Julia vlts)

Time benchmarks
main e94454a... main / e94454a...
ours/n=100/NOAA 0.0433 ± 0.0011 ms 0.042 ± 0.0005 ms 1.03 ± 0.028
ours/n=100/PSA 18.4 ± 1.7 μs 18.6 ± 1.7 μs 0.99 ± 0.13
ours/n=100/SPA 0.295 ± 0.0075 ms 0.296 ± 0.007 ms 0.995 ± 0.034
ours/n=100/USNO 0.0398 ± 0.00027 ms 0.0399 ± 0.00028 ms 0.997 ± 0.0098
ours/n=100/Walraven 18.9 ± 0.089 μs 19.1 ± 0.19 μs 0.993 ± 0.011
ours/n=1000/NOAA 0.408 ± 0.0077 ms 0.408 ± 0.0076 ms 0.998 ± 0.027
ours/n=1000/PSA 0.169 ± 0.00094 ms 0.17 ± 0.00089 ms 0.993 ± 0.0076
ours/n=1000/SPA 3 ± 0.0059 ms 3.01 ± 0.0041 ms 0.995 ± 0.0024
ours/n=1000/USNO 0.386 ± 0.0076 ms 0.386 ± 0.0074 ms 1 ± 0.027
ours/n=1000/Walraven 0.19 ± 0.0077 ms 0.19 ± 0.0076 ms 1 ± 0.057
ours/n=10000/NOAA 4.12 ± 0.0099 ms 4.12 ± 0.012 ms 0.999 ± 0.0038
ours/n=10000/PSA 1.69 ± 0.0065 ms 1.69 ± 0.0065 ms 0.998 ± 0.0054
ours/n=10000/SPA 30.1 ± 0.17 ms 30.3 ± 0.14 ms 0.995 ± 0.0071
ours/n=10000/USNO 3.88 ± 0.0071 ms 3.88 ± 0.011 ms 0.999 ± 0.0033
ours/n=10000/Walraven 1.93 ± 0.0051 ms 1.92 ± 0.0057 ms 1 ± 0.004
ours/n=100000/NOAA 0.042 ± 0.00011 s 0.042 ± 9.6e-05 s 1 ± 0.0035
ours/n=100000/PSA 17 ± 0.04 ms 17 ± 0.033 ms 0.998 ± 0.0031
ours/n=100000/SPA 0.303 ± 0.0019 s 0.304 ± 0.0014 s 0.996 ± 0.0079
ours/n=100000/USNO 0.0396 ± 7.5e-05 s 0.0392 ± 6.5e-05 s 1.01 ± 0.0025
ours/n=100000/Walraven 19.4 ± 0.032 ms 19.4 ± 0.037 ms 1 ± 0.0026
refraction/ARCHER 0.24 ± 0.01 μs 0.231 ± 0.01 μs 1.04 ± 0.062
refraction/BENNETT 0.23 ± 0.001 μs 0.23 ± 0.001 μs 1 ± 0.0061
refraction/MICHALSKY 0.2 ± 0.001 μs 0.2 ± 0.01 μs 1 ± 0.05
refraction/NoRefraction 0.2 ± 0.01 μs 0.19 ± 0.001 μs 1.05 ± 0.053
refraction/SG2 0.241 ± 0.01 μs 0.24 ± 0.001 μs 1 ± 0.042
single/NOAA 0.451 ± 0.01 μs 0.441 ± 0.01 μs 1.02 ± 0.032
single/PSA 0.2 ± 0.01 μs 0.19 ± 0.001 μs 1.05 ± 0.053
single/SPA 2.98 ± 0.011 μs 3.1 ± 0.08 μs 0.961 ± 0.025
single/USNO 0.411 ± 0 μs 0.411 ± 0 μs 1 ± 0
single/Walraven 0.23 ± 0.001 μs 0.221 ± 0.01 μs 1.04 ± 0.047
solposx/n=100/NOAA 3.76 ± 0.051 ms 3.78 ± 0.052 ms 0.993 ± 0.019
solposx/n=100/PSA 2.65 ± 0.048 ms 2.69 ± 0.04 ms 0.983 ± 0.023
solposx/n=100/SPA 3.08 ± 0.031 ms 3.04 ± 0.028 ms 1.01 ± 0.014
solposx/n=100/USNO 2.9 ± 0.036 ms 2.89 ± 0.034 ms 1 ± 0.017
solposx/n=100/Walraven 1.1 ± 0.019 ms 1.11 ± 0.017 ms 0.992 ± 0.023
solposx/n=1000/NOAA 4.47 ± 0.094 ms 4.48 ± 0.071 ms 0.999 ± 0.026
solposx/n=1000/PSA 3.08 ± 0.048 ms 3.09 ± 0.042 ms 0.996 ± 0.021
solposx/n=1000/SPA 7.73 ± 0.12 ms 7.64 ± 0.1 ms 1.01 ± 0.021
solposx/n=1000/USNO 6.84 ± 0.24 ms 6.73 ± 0.24 ms 1.02 ± 0.05
solposx/n=1000/Walraven 1.39 ± 0.027 ms 1.4 ± 0.028 ms 0.991 ± 0.027
solposx/n=10000/NOAA 10.7 ± 0.19 ms 10.5 ± 0.17 ms 1.02 ± 0.025
solposx/n=10000/PSA 6.61 ± 0.13 ms 6.58 ± 0.12 ms 1 ± 0.028
solposx/n=10000/SPA 0.051 ± 0.0002 s 0.0512 ± 0.00034 s 0.996 ± 0.0077
solposx/n=10000/USNO 0.0456 ± 0.002 s 0.0447 ± 0.0016 s 1.02 ± 0.058
solposx/n=10000/Walraven 4.05 ± 0.067 ms 4.02 ± 0.057 ms 1.01 ± 0.022
solposx/n=100000/NOAA 0.0679 ± 0.00077 s 0.0668 ± 0.00064 s 1.02 ± 0.015
solposx/n=100000/PSA 0.0399 ± 0.00068 s 0.0397 ± 0.00064 s 1 ± 0.024
solposx/n=100000/SPA 0.49 ± 0.0038 s 0.486 ± 0.0039 s 1.01 ± 0.011
solposx/n=100000/USNO 0.445 ± 0.014 s 0.436 ± 0.012 s 1.02 ± 0.043
solposx/n=100000/Walraven 29.9 ± 0.41 ms 29.7 ± 0.29 ms 1.01 ± 0.017
time_to_load 0.17 ± 0.0073 s 0.166 ± 0.0025 s 1.02 ± 0.047
Memory benchmarks
main e94454a... main / e94454a...
ours/n=100/NOAA 5 allocs: 4.38 kB 5 allocs: 4.38 kB 1
ours/n=100/PSA 3 allocs: 2.62 kB 3 allocs: 2.62 kB 1
ours/n=100/SPA 5 allocs: 4.38 kB 5 allocs: 4.38 kB 1
ours/n=100/USNO 3 allocs: 2.62 kB 3 allocs: 2.62 kB 1
ours/n=100/Walraven 3 allocs: 2.62 kB 3 allocs: 2.62 kB 1
ours/n=1000/NOAA 5 allocs: 0.0388 MB 5 allocs: 0.0388 MB 1
ours/n=1000/PSA 3 allocs: 23.8 kB 3 allocs: 23.8 kB 1
ours/n=1000/SPA 5 allocs: 0.0388 MB 5 allocs: 0.0388 MB 1
ours/n=1000/USNO 3 allocs: 23.8 kB 3 allocs: 23.8 kB 1
ours/n=1000/Walraven 3 allocs: 23.8 kB 3 allocs: 23.8 kB 1
ours/n=10000/NOAA 10 allocs: 0.382 MB 10 allocs: 0.382 MB 1
ours/n=10000/PSA 6 allocs: 0.229 MB 6 allocs: 0.229 MB 1
ours/n=10000/SPA 10 allocs: 0.382 MB 10 allocs: 0.382 MB 1
ours/n=10000/USNO 6 allocs: 0.229 MB 6 allocs: 0.229 MB 1
ours/n=10000/Walraven 6 allocs: 0.229 MB 6 allocs: 0.229 MB 1
ours/n=100000/NOAA 10 allocs: 3.81 MB 10 allocs: 3.81 MB 1
ours/n=100000/PSA 6 allocs: 2.29 MB 6 allocs: 2.29 MB 1
ours/n=100000/SPA 10 allocs: 3.81 MB 10 allocs: 3.81 MB 1
ours/n=100000/USNO 6 allocs: 2.29 MB 6 allocs: 2.29 MB 1
ours/n=100000/Walraven 6 allocs: 2.29 MB 6 allocs: 2.29 MB 1
refraction/ARCHER 0 allocs: 0 B 0 allocs: 0 B
refraction/BENNETT 0 allocs: 0 B 0 allocs: 0 B
refraction/MICHALSKY 0 allocs: 0 B 0 allocs: 0 B
refraction/NoRefraction 0 allocs: 0 B 0 allocs: 0 B
refraction/SG2 0 allocs: 0 B 0 allocs: 0 B
single/NOAA 0 allocs: 0 B 0 allocs: 0 B
single/PSA 0 allocs: 0 B 0 allocs: 0 B
single/SPA 0 allocs: 0 B 0 allocs: 0 B
single/USNO 0 allocs: 0 B 0 allocs: 0 B
single/Walraven 0 allocs: 0 B 0 allocs: 0 B
solposx/n=100/NOAA 25 allocs: 0.828 kB 25 allocs: 0.828 kB 1
solposx/n=100/PSA 0.06 k allocs: 1.66 kB 0.06 k allocs: 1.66 kB 1
solposx/n=100/SPA 25 allocs: 0.828 kB 25 allocs: 0.828 kB 1
solposx/n=100/USNO 25 allocs: 0.828 kB 25 allocs: 0.828 kB 1
solposx/n=100/Walraven 25 allocs: 0.828 kB 25 allocs: 0.828 kB 1
solposx/n=1000/NOAA 25 allocs: 0.828 kB 25 allocs: 0.828 kB 1
solposx/n=1000/PSA 0.06 k allocs: 1.66 kB 0.06 k allocs: 1.66 kB 1
solposx/n=1000/SPA 25 allocs: 0.828 kB 25 allocs: 0.828 kB 1
solposx/n=1000/USNO 25 allocs: 0.828 kB 25 allocs: 0.828 kB 1
solposx/n=1000/Walraven 25 allocs: 0.828 kB 25 allocs: 0.828 kB 1
solposx/n=10000/NOAA 25 allocs: 0.828 kB 25 allocs: 0.828 kB 1
solposx/n=10000/PSA 0.06 k allocs: 1.66 kB 0.06 k allocs: 1.66 kB 1
solposx/n=10000/SPA 25 allocs: 0.828 kB 25 allocs: 0.828 kB 1
solposx/n=10000/USNO 25 allocs: 0.828 kB 25 allocs: 0.828 kB 1
solposx/n=10000/Walraven 25 allocs: 0.828 kB 25 allocs: 0.828 kB 1
solposx/n=100000/NOAA 25 allocs: 0.828 kB 25 allocs: 0.828 kB 1
solposx/n=100000/PSA 0.06 k allocs: 1.66 kB 0.06 k allocs: 1.66 kB 1
solposx/n=100000/SPA 25 allocs: 0.828 kB 25 allocs: 0.828 kB 1
solposx/n=100000/USNO 25 allocs: 0.828 kB 25 allocs: 0.828 kB 1
solposx/n=100000/Walraven 25 allocs: 0.828 kB 25 allocs: 0.828 kB 1
time_to_load 0.153 k allocs: 14.5 kB 0.153 k allocs: 14.5 kB 1

@github-actions
Copy link

github-actions bot commented Jan 5, 2026

Benchmark Results (Julia vpre)

Time benchmarks
main e94454a... main / e94454a...
ours/n=100/NOAA 0.0419 ± 0.00047 ms 0.042 ± 0.00044 ms 0.998 ± 0.015
ours/n=100/PSA 17.9 ± 0.32 μs 17.3 ± 0.38 μs 1.03 ± 0.029
ours/n=100/SPA 0.392 ± 0.0051 ms 0.392 ± 0.0052 ms 0.999 ± 0.019
ours/n=100/USNO 0.039 ± 0.00075 ms 0.0391 ± 0.00057 ms 0.997 ± 0.024
ours/n=100/Walraven 20.2 ± 0.23 μs 20.1 ± 0.18 μs 1 ± 0.015
ours/n=1000/NOAA 0.407 ± 0.0063 ms 0.409 ± 0.0065 ms 0.995 ± 0.022
ours/n=1000/PSA 0.179 ± 0.0049 ms 0.172 ± 0.0048 ms 1.04 ± 0.041
ours/n=1000/SPA 3.98 ± 0.015 ms 3.99 ± 0.014 ms 0.998 ± 0.0052
ours/n=1000/USNO 0.381 ± 0.0058 ms 0.385 ± 0.0052 ms 0.992 ± 0.02
ours/n=1000/Walraven 0.203 ± 0.0045 ms 0.202 ± 0.004 ms 1.01 ± 0.03
ours/n=10000/NOAA 4.09 ± 0.045 ms 4.11 ± 0.04 ms 0.996 ± 0.015
ours/n=10000/PSA 1.75 ± 0.017 ms 1.71 ± 0.026 ms 1.03 ± 0.019
ours/n=10000/SPA 0.0402 ± 0.00013 s 0.0402 ± 0.00011 s 1 ± 0.0042
ours/n=10000/USNO 3.84 ± 0.035 ms 3.85 ± 0.03 ms 0.998 ± 0.012
ours/n=10000/Walraven 2.02 ± 0.016 ms 2.01 ± 0.012 ms 1 ± 0.0097
ours/n=100000/NOAA 0.0421 ± 0.0012 s 0.0422 ± 0.00092 s 0.997 ± 0.035
ours/n=100000/PSA 17.7 ± 0.71 ms 17.3 ± 0.71 ms 1.03 ± 0.059
ours/n=100000/SPA 0.404 ± 0.00055 s 0.405 ± 0.00062 s 0.997 ± 0.0021
ours/n=100000/USNO 0.039 ± 0.00067 s 0.0391 ± 0.00071 s 0.998 ± 0.025
ours/n=100000/Walraven 20.3 ± 0.74 ms 20.3 ± 0.75 ms 1 ± 0.052
refraction/ARCHER 0.242 ± 0.002 μs 0.239 ± 0.002 μs 1.01 ± 0.012
refraction/BENNETT 0.24 ± 0.002 μs 0.238 ± 0.002 μs 1.01 ± 0.012
refraction/MICHALSKY 0.201 ± 0.002 μs 0.198 ± 0.002 μs 1.02 ± 0.014
refraction/NoRefraction 0.198 ± 0.002 μs 0.195 ± 0.002 μs 1.02 ± 0.015
refraction/SG2 0.255 ± 0.002 μs 0.25 ± 0.003 μs 1.02 ± 0.015
single/NOAA 0.442 ± 0.006 μs 0.449 ± 0.006 μs 0.984 ± 0.019
single/PSA 0.198 ± 0.002 μs 0.195 ± 0.002 μs 1.02 ± 0.015
single/SPA 3.91 ± 0.073 μs 3.82 ± 0.058 μs 1.02 ± 0.025
single/USNO 0.407 ± 0.005 μs 0.428 ± 0.004 μs 0.951 ± 0.015
single/Walraven 0.238 ± 0.002 μs 0.238 ± 0.002 μs 1 ± 0.012
solposx/n=100/NOAA 3.46 ± 0.2 ms 3.44 ± 0.13 ms 1.01 ± 0.07
solposx/n=100/PSA 2.45 ± 0.11 ms 2.37 ± 0.076 ms 1.03 ± 0.059
solposx/n=100/SPA 3.08 ± 0.17 ms 3.14 ± 0.14 ms 0.983 ± 0.07
solposx/n=100/USNO 2.68 ± 0.16 ms 2.74 ± 0.12 ms 0.978 ± 0.072
solposx/n=100/Walraven 0.97 ± 0.1 ms 0.99 ± 0.093 ms 0.98 ± 0.14
solposx/n=1000/NOAA 4.18 ± 0.19 ms 4.18 ± 0.15 ms 1 ± 0.059
solposx/n=1000/PSA 2.64 ± 0.11 ms 2.64 ± 0.078 ms 0.999 ± 0.05
solposx/n=1000/SPA 7.41 ± 0.22 ms 7.09 ± 0.19 ms 1.04 ± 0.042
solposx/n=1000/USNO 6.86 ± 0.32 ms 6.92 ± 0.49 ms 0.992 ± 0.084
solposx/n=1000/Walraven 1.32 ± 0.075 ms 1.29 ± 0.085 ms 1.03 ± 0.089
solposx/n=10000/NOAA 10.5 ± 0.63 ms 10.3 ± 0.56 ms 1.02 ± 0.082
solposx/n=10000/PSA 6.22 ± 0.27 ms 5.87 ± 0.53 ms 1.06 ± 0.11
solposx/n=10000/SPA 0.0441 ± 0.00068 s 0.0417 ± 0.00052 s 1.06 ± 0.021
solposx/n=10000/USNO 0.0458 ± 0.0025 s 0.0453 ± 0.0017 s 1.01 ± 0.067
solposx/n=10000/Walraven 3.87 ± 0.27 ms 3.58 ± 0.15 ms 1.08 ± 0.087
solposx/n=100000/NOAA 0.0752 ± 0.0023 s 0.0813 ± 0.0032 s 0.925 ± 0.046
solposx/n=100000/PSA 0.0414 ± 0.0017 s 0.0407 ± 0.0015 s 1.02 ± 0.056
solposx/n=100000/SPA 0.472 ± 0.011 s 0.483 ± 0.011 s 0.979 ± 0.032
solposx/n=100000/USNO 0.442 ± 0.014 s 0.453 ± 0.028 s 0.976 ± 0.067
solposx/n=100000/Walraven 31.4 ± 1.7 ms 0.032 ± 0.0022 s 0.98 ± 0.085
time_to_load 0.131 ± 0.007 s 0.121 ± 0.0048 s 1.08 ± 0.072
Memory benchmarks
main e94454a... main / e94454a...
ours/n=100/NOAA 10 allocs: 4.53 kB 10 allocs: 4.53 kB 1
ours/n=100/PSA 6 allocs: 2.72 kB 6 allocs: 2.72 kB 1
ours/n=100/SPA 10 allocs: 4.53 kB 10 allocs: 4.53 kB 1
ours/n=100/USNO 6 allocs: 2.72 kB 6 allocs: 2.72 kB 1
ours/n=100/Walraven 6 allocs: 2.72 kB 6 allocs: 2.72 kB 1
ours/n=1000/NOAA 15 allocs: 0.0385 MB 15 allocs: 0.0385 MB 1
ours/n=1000/PSA 9 allocs: 23.6 kB 9 allocs: 23.6 kB 1
ours/n=1000/SPA 15 allocs: 0.0385 MB 15 allocs: 0.0385 MB 1
ours/n=1000/USNO 9 allocs: 23.6 kB 9 allocs: 23.6 kB 1
ours/n=1000/Walraven 9 allocs: 23.6 kB 9 allocs: 23.6 kB 1
ours/n=10000/NOAA 15 allocs: 0.382 MB 15 allocs: 0.382 MB 1
ours/n=10000/PSA 9 allocs: 0.229 MB 9 allocs: 0.229 MB 1
ours/n=10000/SPA 15 allocs: 0.382 MB 15 allocs: 0.382 MB 1
ours/n=10000/USNO 9 allocs: 0.229 MB 9 allocs: 0.229 MB 1
ours/n=10000/Walraven 9 allocs: 0.229 MB 9 allocs: 0.229 MB 1
ours/n=100000/NOAA 15 allocs: 3.82 MB 15 allocs: 3.82 MB 1
ours/n=100000/PSA 9 allocs: 2.29 MB 9 allocs: 2.29 MB 1
ours/n=100000/SPA 15 allocs: 3.82 MB 15 allocs: 3.82 MB 1
ours/n=100000/USNO 9 allocs: 2.29 MB 9 allocs: 2.29 MB 1
ours/n=100000/Walraven 9 allocs: 2.29 MB 9 allocs: 2.29 MB 1
refraction/ARCHER 0 allocs: 0 B 0 allocs: 0 B
refraction/BENNETT 0 allocs: 0 B 0 allocs: 0 B
refraction/MICHALSKY 0 allocs: 0 B 0 allocs: 0 B
refraction/NoRefraction 0 allocs: 0 B 0 allocs: 0 B
refraction/SG2 0 allocs: 0 B 0 allocs: 0 B
single/NOAA 0 allocs: 0 B 0 allocs: 0 B
single/PSA 0 allocs: 0 B 0 allocs: 0 B
single/SPA 0 allocs: 0 B 0 allocs: 0 B
single/USNO 0 allocs: 0 B 0 allocs: 0 B
single/Walraven 0 allocs: 0 B 0 allocs: 0 B
solposx/n=100/NOAA 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=100/PSA 0.037 k allocs: 1.17 kB 0.037 k allocs: 1.17 kB 1
solposx/n=100/SPA 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=100/USNO 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=100/Walraven 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=1000/NOAA 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=1000/PSA 0.037 k allocs: 1.17 kB 0.037 k allocs: 1.17 kB 1
solposx/n=1000/SPA 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=1000/USNO 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=1000/Walraven 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=10000/NOAA 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=10000/PSA 0.037 k allocs: 1.17 kB 0.037 k allocs: 1.17 kB 1
solposx/n=10000/SPA 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=10000/USNO 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=10000/Walraven 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=100000/NOAA 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=100000/PSA 0.037 k allocs: 1.17 kB 0.037 k allocs: 1.17 kB 1
solposx/n=100000/SPA 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=100000/USNO 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=100000/Walraven 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
time_to_load 0.217 k allocs: 13.5 kB 0.217 k allocs: 13.5 kB 1

@github-actions
Copy link

github-actions bot commented Jan 5, 2026

Benchmark Results (Julia v1)

Time benchmarks
main e94454a... main / e94454a...
ours/n=100/NOAA 0.0423 ± 0.00026 ms 0.0421 ± 0.00025 ms 1.01 ± 0.0086
ours/n=100/PSA 16.6 ± 0.19 μs 16.7 ± 0.16 μs 0.995 ± 0.015
ours/n=100/SPA 0.31 ± 0.0072 ms 0.312 ± 0.0076 ms 0.993 ± 0.033
ours/n=100/USNO 0.0398 ± 0.00022 ms 0.0401 ± 0.00018 ms 0.994 ± 0.007
ours/n=100/Walraven 19.5 ± 0.49 μs 19.5 ± 0.48 μs 0.999 ± 0.035
ours/n=1000/NOAA 0.413 ± 0.0074 ms 0.412 ± 0.0076 ms 1 ± 0.026
ours/n=1000/PSA 0.166 ± 0.0011 ms 0.166 ± 0.0073 ms 0.997 ± 0.044
ours/n=1000/SPA 3.17 ± 0.0073 ms 3.19 ± 0.016 ms 0.993 ± 0.0056
ours/n=1000/USNO 0.385 ± 0.0071 ms 0.388 ± 0.0074 ms 0.992 ± 0.026
ours/n=1000/Walraven 0.194 ± 0.0074 ms 0.195 ± 0.0082 ms 0.997 ± 0.057
ours/n=10000/NOAA 4.16 ± 0.012 ms 4.15 ± 0.01 ms 1 ± 0.0038
ours/n=10000/PSA 1.66 ± 0.013 ms 1.65 ± 0.0075 ms 1 ± 0.0089
ours/n=10000/SPA 0.0319 ± 9.4e-05 s 0.0322 ± 0.00013 s 0.991 ± 0.0048
ours/n=10000/USNO 3.91 ± 0.012 ms 3.91 ± 0.0079 ms 0.999 ± 0.0037
ours/n=10000/Walraven 1.97 ± 0.016 ms 1.97 ± 0.0086 ms 1 ± 0.0094
ours/n=100000/NOAA 0.0425 ± 0.00036 s 0.0423 ± 0.00045 s 1 ± 0.014
ours/n=100000/PSA 16.7 ± 0.31 ms 16.7 ± 0.27 ms 1 ± 0.025
ours/n=100000/SPA 0.32 ± 0.00074 s 0.323 ± 0.0015 s 0.99 ± 0.0051
ours/n=100000/USNO 0.0393 ± 0.00025 s 0.0394 ± 0.00033 s 0.998 ± 0.011
ours/n=100000/Walraven 19.9 ± 0.31 ms 19.9 ± 0.34 ms 1 ± 0.023
refraction/ARCHER 0.23 ± 0.001 μs 0.23 ± 0.001 μs 1 ± 0.0061
refraction/BENNETT 0.23 ± 0.001 μs 0.25 ± 0.011 μs 0.92 ± 0.041
refraction/MICHALSKY 0.191 ± 0.01 μs 0.191 ± 0.01 μs 1 ± 0.074
refraction/NoRefraction 0.19 ± 0.001 μs 0.19 ± 0.001 μs 1 ± 0.0074
refraction/SG2 0.241 ± 0.01 μs 0.25 ± 0.01 μs 0.964 ± 0.056
single/NOAA 0.46 ± 0.01 μs 0.451 ± 0 μs 1.02 ± 0.022
single/PSA 0.19 ± 0.001 μs 0.19 ± 0.001 μs 1 ± 0.0074
single/SPA 3.14 ± 0.02 μs 3.16 ± 0.02 μs 0.994 ± 0.0089
single/USNO 0.411 ± 0.01 μs 0.421 ± 0.001 μs 0.976 ± 0.024
single/Walraven 0.231 ± 0.001 μs 0.231 ± 0.001 μs 1 ± 0.0061
solposx/n=100/NOAA 3.81 ± 0.051 ms 3.64 ± 0.044 ms 1.05 ± 0.019
solposx/n=100/PSA 2.74 ± 0.045 ms 2.63 ± 0.038 ms 1.04 ± 0.023
solposx/n=100/SPA 3.08 ± 0.023 ms 3.09 ± 0.02 ms 0.997 ± 0.0098
solposx/n=100/USNO 2.87 ± 0.043 ms 2.82 ± 0.031 ms 1.02 ± 0.019
solposx/n=100/Walraven 1.12 ± 0.018 ms 1.08 ± 0.015 ms 1.04 ± 0.022
solposx/n=1000/NOAA 4.36 ± 0.062 ms 4.37 ± 0.054 ms 0.999 ± 0.019
solposx/n=1000/PSA 3.15 ± 0.041 ms 3.06 ± 0.036 ms 1.03 ± 0.018
solposx/n=1000/SPA 7.51 ± 0.039 ms 7.54 ± 0.046 ms 0.996 ± 0.008
solposx/n=1000/USNO 6.65 ± 0.21 ms 6.65 ± 0.2 ms 1 ± 0.044
solposx/n=1000/Walraven 1.41 ± 0.027 ms 1.38 ± 0.029 ms 1.02 ± 0.029
solposx/n=10000/NOAA 10.4 ± 0.14 ms 10.4 ± 0.15 ms 0.997 ± 0.019
solposx/n=10000/PSA 6.52 ± 0.084 ms 6.55 ± 0.087 ms 0.995 ± 0.018
solposx/n=10000/SPA 0.0503 ± 0.00018 s 0.0503 ± 0.00046 s 0.999 ± 0.0098
solposx/n=10000/USNO 0.0437 ± 0.0016 s 0.0439 ± 0.0018 s 0.996 ± 0.056
solposx/n=10000/Walraven 3.98 ± 0.036 ms 3.99 ± 0.043 ms 0.999 ± 0.014
solposx/n=100000/NOAA 0.0665 ± 0.00049 s 0.068 ± 0.00036 s 0.977 ± 0.0089
solposx/n=100000/PSA 0.0391 ± 0.00073 s 0.0394 ± 0.00077 s 0.992 ± 0.027
solposx/n=100000/SPA 0.493 ± 0.0031 s 0.492 ± 0.0059 s 1 ± 0.013
solposx/n=100000/USNO 0.433 ± 0.012 s 0.436 ± 0.013 s 0.993 ± 0.041
solposx/n=100000/Walraven 29 ± 0.28 ms 29.3 ± 0.54 ms 0.991 ± 0.021
time_to_load 0.167 ± 0.00042 s 0.177 ± 0.0051 s 0.946 ± 0.028
Memory benchmarks
main e94454a... main / e94454a...
ours/n=100/NOAA 10 allocs: 4.53 kB 10 allocs: 4.53 kB 1
ours/n=100/PSA 6 allocs: 2.72 kB 6 allocs: 2.72 kB 1
ours/n=100/SPA 10 allocs: 4.53 kB 10 allocs: 4.53 kB 1
ours/n=100/USNO 6 allocs: 2.72 kB 6 allocs: 2.72 kB 1
ours/n=100/Walraven 6 allocs: 2.72 kB 6 allocs: 2.72 kB 1
ours/n=1000/NOAA 15 allocs: 0.0385 MB 15 allocs: 0.0385 MB 1
ours/n=1000/PSA 9 allocs: 23.6 kB 9 allocs: 23.6 kB 1
ours/n=1000/SPA 15 allocs: 0.0385 MB 15 allocs: 0.0385 MB 1
ours/n=1000/USNO 9 allocs: 23.6 kB 9 allocs: 23.6 kB 1
ours/n=1000/Walraven 9 allocs: 23.6 kB 9 allocs: 23.6 kB 1
ours/n=10000/NOAA 15 allocs: 0.382 MB 15 allocs: 0.382 MB 1
ours/n=10000/PSA 9 allocs: 0.229 MB 9 allocs: 0.229 MB 1
ours/n=10000/SPA 15 allocs: 0.382 MB 15 allocs: 0.382 MB 1
ours/n=10000/USNO 9 allocs: 0.229 MB 9 allocs: 0.229 MB 1
ours/n=10000/Walraven 9 allocs: 0.229 MB 9 allocs: 0.229 MB 1
ours/n=100000/NOAA 15 allocs: 3.82 MB 15 allocs: 3.82 MB 1
ours/n=100000/PSA 9 allocs: 2.29 MB 9 allocs: 2.29 MB 1
ours/n=100000/SPA 15 allocs: 3.82 MB 15 allocs: 3.82 MB 1
ours/n=100000/USNO 9 allocs: 2.29 MB 9 allocs: 2.29 MB 1
ours/n=100000/Walraven 9 allocs: 2.29 MB 9 allocs: 2.29 MB 1
refraction/ARCHER 0 allocs: 0 B 0 allocs: 0 B
refraction/BENNETT 0 allocs: 0 B 0 allocs: 0 B
refraction/MICHALSKY 0 allocs: 0 B 0 allocs: 0 B
refraction/NoRefraction 0 allocs: 0 B 0 allocs: 0 B
refraction/SG2 0 allocs: 0 B 0 allocs: 0 B
single/NOAA 0 allocs: 0 B 0 allocs: 0 B
single/PSA 0 allocs: 0 B 0 allocs: 0 B
single/SPA 0 allocs: 0 B 0 allocs: 0 B
single/USNO 0 allocs: 0 B 0 allocs: 0 B
single/Walraven 0 allocs: 0 B 0 allocs: 0 B
solposx/n=100/NOAA 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=100/PSA 0.037 k allocs: 1.17 kB 0.037 k allocs: 1.17 kB 1
solposx/n=100/SPA 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=100/USNO 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=100/Walraven 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=1000/NOAA 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=1000/PSA 0.037 k allocs: 1.17 kB 0.037 k allocs: 1.17 kB 1
solposx/n=1000/SPA 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=1000/USNO 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=1000/Walraven 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=10000/NOAA 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=10000/PSA 0.037 k allocs: 1.17 kB 0.037 k allocs: 1.17 kB 1
solposx/n=10000/SPA 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=10000/USNO 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=10000/Walraven 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=100000/NOAA 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=100000/PSA 0.037 k allocs: 1.17 kB 0.037 k allocs: 1.17 kB 1
solposx/n=100000/SPA 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=100000/USNO 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
solposx/n=100000/Walraven 9 allocs: 0.516 kB 9 allocs: 0.516 kB 1
time_to_load 0.145 k allocs: 11 kB 0.145 k allocs: 11 kB 1

@codecov
Copy link

codecov bot commented Jan 5, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (d1ca187) to head (7f1ff2d).

Additional details and impacted files
@@            Coverage Diff            @@
##              main       #61   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           17        17           
  Lines          678       679    +1     
=========================================
+ Hits           678       679    +1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@nsajko
Copy link
Contributor Author

nsajko commented Jan 15, 2026

CI fails, but the failure does not seem caused by the change in this PR:

 ERROR: LoadError: Unsatisfiable requirements detected for package JET [c3a54625]:
 JET [c3a54625] log:
 ├─possible versions are: 0.0.1 - 0.11.3 or uninstalled
 ├─restricted to versions 0.9 - 0.11 by an explicit requirement, leaving only versions: 0.9.0 - 0.11.3
 └─restricted by julia compatibility requirements to versions: uninstalled — no versions left

@langestefan
Copy link
Member

langestefan commented Jan 15, 2026

Yes I see, that's because pre is now on julia version 1.13 which is not compatible with JET yet.

I also see more allocations on version 1.12.4. I have seen that in other places (outside SolarPosition.jl) as well, I will investigate what's causing that.

@langestefan
Copy link
Member

If you sync your branch the checks should pass now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants