Toniolo and Linder, Equation (3a)

Percentage Accurate: 98.4% → 99.1%
Time: 14.2s
Alternatives: 7
Speedup: 1.0×

Specification

?
\[\begin{array}{l} \\ \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)} \end{array} \]
(FPCore (l Om kx ky)
 :precision binary64
 (sqrt
  (*
   (/ 1.0 2.0)
   (+
    1.0
    (/
     1.0
     (sqrt
      (+
       1.0
       (*
        (pow (/ (* 2.0 l) Om) 2.0)
        (+ (pow (sin kx) 2.0) (pow (sin ky) 2.0))))))))))
double code(double l, double Om, double kx, double ky) {
	return sqrt(((1.0 / 2.0) * (1.0 + (1.0 / sqrt((1.0 + (pow(((2.0 * l) / Om), 2.0) * (pow(sin(kx), 2.0) + pow(sin(ky), 2.0)))))))));
}
real(8) function code(l, om, kx, ky)
    real(8), intent (in) :: l
    real(8), intent (in) :: om
    real(8), intent (in) :: kx
    real(8), intent (in) :: ky
    code = sqrt(((1.0d0 / 2.0d0) * (1.0d0 + (1.0d0 / sqrt((1.0d0 + ((((2.0d0 * l) / om) ** 2.0d0) * ((sin(kx) ** 2.0d0) + (sin(ky) ** 2.0d0)))))))))
end function
public static double code(double l, double Om, double kx, double ky) {
	return Math.sqrt(((1.0 / 2.0) * (1.0 + (1.0 / Math.sqrt((1.0 + (Math.pow(((2.0 * l) / Om), 2.0) * (Math.pow(Math.sin(kx), 2.0) + Math.pow(Math.sin(ky), 2.0)))))))));
}
def code(l, Om, kx, ky):
	return math.sqrt(((1.0 / 2.0) * (1.0 + (1.0 / math.sqrt((1.0 + (math.pow(((2.0 * l) / Om), 2.0) * (math.pow(math.sin(kx), 2.0) + math.pow(math.sin(ky), 2.0)))))))))
function code(l, Om, kx, ky)
	return sqrt(Float64(Float64(1.0 / 2.0) * Float64(1.0 + Float64(1.0 / sqrt(Float64(1.0 + Float64((Float64(Float64(2.0 * l) / Om) ^ 2.0) * Float64((sin(kx) ^ 2.0) + (sin(ky) ^ 2.0)))))))))
end
function tmp = code(l, Om, kx, ky)
	tmp = sqrt(((1.0 / 2.0) * (1.0 + (1.0 / sqrt((1.0 + ((((2.0 * l) / Om) ^ 2.0) * ((sin(kx) ^ 2.0) + (sin(ky) ^ 2.0)))))))));
end
code[l_, Om_, kx_, ky_] := N[Sqrt[N[(N[(1.0 / 2.0), $MachinePrecision] * N[(1.0 + N[(1.0 / N[Sqrt[N[(1.0 + N[(N[Power[N[(N[(2.0 * l), $MachinePrecision] / Om), $MachinePrecision], 2.0], $MachinePrecision] * N[(N[Power[N[Sin[kx], $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[Sin[ky], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}

\\
\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)}
\end{array}

Sampling outcomes in binary64 precision:

Local Percentage Accuracy vs ?

The average percentage accuracy by input value. Horizontal axis shows value of an input variable; the variable is choosen in the title. Vertical axis is accuracy; higher is better. Red represent the original program, while blue represents Herbie's suggestion. These can be toggled with buttons below the plot. The line is an average while dots represent individual samples.

Accuracy vs Speed?

Herbie found 7 alternatives:

AlternativeAccuracySpeedup
The accuracy (vertical axis) and speed (horizontal axis) of each alternatives. Up and to the right is better. The red square shows the initial program, and each blue circle shows an alternative.The line shows the best available speed-accuracy tradeoffs.

Initial Program: 98.4% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)} \end{array} \]
(FPCore (l Om kx ky)
 :precision binary64
 (sqrt
  (*
   (/ 1.0 2.0)
   (+
    1.0
    (/
     1.0
     (sqrt
      (+
       1.0
       (*
        (pow (/ (* 2.0 l) Om) 2.0)
        (+ (pow (sin kx) 2.0) (pow (sin ky) 2.0))))))))))
double code(double l, double Om, double kx, double ky) {
	return sqrt(((1.0 / 2.0) * (1.0 + (1.0 / sqrt((1.0 + (pow(((2.0 * l) / Om), 2.0) * (pow(sin(kx), 2.0) + pow(sin(ky), 2.0)))))))));
}
real(8) function code(l, om, kx, ky)
    real(8), intent (in) :: l
    real(8), intent (in) :: om
    real(8), intent (in) :: kx
    real(8), intent (in) :: ky
    code = sqrt(((1.0d0 / 2.0d0) * (1.0d0 + (1.0d0 / sqrt((1.0d0 + ((((2.0d0 * l) / om) ** 2.0d0) * ((sin(kx) ** 2.0d0) + (sin(ky) ** 2.0d0)))))))))
end function
public static double code(double l, double Om, double kx, double ky) {
	return Math.sqrt(((1.0 / 2.0) * (1.0 + (1.0 / Math.sqrt((1.0 + (Math.pow(((2.0 * l) / Om), 2.0) * (Math.pow(Math.sin(kx), 2.0) + Math.pow(Math.sin(ky), 2.0)))))))));
}
def code(l, Om, kx, ky):
	return math.sqrt(((1.0 / 2.0) * (1.0 + (1.0 / math.sqrt((1.0 + (math.pow(((2.0 * l) / Om), 2.0) * (math.pow(math.sin(kx), 2.0) + math.pow(math.sin(ky), 2.0)))))))))
function code(l, Om, kx, ky)
	return sqrt(Float64(Float64(1.0 / 2.0) * Float64(1.0 + Float64(1.0 / sqrt(Float64(1.0 + Float64((Float64(Float64(2.0 * l) / Om) ^ 2.0) * Float64((sin(kx) ^ 2.0) + (sin(ky) ^ 2.0)))))))))
end
function tmp = code(l, Om, kx, ky)
	tmp = sqrt(((1.0 / 2.0) * (1.0 + (1.0 / sqrt((1.0 + ((((2.0 * l) / Om) ^ 2.0) * ((sin(kx) ^ 2.0) + (sin(ky) ^ 2.0)))))))));
end
code[l_, Om_, kx_, ky_] := N[Sqrt[N[(N[(1.0 / 2.0), $MachinePrecision] * N[(1.0 + N[(1.0 / N[Sqrt[N[(1.0 + N[(N[Power[N[(N[(2.0 * l), $MachinePrecision] / Om), $MachinePrecision], 2.0], $MachinePrecision] * N[(N[Power[N[Sin[kx], $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[Sin[ky], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}

\\
\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)}
\end{array}

Alternative 1: 99.1% accurate, 0.6× speedup?

\[\begin{array}{l} l_m = \left|\ell\right| \\ Om_m = \left|Om\right| \\ \begin{array}{l} t_0 := \frac{2 \cdot l\_m}{Om\_m}\\ \mathbf{if}\;{t\_0}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right) \leq 5000000000:\\ \;\;\;\;\sqrt{0.5 + \frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{l\_m \cdot \frac{l\_m \cdot 4}{Om\_m}}{Om\_m}, \left(0.5 + -0.5 \cdot \cos \left(kx + kx\right)\right) + \left(0.5 + -0.5 \cdot \cos \left(ky + ky\right)\right), 1\right)}}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{t\_0 \cdot \mathsf{hypot}\left(\sin kx, \sin ky\right)}\right)}\\ \end{array} \end{array} \]
l_m = (fabs.f64 l)
Om_m = (fabs.f64 Om)
(FPCore (l_m Om_m kx ky)
 :precision binary64
 (let* ((t_0 (/ (* 2.0 l_m) Om_m)))
   (if (<=
        (* (pow t_0 2.0) (+ (pow (sin kx) 2.0) (pow (sin ky) 2.0)))
        5000000000.0)
     (sqrt
      (+
       0.5
       (/
        0.5
        (sqrt
         (fma
          (/ (* l_m (/ (* l_m 4.0) Om_m)) Om_m)
          (+ (+ 0.5 (* -0.5 (cos (+ kx kx)))) (+ 0.5 (* -0.5 (cos (+ ky ky)))))
          1.0)))))
     (sqrt
      (* (/ 1.0 2.0) (+ 1.0 (/ 1.0 (* t_0 (hypot (sin kx) (sin ky))))))))))
l_m = fabs(l);
Om_m = fabs(Om);
double code(double l_m, double Om_m, double kx, double ky) {
	double t_0 = (2.0 * l_m) / Om_m;
	double tmp;
	if ((pow(t_0, 2.0) * (pow(sin(kx), 2.0) + pow(sin(ky), 2.0))) <= 5000000000.0) {
		tmp = sqrt((0.5 + (0.5 / sqrt(fma(((l_m * ((l_m * 4.0) / Om_m)) / Om_m), ((0.5 + (-0.5 * cos((kx + kx)))) + (0.5 + (-0.5 * cos((ky + ky))))), 1.0)))));
	} else {
		tmp = sqrt(((1.0 / 2.0) * (1.0 + (1.0 / (t_0 * hypot(sin(kx), sin(ky)))))));
	}
	return tmp;
}
l_m = abs(l)
Om_m = abs(Om)
function code(l_m, Om_m, kx, ky)
	t_0 = Float64(Float64(2.0 * l_m) / Om_m)
	tmp = 0.0
	if (Float64((t_0 ^ 2.0) * Float64((sin(kx) ^ 2.0) + (sin(ky) ^ 2.0))) <= 5000000000.0)
		tmp = sqrt(Float64(0.5 + Float64(0.5 / sqrt(fma(Float64(Float64(l_m * Float64(Float64(l_m * 4.0) / Om_m)) / Om_m), Float64(Float64(0.5 + Float64(-0.5 * cos(Float64(kx + kx)))) + Float64(0.5 + Float64(-0.5 * cos(Float64(ky + ky))))), 1.0)))));
	else
		tmp = sqrt(Float64(Float64(1.0 / 2.0) * Float64(1.0 + Float64(1.0 / Float64(t_0 * hypot(sin(kx), sin(ky)))))));
	end
	return tmp
end
l_m = N[Abs[l], $MachinePrecision]
Om_m = N[Abs[Om], $MachinePrecision]
code[l$95$m_, Om$95$m_, kx_, ky_] := Block[{t$95$0 = N[(N[(2.0 * l$95$m), $MachinePrecision] / Om$95$m), $MachinePrecision]}, If[LessEqual[N[(N[Power[t$95$0, 2.0], $MachinePrecision] * N[(N[Power[N[Sin[kx], $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[Sin[ky], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 5000000000.0], N[Sqrt[N[(0.5 + N[(0.5 / N[Sqrt[N[(N[(N[(l$95$m * N[(N[(l$95$m * 4.0), $MachinePrecision] / Om$95$m), $MachinePrecision]), $MachinePrecision] / Om$95$m), $MachinePrecision] * N[(N[(0.5 + N[(-0.5 * N[Cos[N[(kx + kx), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(0.5 + N[(-0.5 * N[Cos[N[(ky + ky), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[Sqrt[N[(N[(1.0 / 2.0), $MachinePrecision] * N[(1.0 + N[(1.0 / N[(t$95$0 * N[Sqrt[N[Sin[kx], $MachinePrecision] ^ 2 + N[Sin[ky], $MachinePrecision] ^ 2], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]]
\begin{array}{l}
l_m = \left|\ell\right|
\\
Om_m = \left|Om\right|

\\
\begin{array}{l}
t_0 := \frac{2 \cdot l\_m}{Om\_m}\\
\mathbf{if}\;{t\_0}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right) \leq 5000000000:\\
\;\;\;\;\sqrt{0.5 + \frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{l\_m \cdot \frac{l\_m \cdot 4}{Om\_m}}{Om\_m}, \left(0.5 + -0.5 \cdot \cos \left(kx + kx\right)\right) + \left(0.5 + -0.5 \cdot \cos \left(ky + ky\right)\right), 1\right)}}}\\

\mathbf{else}:\\
\;\;\;\;\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{t\_0 \cdot \mathsf{hypot}\left(\sin kx, \sin ky\right)}\right)}\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (*.f64 (pow.f64 (/.f64 (*.f64 #s(literal 2 binary64) l) Om) #s(literal 2 binary64)) (+.f64 (pow.f64 (sin.f64 kx) #s(literal 2 binary64)) (pow.f64 (sin.f64 ky) #s(literal 2 binary64)))) < 5e9

    1. Initial program 100.0%

      \[\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)} \]
    2. Add Preprocessing
    3. Applied egg-rr89.5%

      \[\leadsto \sqrt{\color{blue}{\frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \left(0.5 + -0.5 \cdot \cos \left(kx + kx\right)\right) + \left(0.5 + -0.5 \cdot \cos \left(ky + ky\right)\right), 1\right)}} + 0.5}} \]
    4. Step-by-step derivation
      1. associate-/l*N/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\color{blue}{4 \cdot \frac{\ell \cdot \ell}{Om \cdot Om}}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      2. times-fracN/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(4 \cdot \color{blue}{\left(\frac{\ell}{Om} \cdot \frac{\ell}{Om}\right)}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      3. associate-*l*N/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\color{blue}{\left(4 \cdot \frac{\ell}{Om}\right) \cdot \frac{\ell}{Om}}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      4. *-commutativeN/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\color{blue}{\left(\frac{\ell}{Om} \cdot 4\right)} \cdot \frac{\ell}{Om}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      5. associate-*r/N/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\color{blue}{\frac{\left(\frac{\ell}{Om} \cdot 4\right) \cdot \ell}{Om}}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      6. /-lowering-/.f64N/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\color{blue}{\frac{\left(\frac{\ell}{Om} \cdot 4\right) \cdot \ell}{Om}}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      7. *-lowering-*.f64N/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{\color{blue}{\left(\frac{\ell}{Om} \cdot 4\right) \cdot \ell}}{Om}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      8. *-commutativeN/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{\color{blue}{\left(4 \cdot \frac{\ell}{Om}\right)} \cdot \ell}{Om}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      9. associate-*r/N/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{\color{blue}{\frac{4 \cdot \ell}{Om}} \cdot \ell}{Om}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      10. /-lowering-/.f64N/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{\color{blue}{\frac{4 \cdot \ell}{Om}} \cdot \ell}{Om}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      11. *-commutativeN/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{\frac{\color{blue}{\ell \cdot 4}}{Om} \cdot \ell}{Om}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      12. *-lowering-*.f64100.0

        \[\leadsto \sqrt{\frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{\frac{\color{blue}{\ell \cdot 4}}{Om} \cdot \ell}{Om}, \left(0.5 + -0.5 \cdot \cos \left(kx + kx\right)\right) + \left(0.5 + -0.5 \cdot \cos \left(ky + ky\right)\right), 1\right)}} + 0.5} \]
    5. Applied egg-rr100.0%

      \[\leadsto \sqrt{\frac{0.5}{\sqrt{\mathsf{fma}\left(\color{blue}{\frac{\frac{\ell \cdot 4}{Om} \cdot \ell}{Om}}, \left(0.5 + -0.5 \cdot \cos \left(kx + kx\right)\right) + \left(0.5 + -0.5 \cdot \cos \left(ky + ky\right)\right), 1\right)}} + 0.5} \]

    if 5e9 < (*.f64 (pow.f64 (/.f64 (*.f64 #s(literal 2 binary64) l) Om) #s(literal 2 binary64)) (+.f64 (pow.f64 (sin.f64 kx) #s(literal 2 binary64)) (pow.f64 (sin.f64 ky) #s(literal 2 binary64))))

    1. Initial program 96.7%

      \[\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)} \]
    2. Add Preprocessing
    3. Taylor expanded in l around inf

      \[\leadsto \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\color{blue}{2 \cdot \left(\frac{\ell}{Om} \cdot \sqrt{{\sin kx}^{2} + {\sin ky}^{2}}\right)}}\right)} \]
    4. Step-by-step derivation
      1. associate-*r*N/A

        \[\leadsto \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\color{blue}{\left(2 \cdot \frac{\ell}{Om}\right) \cdot \sqrt{{\sin kx}^{2} + {\sin ky}^{2}}}}\right)} \]
      2. *-lowering-*.f64N/A

        \[\leadsto \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\color{blue}{\left(2 \cdot \frac{\ell}{Om}\right) \cdot \sqrt{{\sin kx}^{2} + {\sin ky}^{2}}}}\right)} \]
      3. associate-*r/N/A

        \[\leadsto \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\color{blue}{\frac{2 \cdot \ell}{Om}} \cdot \sqrt{{\sin kx}^{2} + {\sin ky}^{2}}}\right)} \]
      4. /-lowering-/.f64N/A

        \[\leadsto \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\color{blue}{\frac{2 \cdot \ell}{Om}} \cdot \sqrt{{\sin kx}^{2} + {\sin ky}^{2}}}\right)} \]
      5. *-lowering-*.f64N/A

        \[\leadsto \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\frac{\color{blue}{2 \cdot \ell}}{Om} \cdot \sqrt{{\sin kx}^{2} + {\sin ky}^{2}}}\right)} \]
      6. unpow2N/A

        \[\leadsto \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\frac{2 \cdot \ell}{Om} \cdot \sqrt{\color{blue}{\sin kx \cdot \sin kx} + {\sin ky}^{2}}}\right)} \]
      7. unpow2N/A

        \[\leadsto \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\frac{2 \cdot \ell}{Om} \cdot \sqrt{\sin kx \cdot \sin kx + \color{blue}{\sin ky \cdot \sin ky}}}\right)} \]
      8. accelerator-lowering-hypot.f64N/A

        \[\leadsto \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\frac{2 \cdot \ell}{Om} \cdot \color{blue}{\mathsf{hypot}\left(\sin kx, \sin ky\right)}}\right)} \]
      9. sin-lowering-sin.f64N/A

        \[\leadsto \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\frac{2 \cdot \ell}{Om} \cdot \mathsf{hypot}\left(\color{blue}{\sin kx}, \sin ky\right)}\right)} \]
      10. sin-lowering-sin.f6498.3

        \[\leadsto \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\frac{2 \cdot \ell}{Om} \cdot \mathsf{hypot}\left(\sin kx, \color{blue}{\sin ky}\right)}\right)} \]
    5. Simplified98.3%

      \[\leadsto \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\color{blue}{\frac{2 \cdot \ell}{Om} \cdot \mathsf{hypot}\left(\sin kx, \sin ky\right)}}\right)} \]
  3. Recombined 2 regimes into one program.
  4. Final simplification99.2%

    \[\leadsto \begin{array}{l} \mathbf{if}\;{\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right) \leq 5000000000:\\ \;\;\;\;\sqrt{0.5 + \frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{\ell \cdot \frac{\ell \cdot 4}{Om}}{Om}, \left(0.5 + -0.5 \cdot \cos \left(kx + kx\right)\right) + \left(0.5 + -0.5 \cdot \cos \left(ky + ky\right)\right), 1\right)}}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\frac{2 \cdot \ell}{Om} \cdot \mathsf{hypot}\left(\sin kx, \sin ky\right)}\right)}\\ \end{array} \]
  5. Add Preprocessing

Alternative 2: 98.9% accurate, 0.7× speedup?

\[\begin{array}{l} l_m = \left|\ell\right| \\ Om_m = \left|Om\right| \\ \begin{array}{l} \mathbf{if}\;{\left(\frac{2 \cdot l\_m}{Om\_m}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right) \leq 2 \cdot 10^{+28}:\\ \;\;\;\;\sqrt{0.5 + \frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{l\_m \cdot \frac{l\_m \cdot 4}{Om\_m}}{Om\_m}, \left(0.5 + -0.5 \cdot \cos \left(kx + kx\right)\right) + \left(0.5 + -0.5 \cdot \cos \left(ky + ky\right)\right), 1\right)}}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.5}\\ \end{array} \end{array} \]
l_m = (fabs.f64 l)
Om_m = (fabs.f64 Om)
(FPCore (l_m Om_m kx ky)
 :precision binary64
 (if (<=
      (*
       (pow (/ (* 2.0 l_m) Om_m) 2.0)
       (+ (pow (sin kx) 2.0) (pow (sin ky) 2.0)))
      2e+28)
   (sqrt
    (+
     0.5
     (/
      0.5
      (sqrt
       (fma
        (/ (* l_m (/ (* l_m 4.0) Om_m)) Om_m)
        (+ (+ 0.5 (* -0.5 (cos (+ kx kx)))) (+ 0.5 (* -0.5 (cos (+ ky ky)))))
        1.0)))))
   (sqrt 0.5)))
l_m = fabs(l);
Om_m = fabs(Om);
double code(double l_m, double Om_m, double kx, double ky) {
	double tmp;
	if ((pow(((2.0 * l_m) / Om_m), 2.0) * (pow(sin(kx), 2.0) + pow(sin(ky), 2.0))) <= 2e+28) {
		tmp = sqrt((0.5 + (0.5 / sqrt(fma(((l_m * ((l_m * 4.0) / Om_m)) / Om_m), ((0.5 + (-0.5 * cos((kx + kx)))) + (0.5 + (-0.5 * cos((ky + ky))))), 1.0)))));
	} else {
		tmp = sqrt(0.5);
	}
	return tmp;
}
l_m = abs(l)
Om_m = abs(Om)
function code(l_m, Om_m, kx, ky)
	tmp = 0.0
	if (Float64((Float64(Float64(2.0 * l_m) / Om_m) ^ 2.0) * Float64((sin(kx) ^ 2.0) + (sin(ky) ^ 2.0))) <= 2e+28)
		tmp = sqrt(Float64(0.5 + Float64(0.5 / sqrt(fma(Float64(Float64(l_m * Float64(Float64(l_m * 4.0) / Om_m)) / Om_m), Float64(Float64(0.5 + Float64(-0.5 * cos(Float64(kx + kx)))) + Float64(0.5 + Float64(-0.5 * cos(Float64(ky + ky))))), 1.0)))));
	else
		tmp = sqrt(0.5);
	end
	return tmp
end
l_m = N[Abs[l], $MachinePrecision]
Om_m = N[Abs[Om], $MachinePrecision]
code[l$95$m_, Om$95$m_, kx_, ky_] := If[LessEqual[N[(N[Power[N[(N[(2.0 * l$95$m), $MachinePrecision] / Om$95$m), $MachinePrecision], 2.0], $MachinePrecision] * N[(N[Power[N[Sin[kx], $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[Sin[ky], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2e+28], N[Sqrt[N[(0.5 + N[(0.5 / N[Sqrt[N[(N[(N[(l$95$m * N[(N[(l$95$m * 4.0), $MachinePrecision] / Om$95$m), $MachinePrecision]), $MachinePrecision] / Om$95$m), $MachinePrecision] * N[(N[(0.5 + N[(-0.5 * N[Cos[N[(kx + kx), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(0.5 + N[(-0.5 * N[Cos[N[(ky + ky), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[Sqrt[0.5], $MachinePrecision]]
\begin{array}{l}
l_m = \left|\ell\right|
\\
Om_m = \left|Om\right|

\\
\begin{array}{l}
\mathbf{if}\;{\left(\frac{2 \cdot l\_m}{Om\_m}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right) \leq 2 \cdot 10^{+28}:\\
\;\;\;\;\sqrt{0.5 + \frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{l\_m \cdot \frac{l\_m \cdot 4}{Om\_m}}{Om\_m}, \left(0.5 + -0.5 \cdot \cos \left(kx + kx\right)\right) + \left(0.5 + -0.5 \cdot \cos \left(ky + ky\right)\right), 1\right)}}}\\

\mathbf{else}:\\
\;\;\;\;\sqrt{0.5}\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (*.f64 (pow.f64 (/.f64 (*.f64 #s(literal 2 binary64) l) Om) #s(literal 2 binary64)) (+.f64 (pow.f64 (sin.f64 kx) #s(literal 2 binary64)) (pow.f64 (sin.f64 ky) #s(literal 2 binary64)))) < 1.99999999999999992e28

    1. Initial program 100.0%

      \[\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)} \]
    2. Add Preprocessing
    3. Applied egg-rr89.0%

      \[\leadsto \sqrt{\color{blue}{\frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \left(0.5 + -0.5 \cdot \cos \left(kx + kx\right)\right) + \left(0.5 + -0.5 \cdot \cos \left(ky + ky\right)\right), 1\right)}} + 0.5}} \]
    4. Step-by-step derivation
      1. associate-/l*N/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\color{blue}{4 \cdot \frac{\ell \cdot \ell}{Om \cdot Om}}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      2. times-fracN/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(4 \cdot \color{blue}{\left(\frac{\ell}{Om} \cdot \frac{\ell}{Om}\right)}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      3. associate-*l*N/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\color{blue}{\left(4 \cdot \frac{\ell}{Om}\right) \cdot \frac{\ell}{Om}}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      4. *-commutativeN/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\color{blue}{\left(\frac{\ell}{Om} \cdot 4\right)} \cdot \frac{\ell}{Om}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      5. associate-*r/N/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\color{blue}{\frac{\left(\frac{\ell}{Om} \cdot 4\right) \cdot \ell}{Om}}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      6. /-lowering-/.f64N/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\color{blue}{\frac{\left(\frac{\ell}{Om} \cdot 4\right) \cdot \ell}{Om}}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      7. *-lowering-*.f64N/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{\color{blue}{\left(\frac{\ell}{Om} \cdot 4\right) \cdot \ell}}{Om}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      8. *-commutativeN/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{\color{blue}{\left(4 \cdot \frac{\ell}{Om}\right)} \cdot \ell}{Om}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      9. associate-*r/N/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{\color{blue}{\frac{4 \cdot \ell}{Om}} \cdot \ell}{Om}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      10. /-lowering-/.f64N/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{\color{blue}{\frac{4 \cdot \ell}{Om}} \cdot \ell}{Om}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      11. *-commutativeN/A

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{\frac{\color{blue}{\ell \cdot 4}}{Om} \cdot \ell}{Om}, \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(kx + kx\right)\right) + \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(ky + ky\right)\right), 1\right)}} + \frac{1}{2}} \]
      12. *-lowering-*.f64100.0

        \[\leadsto \sqrt{\frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{\frac{\color{blue}{\ell \cdot 4}}{Om} \cdot \ell}{Om}, \left(0.5 + -0.5 \cdot \cos \left(kx + kx\right)\right) + \left(0.5 + -0.5 \cdot \cos \left(ky + ky\right)\right), 1\right)}} + 0.5} \]
    5. Applied egg-rr100.0%

      \[\leadsto \sqrt{\frac{0.5}{\sqrt{\mathsf{fma}\left(\color{blue}{\frac{\frac{\ell \cdot 4}{Om} \cdot \ell}{Om}}, \left(0.5 + -0.5 \cdot \cos \left(kx + kx\right)\right) + \left(0.5 + -0.5 \cdot \cos \left(ky + ky\right)\right), 1\right)}} + 0.5} \]

    if 1.99999999999999992e28 < (*.f64 (pow.f64 (/.f64 (*.f64 #s(literal 2 binary64) l) Om) #s(literal 2 binary64)) (+.f64 (pow.f64 (sin.f64 kx) #s(literal 2 binary64)) (pow.f64 (sin.f64 ky) #s(literal 2 binary64))))

    1. Initial program 96.6%

      \[\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)} \]
    2. Add Preprocessing
    3. Taylor expanded in l around inf

      \[\leadsto \sqrt{\color{blue}{\frac{1}{2}}} \]
    4. Step-by-step derivation
      1. Simplified99.0%

        \[\leadsto \sqrt{\color{blue}{0.5}} \]
    5. Recombined 2 regimes into one program.
    6. Final simplification99.5%

      \[\leadsto \begin{array}{l} \mathbf{if}\;{\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right) \leq 2 \cdot 10^{+28}:\\ \;\;\;\;\sqrt{0.5 + \frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{\ell \cdot \frac{\ell \cdot 4}{Om}}{Om}, \left(0.5 + -0.5 \cdot \cos \left(kx + kx\right)\right) + \left(0.5 + -0.5 \cdot \cos \left(ky + ky\right)\right), 1\right)}}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.5}\\ \end{array} \]
    7. Add Preprocessing

    Alternative 3: 98.3% accurate, 0.8× speedup?

    \[\begin{array}{l} l_m = \left|\ell\right| \\ Om_m = \left|Om\right| \\ \begin{array}{l} \mathbf{if}\;{\left(\frac{2 \cdot l\_m}{Om\_m}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right) \leq 4 \cdot 10^{+26}:\\ \;\;\;\;\sqrt{0.5 + \frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{l\_m \cdot 4}{Om\_m}, \mathsf{fma}\left(-0.5, \cos \left(ky \cdot -2\right), 0.5\right) \cdot \frac{l\_m}{Om\_m}, 1\right)}}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.5}\\ \end{array} \end{array} \]
    l_m = (fabs.f64 l)
    Om_m = (fabs.f64 Om)
    (FPCore (l_m Om_m kx ky)
     :precision binary64
     (if (<=
          (*
           (pow (/ (* 2.0 l_m) Om_m) 2.0)
           (+ (pow (sin kx) 2.0) (pow (sin ky) 2.0)))
          4e+26)
       (sqrt
        (+
         0.5
         (/
          0.5
          (sqrt
           (fma
            (/ (* l_m 4.0) Om_m)
            (* (fma -0.5 (cos (* ky -2.0)) 0.5) (/ l_m Om_m))
            1.0)))))
       (sqrt 0.5)))
    l_m = fabs(l);
    Om_m = fabs(Om);
    double code(double l_m, double Om_m, double kx, double ky) {
    	double tmp;
    	if ((pow(((2.0 * l_m) / Om_m), 2.0) * (pow(sin(kx), 2.0) + pow(sin(ky), 2.0))) <= 4e+26) {
    		tmp = sqrt((0.5 + (0.5 / sqrt(fma(((l_m * 4.0) / Om_m), (fma(-0.5, cos((ky * -2.0)), 0.5) * (l_m / Om_m)), 1.0)))));
    	} else {
    		tmp = sqrt(0.5);
    	}
    	return tmp;
    }
    
    l_m = abs(l)
    Om_m = abs(Om)
    function code(l_m, Om_m, kx, ky)
    	tmp = 0.0
    	if (Float64((Float64(Float64(2.0 * l_m) / Om_m) ^ 2.0) * Float64((sin(kx) ^ 2.0) + (sin(ky) ^ 2.0))) <= 4e+26)
    		tmp = sqrt(Float64(0.5 + Float64(0.5 / sqrt(fma(Float64(Float64(l_m * 4.0) / Om_m), Float64(fma(-0.5, cos(Float64(ky * -2.0)), 0.5) * Float64(l_m / Om_m)), 1.0)))));
    	else
    		tmp = sqrt(0.5);
    	end
    	return tmp
    end
    
    l_m = N[Abs[l], $MachinePrecision]
    Om_m = N[Abs[Om], $MachinePrecision]
    code[l$95$m_, Om$95$m_, kx_, ky_] := If[LessEqual[N[(N[Power[N[(N[(2.0 * l$95$m), $MachinePrecision] / Om$95$m), $MachinePrecision], 2.0], $MachinePrecision] * N[(N[Power[N[Sin[kx], $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[Sin[ky], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 4e+26], N[Sqrt[N[(0.5 + N[(0.5 / N[Sqrt[N[(N[(N[(l$95$m * 4.0), $MachinePrecision] / Om$95$m), $MachinePrecision] * N[(N[(-0.5 * N[Cos[N[(ky * -2.0), $MachinePrecision]], $MachinePrecision] + 0.5), $MachinePrecision] * N[(l$95$m / Om$95$m), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[Sqrt[0.5], $MachinePrecision]]
    
    \begin{array}{l}
    l_m = \left|\ell\right|
    \\
    Om_m = \left|Om\right|
    
    \\
    \begin{array}{l}
    \mathbf{if}\;{\left(\frac{2 \cdot l\_m}{Om\_m}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right) \leq 4 \cdot 10^{+26}:\\
    \;\;\;\;\sqrt{0.5 + \frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{l\_m \cdot 4}{Om\_m}, \mathsf{fma}\left(-0.5, \cos \left(ky \cdot -2\right), 0.5\right) \cdot \frac{l\_m}{Om\_m}, 1\right)}}}\\
    
    \mathbf{else}:\\
    \;\;\;\;\sqrt{0.5}\\
    
    
    \end{array}
    \end{array}
    
    Derivation
    1. Split input into 2 regimes
    2. if (*.f64 (pow.f64 (/.f64 (*.f64 #s(literal 2 binary64) l) Om) #s(literal 2 binary64)) (+.f64 (pow.f64 (sin.f64 kx) #s(literal 2 binary64)) (pow.f64 (sin.f64 ky) #s(literal 2 binary64)))) < 4.00000000000000019e26

      1. Initial program 100.0%

        \[\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)} \]
      2. Add Preprocessing
      3. Applied egg-rr88.9%

        \[\leadsto \sqrt{\color{blue}{\frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \left(0.5 + -0.5 \cdot \cos \left(kx + kx\right)\right) + \left(0.5 + -0.5 \cdot \cos \left(ky + ky\right)\right), 1\right)}} + 0.5}} \]
      4. Taylor expanded in kx around 0

        \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \color{blue}{\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(2 \cdot ky\right)}, 1\right)}} + \frac{1}{2}} \]
      5. Step-by-step derivation
        1. +-commutativeN/A

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \color{blue}{\frac{-1}{2} \cdot \cos \left(2 \cdot ky\right) + \frac{1}{2}}, 1\right)}} + \frac{1}{2}} \]
        2. accelerator-lowering-fma.f64N/A

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \color{blue}{\mathsf{fma}\left(\frac{-1}{2}, \cos \left(2 \cdot ky\right), \frac{1}{2}\right)}, 1\right)}} + \frac{1}{2}} \]
        3. metadata-evalN/A

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \mathsf{fma}\left(\frac{-1}{2}, \cos \left(\color{blue}{\left(\mathsf{neg}\left(-2\right)\right)} \cdot ky\right), \frac{1}{2}\right), 1\right)}} + \frac{1}{2}} \]
        4. distribute-lft-neg-inN/A

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \mathsf{fma}\left(\frac{-1}{2}, \cos \color{blue}{\left(\mathsf{neg}\left(-2 \cdot ky\right)\right)}, \frac{1}{2}\right), 1\right)}} + \frac{1}{2}} \]
        5. cos-negN/A

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \mathsf{fma}\left(\frac{-1}{2}, \color{blue}{\cos \left(-2 \cdot ky\right)}, \frac{1}{2}\right), 1\right)}} + \frac{1}{2}} \]
        6. cos-lowering-cos.f64N/A

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \mathsf{fma}\left(\frac{-1}{2}, \color{blue}{\cos \left(-2 \cdot ky\right)}, \frac{1}{2}\right), 1\right)}} + \frac{1}{2}} \]
        7. *-commutativeN/A

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \mathsf{fma}\left(\frac{-1}{2}, \cos \color{blue}{\left(ky \cdot -2\right)}, \frac{1}{2}\right), 1\right)}} + \frac{1}{2}} \]
        8. *-lowering-*.f6488.3

          \[\leadsto \sqrt{\frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \mathsf{fma}\left(-0.5, \cos \color{blue}{\left(ky \cdot -2\right)}, 0.5\right), 1\right)}} + 0.5} \]
      6. Simplified88.3%

        \[\leadsto \sqrt{\frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \color{blue}{\mathsf{fma}\left(-0.5, \cos \left(ky \cdot -2\right), 0.5\right)}, 1\right)}} + 0.5} \]
      7. Step-by-step derivation
        1. associate-*l/N/A

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\color{blue}{\frac{\left(4 \cdot \left(\ell \cdot \ell\right)\right) \cdot \left(\frac{-1}{2} \cdot \cos \left(ky \cdot -2\right) + \frac{1}{2}\right)}{Om \cdot Om}} + 1}} + \frac{1}{2}} \]
        2. associate-*r*N/A

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\frac{\color{blue}{\left(\left(4 \cdot \ell\right) \cdot \ell\right)} \cdot \left(\frac{-1}{2} \cdot \cos \left(ky \cdot -2\right) + \frac{1}{2}\right)}{Om \cdot Om} + 1}} + \frac{1}{2}} \]
        3. associate-*l*N/A

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\frac{\color{blue}{\left(4 \cdot \ell\right) \cdot \left(\ell \cdot \left(\frac{-1}{2} \cdot \cos \left(ky \cdot -2\right) + \frac{1}{2}\right)\right)}}{Om \cdot Om} + 1}} + \frac{1}{2}} \]
        4. *-commutativeN/A

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\frac{\color{blue}{\left(\ell \cdot 4\right)} \cdot \left(\ell \cdot \left(\frac{-1}{2} \cdot \cos \left(ky \cdot -2\right) + \frac{1}{2}\right)\right)}{Om \cdot Om} + 1}} + \frac{1}{2}} \]
        5. frac-timesN/A

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\color{blue}{\frac{\ell \cdot 4}{Om} \cdot \frac{\ell \cdot \left(\frac{-1}{2} \cdot \cos \left(ky \cdot -2\right) + \frac{1}{2}\right)}{Om}} + 1}} + \frac{1}{2}} \]
        6. associate-*l/N/A

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\color{blue}{\left(\frac{\ell}{Om} \cdot 4\right)} \cdot \frac{\ell \cdot \left(\frac{-1}{2} \cdot \cos \left(ky \cdot -2\right) + \frac{1}{2}\right)}{Om} + 1}} + \frac{1}{2}} \]
        7. *-commutativeN/A

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\color{blue}{\frac{\ell \cdot \left(\frac{-1}{2} \cdot \cos \left(ky \cdot -2\right) + \frac{1}{2}\right)}{Om} \cdot \left(\frac{\ell}{Om} \cdot 4\right)} + 1}} + \frac{1}{2}} \]
        8. *-commutativeN/A

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\color{blue}{\left(\frac{\ell}{Om} \cdot 4\right) \cdot \frac{\ell \cdot \left(\frac{-1}{2} \cdot \cos \left(ky \cdot -2\right) + \frac{1}{2}\right)}{Om}} + 1}} + \frac{1}{2}} \]
        9. accelerator-lowering-fma.f64N/A

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\color{blue}{\mathsf{fma}\left(\frac{\ell}{Om} \cdot 4, \frac{\ell \cdot \left(\frac{-1}{2} \cdot \cos \left(ky \cdot -2\right) + \frac{1}{2}\right)}{Om}, 1\right)}}} + \frac{1}{2}} \]
      8. Applied egg-rr97.9%

        \[\leadsto \sqrt{\frac{0.5}{\sqrt{\color{blue}{\mathsf{fma}\left(\frac{\ell \cdot 4}{Om}, \mathsf{fma}\left(-0.5, \cos \left(ky \cdot -2\right), 0.5\right) \cdot \frac{\ell}{Om}, 1\right)}}} + 0.5} \]

      if 4.00000000000000019e26 < (*.f64 (pow.f64 (/.f64 (*.f64 #s(literal 2 binary64) l) Om) #s(literal 2 binary64)) (+.f64 (pow.f64 (sin.f64 kx) #s(literal 2 binary64)) (pow.f64 (sin.f64 ky) #s(literal 2 binary64))))

      1. Initial program 96.6%

        \[\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)} \]
      2. Add Preprocessing
      3. Taylor expanded in l around inf

        \[\leadsto \sqrt{\color{blue}{\frac{1}{2}}} \]
      4. Step-by-step derivation
        1. Simplified99.0%

          \[\leadsto \sqrt{\color{blue}{0.5}} \]
      5. Recombined 2 regimes into one program.
      6. Final simplification98.4%

        \[\leadsto \begin{array}{l} \mathbf{if}\;{\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right) \leq 4 \cdot 10^{+26}:\\ \;\;\;\;\sqrt{0.5 + \frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{\ell \cdot 4}{Om}, \mathsf{fma}\left(-0.5, \cos \left(ky \cdot -2\right), 0.5\right) \cdot \frac{\ell}{Om}, 1\right)}}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.5}\\ \end{array} \]
      7. Add Preprocessing

      Alternative 4: 98.1% accurate, 0.8× speedup?

      \[\begin{array}{l} l_m = \left|\ell\right| \\ Om_m = \left|Om\right| \\ \begin{array}{l} \mathbf{if}\;{\left(\frac{2 \cdot l\_m}{Om\_m}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right) \leq 4 \cdot 10^{+26}:\\ \;\;\;\;\sqrt{0.5 + \frac{0.5}{\mathsf{fma}\left(2, \frac{l\_m}{Om\_m} \cdot \left(\mathsf{fma}\left(-0.5, \cos \left(ky \cdot -2\right), 0.5\right) \cdot \frac{l\_m}{Om\_m}\right), 1\right)}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.5}\\ \end{array} \end{array} \]
      l_m = (fabs.f64 l)
      Om_m = (fabs.f64 Om)
      (FPCore (l_m Om_m kx ky)
       :precision binary64
       (if (<=
            (*
             (pow (/ (* 2.0 l_m) Om_m) 2.0)
             (+ (pow (sin kx) 2.0) (pow (sin ky) 2.0)))
            4e+26)
         (sqrt
          (+
           0.5
           (/
            0.5
            (fma
             2.0
             (* (/ l_m Om_m) (* (fma -0.5 (cos (* ky -2.0)) 0.5) (/ l_m Om_m)))
             1.0))))
         (sqrt 0.5)))
      l_m = fabs(l);
      Om_m = fabs(Om);
      double code(double l_m, double Om_m, double kx, double ky) {
      	double tmp;
      	if ((pow(((2.0 * l_m) / Om_m), 2.0) * (pow(sin(kx), 2.0) + pow(sin(ky), 2.0))) <= 4e+26) {
      		tmp = sqrt((0.5 + (0.5 / fma(2.0, ((l_m / Om_m) * (fma(-0.5, cos((ky * -2.0)), 0.5) * (l_m / Om_m))), 1.0))));
      	} else {
      		tmp = sqrt(0.5);
      	}
      	return tmp;
      }
      
      l_m = abs(l)
      Om_m = abs(Om)
      function code(l_m, Om_m, kx, ky)
      	tmp = 0.0
      	if (Float64((Float64(Float64(2.0 * l_m) / Om_m) ^ 2.0) * Float64((sin(kx) ^ 2.0) + (sin(ky) ^ 2.0))) <= 4e+26)
      		tmp = sqrt(Float64(0.5 + Float64(0.5 / fma(2.0, Float64(Float64(l_m / Om_m) * Float64(fma(-0.5, cos(Float64(ky * -2.0)), 0.5) * Float64(l_m / Om_m))), 1.0))));
      	else
      		tmp = sqrt(0.5);
      	end
      	return tmp
      end
      
      l_m = N[Abs[l], $MachinePrecision]
      Om_m = N[Abs[Om], $MachinePrecision]
      code[l$95$m_, Om$95$m_, kx_, ky_] := If[LessEqual[N[(N[Power[N[(N[(2.0 * l$95$m), $MachinePrecision] / Om$95$m), $MachinePrecision], 2.0], $MachinePrecision] * N[(N[Power[N[Sin[kx], $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[Sin[ky], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 4e+26], N[Sqrt[N[(0.5 + N[(0.5 / N[(2.0 * N[(N[(l$95$m / Om$95$m), $MachinePrecision] * N[(N[(-0.5 * N[Cos[N[(ky * -2.0), $MachinePrecision]], $MachinePrecision] + 0.5), $MachinePrecision] * N[(l$95$m / Om$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[Sqrt[0.5], $MachinePrecision]]
      
      \begin{array}{l}
      l_m = \left|\ell\right|
      \\
      Om_m = \left|Om\right|
      
      \\
      \begin{array}{l}
      \mathbf{if}\;{\left(\frac{2 \cdot l\_m}{Om\_m}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right) \leq 4 \cdot 10^{+26}:\\
      \;\;\;\;\sqrt{0.5 + \frac{0.5}{\mathsf{fma}\left(2, \frac{l\_m}{Om\_m} \cdot \left(\mathsf{fma}\left(-0.5, \cos \left(ky \cdot -2\right), 0.5\right) \cdot \frac{l\_m}{Om\_m}\right), 1\right)}}\\
      
      \mathbf{else}:\\
      \;\;\;\;\sqrt{0.5}\\
      
      
      \end{array}
      \end{array}
      
      Derivation
      1. Split input into 2 regimes
      2. if (*.f64 (pow.f64 (/.f64 (*.f64 #s(literal 2 binary64) l) Om) #s(literal 2 binary64)) (+.f64 (pow.f64 (sin.f64 kx) #s(literal 2 binary64)) (pow.f64 (sin.f64 ky) #s(literal 2 binary64)))) < 4.00000000000000019e26

        1. Initial program 100.0%

          \[\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)} \]
        2. Add Preprocessing
        3. Applied egg-rr88.9%

          \[\leadsto \sqrt{\color{blue}{\frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \left(0.5 + -0.5 \cdot \cos \left(kx + kx\right)\right) + \left(0.5 + -0.5 \cdot \cos \left(ky + ky\right)\right), 1\right)}} + 0.5}} \]
        4. Taylor expanded in kx around 0

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \color{blue}{\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(2 \cdot ky\right)}, 1\right)}} + \frac{1}{2}} \]
        5. Step-by-step derivation
          1. +-commutativeN/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \color{blue}{\frac{-1}{2} \cdot \cos \left(2 \cdot ky\right) + \frac{1}{2}}, 1\right)}} + \frac{1}{2}} \]
          2. accelerator-lowering-fma.f64N/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \color{blue}{\mathsf{fma}\left(\frac{-1}{2}, \cos \left(2 \cdot ky\right), \frac{1}{2}\right)}, 1\right)}} + \frac{1}{2}} \]
          3. metadata-evalN/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \mathsf{fma}\left(\frac{-1}{2}, \cos \left(\color{blue}{\left(\mathsf{neg}\left(-2\right)\right)} \cdot ky\right), \frac{1}{2}\right), 1\right)}} + \frac{1}{2}} \]
          4. distribute-lft-neg-inN/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \mathsf{fma}\left(\frac{-1}{2}, \cos \color{blue}{\left(\mathsf{neg}\left(-2 \cdot ky\right)\right)}, \frac{1}{2}\right), 1\right)}} + \frac{1}{2}} \]
          5. cos-negN/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \mathsf{fma}\left(\frac{-1}{2}, \color{blue}{\cos \left(-2 \cdot ky\right)}, \frac{1}{2}\right), 1\right)}} + \frac{1}{2}} \]
          6. cos-lowering-cos.f64N/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \mathsf{fma}\left(\frac{-1}{2}, \color{blue}{\cos \left(-2 \cdot ky\right)}, \frac{1}{2}\right), 1\right)}} + \frac{1}{2}} \]
          7. *-commutativeN/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \mathsf{fma}\left(\frac{-1}{2}, \cos \color{blue}{\left(ky \cdot -2\right)}, \frac{1}{2}\right), 1\right)}} + \frac{1}{2}} \]
          8. *-lowering-*.f6488.3

            \[\leadsto \sqrt{\frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \mathsf{fma}\left(-0.5, \cos \color{blue}{\left(ky \cdot -2\right)}, 0.5\right), 1\right)}} + 0.5} \]
        6. Simplified88.3%

          \[\leadsto \sqrt{\frac{0.5}{\sqrt{\mathsf{fma}\left(\frac{4 \cdot \left(\ell \cdot \ell\right)}{Om \cdot Om}, \color{blue}{\mathsf{fma}\left(-0.5, \cos \left(ky \cdot -2\right), 0.5\right)}, 1\right)}} + 0.5} \]
        7. Taylor expanded in l around 0

          \[\leadsto \sqrt{\frac{\frac{1}{2}}{\color{blue}{1 + 2 \cdot \frac{{\ell}^{2} \cdot \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(-2 \cdot ky\right)\right)}{{Om}^{2}}}} + \frac{1}{2}} \]
        8. Step-by-step derivation
          1. +-commutativeN/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\color{blue}{2 \cdot \frac{{\ell}^{2} \cdot \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(-2 \cdot ky\right)\right)}{{Om}^{2}} + 1}} + \frac{1}{2}} \]
          2. accelerator-lowering-fma.f64N/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\color{blue}{\mathsf{fma}\left(2, \frac{{\ell}^{2} \cdot \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(-2 \cdot ky\right)\right)}{{Om}^{2}}, 1\right)}} + \frac{1}{2}} \]
          3. /-lowering-/.f64N/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \color{blue}{\frac{{\ell}^{2} \cdot \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(-2 \cdot ky\right)\right)}{{Om}^{2}}}, 1\right)} + \frac{1}{2}} \]
          4. *-lowering-*.f64N/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\color{blue}{{\ell}^{2} \cdot \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(-2 \cdot ky\right)\right)}}{{Om}^{2}}, 1\right)} + \frac{1}{2}} \]
          5. unpow2N/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\color{blue}{\left(\ell \cdot \ell\right)} \cdot \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(-2 \cdot ky\right)\right)}{{Om}^{2}}, 1\right)} + \frac{1}{2}} \]
          6. *-lowering-*.f64N/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\color{blue}{\left(\ell \cdot \ell\right)} \cdot \left(\frac{1}{2} + \frac{-1}{2} \cdot \cos \left(-2 \cdot ky\right)\right)}{{Om}^{2}}, 1\right)} + \frac{1}{2}} \]
          7. +-commutativeN/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\left(\ell \cdot \ell\right) \cdot \color{blue}{\left(\frac{-1}{2} \cdot \cos \left(-2 \cdot ky\right) + \frac{1}{2}\right)}}{{Om}^{2}}, 1\right)} + \frac{1}{2}} \]
          8. accelerator-lowering-fma.f64N/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\left(\ell \cdot \ell\right) \cdot \color{blue}{\mathsf{fma}\left(\frac{-1}{2}, \cos \left(-2 \cdot ky\right), \frac{1}{2}\right)}}{{Om}^{2}}, 1\right)} + \frac{1}{2}} \]
          9. cos-lowering-cos.f64N/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\left(\ell \cdot \ell\right) \cdot \mathsf{fma}\left(\frac{-1}{2}, \color{blue}{\cos \left(-2 \cdot ky\right)}, \frac{1}{2}\right)}{{Om}^{2}}, 1\right)} + \frac{1}{2}} \]
          10. *-lowering-*.f64N/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\left(\ell \cdot \ell\right) \cdot \mathsf{fma}\left(\frac{-1}{2}, \cos \color{blue}{\left(-2 \cdot ky\right)}, \frac{1}{2}\right)}{{Om}^{2}}, 1\right)} + \frac{1}{2}} \]
          11. unpow2N/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\left(\ell \cdot \ell\right) \cdot \mathsf{fma}\left(\frac{-1}{2}, \cos \left(-2 \cdot ky\right), \frac{1}{2}\right)}{\color{blue}{Om \cdot Om}}, 1\right)} + \frac{1}{2}} \]
          12. *-lowering-*.f6488.0

            \[\leadsto \sqrt{\frac{0.5}{\mathsf{fma}\left(2, \frac{\left(\ell \cdot \ell\right) \cdot \mathsf{fma}\left(-0.5, \cos \left(-2 \cdot ky\right), 0.5\right)}{\color{blue}{Om \cdot Om}}, 1\right)} + 0.5} \]
        9. Simplified88.0%

          \[\leadsto \sqrt{\frac{0.5}{\color{blue}{\mathsf{fma}\left(2, \frac{\left(\ell \cdot \ell\right) \cdot \mathsf{fma}\left(-0.5, \cos \left(-2 \cdot ky\right), 0.5\right)}{Om \cdot Om}, 1\right)}} + 0.5} \]
        10. Step-by-step derivation
          1. associate-*l*N/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\color{blue}{\ell \cdot \left(\ell \cdot \left(\frac{-1}{2} \cdot \cos \left(-2 \cdot ky\right) + \frac{1}{2}\right)\right)}}{Om \cdot Om}, 1\right)} + \frac{1}{2}} \]
          2. times-fracN/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \color{blue}{\frac{\ell}{Om} \cdot \frac{\ell \cdot \left(\frac{-1}{2} \cdot \cos \left(-2 \cdot ky\right) + \frac{1}{2}\right)}{Om}}, 1\right)} + \frac{1}{2}} \]
          3. associate-*l/N/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\ell}{Om} \cdot \color{blue}{\left(\frac{\ell}{Om} \cdot \left(\frac{-1}{2} \cdot \cos \left(-2 \cdot ky\right) + \frac{1}{2}\right)\right)}, 1\right)} + \frac{1}{2}} \]
          4. *-commutativeN/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\ell}{Om} \cdot \left(\frac{\ell}{Om} \cdot \left(\frac{-1}{2} \cdot \cos \color{blue}{\left(ky \cdot -2\right)} + \frac{1}{2}\right)\right), 1\right)} + \frac{1}{2}} \]
          5. *-commutativeN/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\ell}{Om} \cdot \color{blue}{\left(\left(\frac{-1}{2} \cdot \cos \left(ky \cdot -2\right) + \frac{1}{2}\right) \cdot \frac{\ell}{Om}\right)}, 1\right)} + \frac{1}{2}} \]
          6. *-lowering-*.f64N/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \color{blue}{\frac{\ell}{Om} \cdot \left(\left(\frac{-1}{2} \cdot \cos \left(ky \cdot -2\right) + \frac{1}{2}\right) \cdot \frac{\ell}{Om}\right)}, 1\right)} + \frac{1}{2}} \]
          7. /-lowering-/.f64N/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \color{blue}{\frac{\ell}{Om}} \cdot \left(\left(\frac{-1}{2} \cdot \cos \left(ky \cdot -2\right) + \frac{1}{2}\right) \cdot \frac{\ell}{Om}\right), 1\right)} + \frac{1}{2}} \]
          8. *-commutativeN/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\ell}{Om} \cdot \color{blue}{\left(\frac{\ell}{Om} \cdot \left(\frac{-1}{2} \cdot \cos \left(ky \cdot -2\right) + \frac{1}{2}\right)\right)}, 1\right)} + \frac{1}{2}} \]
          9. *-commutativeN/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\ell}{Om} \cdot \left(\frac{\ell}{Om} \cdot \left(\color{blue}{\cos \left(ky \cdot -2\right) \cdot \frac{-1}{2}} + \frac{1}{2}\right)\right), 1\right)} + \frac{1}{2}} \]
          10. *-commutativeN/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\ell}{Om} \cdot \left(\frac{\ell}{Om} \cdot \left(\cos \color{blue}{\left(-2 \cdot ky\right)} \cdot \frac{-1}{2} + \frac{1}{2}\right)\right), 1\right)} + \frac{1}{2}} \]
          11. *-commutativeN/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\ell}{Om} \cdot \left(\frac{\ell}{Om} \cdot \left(\color{blue}{\frac{-1}{2} \cdot \cos \left(-2 \cdot ky\right)} + \frac{1}{2}\right)\right), 1\right)} + \frac{1}{2}} \]
          12. *-lowering-*.f64N/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\ell}{Om} \cdot \color{blue}{\left(\frac{\ell}{Om} \cdot \left(\frac{-1}{2} \cdot \cos \left(-2 \cdot ky\right) + \frac{1}{2}\right)\right)}, 1\right)} + \frac{1}{2}} \]
          13. /-lowering-/.f64N/A

            \[\leadsto \sqrt{\frac{\frac{1}{2}}{\mathsf{fma}\left(2, \frac{\ell}{Om} \cdot \left(\color{blue}{\frac{\ell}{Om}} \cdot \left(\frac{-1}{2} \cdot \cos \left(-2 \cdot ky\right) + \frac{1}{2}\right)\right), 1\right)} + \frac{1}{2}} \]
        11. Applied egg-rr97.5%

          \[\leadsto \sqrt{\frac{0.5}{\mathsf{fma}\left(2, \color{blue}{\frac{\ell}{Om} \cdot \left(\frac{\ell}{Om} \cdot \mathsf{fma}\left(-0.5, \cos \left(ky \cdot -2\right), 0.5\right)\right)}, 1\right)} + 0.5} \]

        if 4.00000000000000019e26 < (*.f64 (pow.f64 (/.f64 (*.f64 #s(literal 2 binary64) l) Om) #s(literal 2 binary64)) (+.f64 (pow.f64 (sin.f64 kx) #s(literal 2 binary64)) (pow.f64 (sin.f64 ky) #s(literal 2 binary64))))

        1. Initial program 96.6%

          \[\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)} \]
        2. Add Preprocessing
        3. Taylor expanded in l around inf

          \[\leadsto \sqrt{\color{blue}{\frac{1}{2}}} \]
        4. Step-by-step derivation
          1. Simplified99.0%

            \[\leadsto \sqrt{\color{blue}{0.5}} \]
        5. Recombined 2 regimes into one program.
        6. Final simplification98.2%

          \[\leadsto \begin{array}{l} \mathbf{if}\;{\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right) \leq 4 \cdot 10^{+26}:\\ \;\;\;\;\sqrt{0.5 + \frac{0.5}{\mathsf{fma}\left(2, \frac{\ell}{Om} \cdot \left(\mathsf{fma}\left(-0.5, \cos \left(ky \cdot -2\right), 0.5\right) \cdot \frac{\ell}{Om}\right), 1\right)}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.5}\\ \end{array} \]
        7. Add Preprocessing

        Alternative 5: 98.4% accurate, 1.0× speedup?

        \[\begin{array}{l} l_m = \left|\ell\right| \\ Om_m = \left|Om\right| \\ \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot l\_m}{Om\_m}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)} \end{array} \]
        l_m = (fabs.f64 l)
        Om_m = (fabs.f64 Om)
        (FPCore (l_m Om_m kx ky)
         :precision binary64
         (sqrt
          (*
           (/ 1.0 2.0)
           (+
            1.0
            (/
             1.0
             (sqrt
              (+
               1.0
               (*
                (pow (/ (* 2.0 l_m) Om_m) 2.0)
                (+ (pow (sin kx) 2.0) (pow (sin ky) 2.0))))))))))
        l_m = fabs(l);
        Om_m = fabs(Om);
        double code(double l_m, double Om_m, double kx, double ky) {
        	return sqrt(((1.0 / 2.0) * (1.0 + (1.0 / sqrt((1.0 + (pow(((2.0 * l_m) / Om_m), 2.0) * (pow(sin(kx), 2.0) + pow(sin(ky), 2.0)))))))));
        }
        
        l_m = abs(l)
        Om_m = abs(om)
        real(8) function code(l_m, om_m, kx, ky)
            real(8), intent (in) :: l_m
            real(8), intent (in) :: om_m
            real(8), intent (in) :: kx
            real(8), intent (in) :: ky
            code = sqrt(((1.0d0 / 2.0d0) * (1.0d0 + (1.0d0 / sqrt((1.0d0 + ((((2.0d0 * l_m) / om_m) ** 2.0d0) * ((sin(kx) ** 2.0d0) + (sin(ky) ** 2.0d0)))))))))
        end function
        
        l_m = Math.abs(l);
        Om_m = Math.abs(Om);
        public static double code(double l_m, double Om_m, double kx, double ky) {
        	return Math.sqrt(((1.0 / 2.0) * (1.0 + (1.0 / Math.sqrt((1.0 + (Math.pow(((2.0 * l_m) / Om_m), 2.0) * (Math.pow(Math.sin(kx), 2.0) + Math.pow(Math.sin(ky), 2.0)))))))));
        }
        
        l_m = math.fabs(l)
        Om_m = math.fabs(Om)
        def code(l_m, Om_m, kx, ky):
        	return math.sqrt(((1.0 / 2.0) * (1.0 + (1.0 / math.sqrt((1.0 + (math.pow(((2.0 * l_m) / Om_m), 2.0) * (math.pow(math.sin(kx), 2.0) + math.pow(math.sin(ky), 2.0)))))))))
        
        l_m = abs(l)
        Om_m = abs(Om)
        function code(l_m, Om_m, kx, ky)
        	return sqrt(Float64(Float64(1.0 / 2.0) * Float64(1.0 + Float64(1.0 / sqrt(Float64(1.0 + Float64((Float64(Float64(2.0 * l_m) / Om_m) ^ 2.0) * Float64((sin(kx) ^ 2.0) + (sin(ky) ^ 2.0)))))))))
        end
        
        l_m = abs(l);
        Om_m = abs(Om);
        function tmp = code(l_m, Om_m, kx, ky)
        	tmp = sqrt(((1.0 / 2.0) * (1.0 + (1.0 / sqrt((1.0 + ((((2.0 * l_m) / Om_m) ^ 2.0) * ((sin(kx) ^ 2.0) + (sin(ky) ^ 2.0)))))))));
        end
        
        l_m = N[Abs[l], $MachinePrecision]
        Om_m = N[Abs[Om], $MachinePrecision]
        code[l$95$m_, Om$95$m_, kx_, ky_] := N[Sqrt[N[(N[(1.0 / 2.0), $MachinePrecision] * N[(1.0 + N[(1.0 / N[Sqrt[N[(1.0 + N[(N[Power[N[(N[(2.0 * l$95$m), $MachinePrecision] / Om$95$m), $MachinePrecision], 2.0], $MachinePrecision] * N[(N[Power[N[Sin[kx], $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[Sin[ky], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
        
        \begin{array}{l}
        l_m = \left|\ell\right|
        \\
        Om_m = \left|Om\right|
        
        \\
        \sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot l\_m}{Om\_m}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)}
        \end{array}
        
        Derivation
        1. Initial program 98.4%

          \[\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)} \]
        2. Add Preprocessing
        3. Add Preprocessing

        Alternative 6: 98.3% accurate, 1.1× speedup?

        \[\begin{array}{l} l_m = \left|\ell\right| \\ Om_m = \left|Om\right| \\ \begin{array}{l} \mathbf{if}\;{\left(\frac{2 \cdot l\_m}{Om\_m}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right) \leq 0.0002:\\ \;\;\;\;1\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.5}\\ \end{array} \end{array} \]
        l_m = (fabs.f64 l)
        Om_m = (fabs.f64 Om)
        (FPCore (l_m Om_m kx ky)
         :precision binary64
         (if (<=
              (*
               (pow (/ (* 2.0 l_m) Om_m) 2.0)
               (+ (pow (sin kx) 2.0) (pow (sin ky) 2.0)))
              0.0002)
           1.0
           (sqrt 0.5)))
        l_m = fabs(l);
        Om_m = fabs(Om);
        double code(double l_m, double Om_m, double kx, double ky) {
        	double tmp;
        	if ((pow(((2.0 * l_m) / Om_m), 2.0) * (pow(sin(kx), 2.0) + pow(sin(ky), 2.0))) <= 0.0002) {
        		tmp = 1.0;
        	} else {
        		tmp = sqrt(0.5);
        	}
        	return tmp;
        }
        
        l_m = abs(l)
        Om_m = abs(om)
        real(8) function code(l_m, om_m, kx, ky)
            real(8), intent (in) :: l_m
            real(8), intent (in) :: om_m
            real(8), intent (in) :: kx
            real(8), intent (in) :: ky
            real(8) :: tmp
            if (((((2.0d0 * l_m) / om_m) ** 2.0d0) * ((sin(kx) ** 2.0d0) + (sin(ky) ** 2.0d0))) <= 0.0002d0) then
                tmp = 1.0d0
            else
                tmp = sqrt(0.5d0)
            end if
            code = tmp
        end function
        
        l_m = Math.abs(l);
        Om_m = Math.abs(Om);
        public static double code(double l_m, double Om_m, double kx, double ky) {
        	double tmp;
        	if ((Math.pow(((2.0 * l_m) / Om_m), 2.0) * (Math.pow(Math.sin(kx), 2.0) + Math.pow(Math.sin(ky), 2.0))) <= 0.0002) {
        		tmp = 1.0;
        	} else {
        		tmp = Math.sqrt(0.5);
        	}
        	return tmp;
        }
        
        l_m = math.fabs(l)
        Om_m = math.fabs(Om)
        def code(l_m, Om_m, kx, ky):
        	tmp = 0
        	if (math.pow(((2.0 * l_m) / Om_m), 2.0) * (math.pow(math.sin(kx), 2.0) + math.pow(math.sin(ky), 2.0))) <= 0.0002:
        		tmp = 1.0
        	else:
        		tmp = math.sqrt(0.5)
        	return tmp
        
        l_m = abs(l)
        Om_m = abs(Om)
        function code(l_m, Om_m, kx, ky)
        	tmp = 0.0
        	if (Float64((Float64(Float64(2.0 * l_m) / Om_m) ^ 2.0) * Float64((sin(kx) ^ 2.0) + (sin(ky) ^ 2.0))) <= 0.0002)
        		tmp = 1.0;
        	else
        		tmp = sqrt(0.5);
        	end
        	return tmp
        end
        
        l_m = abs(l);
        Om_m = abs(Om);
        function tmp_2 = code(l_m, Om_m, kx, ky)
        	tmp = 0.0;
        	if (((((2.0 * l_m) / Om_m) ^ 2.0) * ((sin(kx) ^ 2.0) + (sin(ky) ^ 2.0))) <= 0.0002)
        		tmp = 1.0;
        	else
        		tmp = sqrt(0.5);
        	end
        	tmp_2 = tmp;
        end
        
        l_m = N[Abs[l], $MachinePrecision]
        Om_m = N[Abs[Om], $MachinePrecision]
        code[l$95$m_, Om$95$m_, kx_, ky_] := If[LessEqual[N[(N[Power[N[(N[(2.0 * l$95$m), $MachinePrecision] / Om$95$m), $MachinePrecision], 2.0], $MachinePrecision] * N[(N[Power[N[Sin[kx], $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[Sin[ky], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 0.0002], 1.0, N[Sqrt[0.5], $MachinePrecision]]
        
        \begin{array}{l}
        l_m = \left|\ell\right|
        \\
        Om_m = \left|Om\right|
        
        \\
        \begin{array}{l}
        \mathbf{if}\;{\left(\frac{2 \cdot l\_m}{Om\_m}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right) \leq 0.0002:\\
        \;\;\;\;1\\
        
        \mathbf{else}:\\
        \;\;\;\;\sqrt{0.5}\\
        
        
        \end{array}
        \end{array}
        
        Derivation
        1. Split input into 2 regimes
        2. if (*.f64 (pow.f64 (/.f64 (*.f64 #s(literal 2 binary64) l) Om) #s(literal 2 binary64)) (+.f64 (pow.f64 (sin.f64 kx) #s(literal 2 binary64)) (pow.f64 (sin.f64 ky) #s(literal 2 binary64)))) < 2.0000000000000001e-4

          1. Initial program 100.0%

            \[\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)} \]
          2. Add Preprocessing
          3. Taylor expanded in ky around 0

            \[\leadsto \sqrt{\color{blue}{\frac{1}{2} \cdot \left(1 + \sqrt{\frac{1}{1 + 4 \cdot \frac{{\ell}^{2} \cdot {\sin kx}^{2}}{{Om}^{2}}}}\right)}} \]
          4. Step-by-step derivation
            1. +-commutativeN/A

              \[\leadsto \sqrt{\frac{1}{2} \cdot \color{blue}{\left(\sqrt{\frac{1}{1 + 4 \cdot \frac{{\ell}^{2} \cdot {\sin kx}^{2}}{{Om}^{2}}}} + 1\right)}} \]
            2. distribute-lft-inN/A

              \[\leadsto \sqrt{\color{blue}{\frac{1}{2} \cdot \sqrt{\frac{1}{1 + 4 \cdot \frac{{\ell}^{2} \cdot {\sin kx}^{2}}{{Om}^{2}}}} + \frac{1}{2} \cdot 1}} \]
            3. metadata-evalN/A

              \[\leadsto \sqrt{\frac{1}{2} \cdot \sqrt{\frac{1}{1 + 4 \cdot \frac{{\ell}^{2} \cdot {\sin kx}^{2}}{{Om}^{2}}}} + \color{blue}{\frac{1}{2}}} \]
            4. accelerator-lowering-fma.f64N/A

              \[\leadsto \sqrt{\color{blue}{\mathsf{fma}\left(\frac{1}{2}, \sqrt{\frac{1}{1 + 4 \cdot \frac{{\ell}^{2} \cdot {\sin kx}^{2}}{{Om}^{2}}}}, \frac{1}{2}\right)}} \]
          5. Simplified89.7%

            \[\leadsto \sqrt{\color{blue}{\mathsf{fma}\left(0.5, \sqrt{\frac{1}{\mathsf{fma}\left(4 \cdot \left(\ell \cdot \ell\right), \frac{{\sin kx}^{2}}{Om \cdot Om}, 1\right)}}, 0.5\right)}} \]
          6. Taylor expanded in l around 0

            \[\leadsto \color{blue}{1} \]
          7. Step-by-step derivation
            1. Simplified99.3%

              \[\leadsto \color{blue}{1} \]

            if 2.0000000000000001e-4 < (*.f64 (pow.f64 (/.f64 (*.f64 #s(literal 2 binary64) l) Om) #s(literal 2 binary64)) (+.f64 (pow.f64 (sin.f64 kx) #s(literal 2 binary64)) (pow.f64 (sin.f64 ky) #s(literal 2 binary64))))

            1. Initial program 96.8%

              \[\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)} \]
            2. Add Preprocessing
            3. Taylor expanded in l around inf

              \[\leadsto \sqrt{\color{blue}{\frac{1}{2}}} \]
            4. Step-by-step derivation
              1. Simplified97.6%

                \[\leadsto \sqrt{\color{blue}{0.5}} \]
            5. Recombined 2 regimes into one program.
            6. Add Preprocessing

            Alternative 7: 62.6% accurate, 581.0× speedup?

            \[\begin{array}{l} l_m = \left|\ell\right| \\ Om_m = \left|Om\right| \\ 1 \end{array} \]
            l_m = (fabs.f64 l)
            Om_m = (fabs.f64 Om)
            (FPCore (l_m Om_m kx ky) :precision binary64 1.0)
            l_m = fabs(l);
            Om_m = fabs(Om);
            double code(double l_m, double Om_m, double kx, double ky) {
            	return 1.0;
            }
            
            l_m = abs(l)
            Om_m = abs(om)
            real(8) function code(l_m, om_m, kx, ky)
                real(8), intent (in) :: l_m
                real(8), intent (in) :: om_m
                real(8), intent (in) :: kx
                real(8), intent (in) :: ky
                code = 1.0d0
            end function
            
            l_m = Math.abs(l);
            Om_m = Math.abs(Om);
            public static double code(double l_m, double Om_m, double kx, double ky) {
            	return 1.0;
            }
            
            l_m = math.fabs(l)
            Om_m = math.fabs(Om)
            def code(l_m, Om_m, kx, ky):
            	return 1.0
            
            l_m = abs(l)
            Om_m = abs(Om)
            function code(l_m, Om_m, kx, ky)
            	return 1.0
            end
            
            l_m = abs(l);
            Om_m = abs(Om);
            function tmp = code(l_m, Om_m, kx, ky)
            	tmp = 1.0;
            end
            
            l_m = N[Abs[l], $MachinePrecision]
            Om_m = N[Abs[Om], $MachinePrecision]
            code[l$95$m_, Om$95$m_, kx_, ky_] := 1.0
            
            \begin{array}{l}
            l_m = \left|\ell\right|
            \\
            Om_m = \left|Om\right|
            
            \\
            1
            \end{array}
            
            Derivation
            1. Initial program 98.4%

              \[\sqrt{\frac{1}{2} \cdot \left(1 + \frac{1}{\sqrt{1 + {\left(\frac{2 \cdot \ell}{Om}\right)}^{2} \cdot \left({\sin kx}^{2} + {\sin ky}^{2}\right)}}\right)} \]
            2. Add Preprocessing
            3. Taylor expanded in ky around 0

              \[\leadsto \sqrt{\color{blue}{\frac{1}{2} \cdot \left(1 + \sqrt{\frac{1}{1 + 4 \cdot \frac{{\ell}^{2} \cdot {\sin kx}^{2}}{{Om}^{2}}}}\right)}} \]
            4. Step-by-step derivation
              1. +-commutativeN/A

                \[\leadsto \sqrt{\frac{1}{2} \cdot \color{blue}{\left(\sqrt{\frac{1}{1 + 4 \cdot \frac{{\ell}^{2} \cdot {\sin kx}^{2}}{{Om}^{2}}}} + 1\right)}} \]
              2. distribute-lft-inN/A

                \[\leadsto \sqrt{\color{blue}{\frac{1}{2} \cdot \sqrt{\frac{1}{1 + 4 \cdot \frac{{\ell}^{2} \cdot {\sin kx}^{2}}{{Om}^{2}}}} + \frac{1}{2} \cdot 1}} \]
              3. metadata-evalN/A

                \[\leadsto \sqrt{\frac{1}{2} \cdot \sqrt{\frac{1}{1 + 4 \cdot \frac{{\ell}^{2} \cdot {\sin kx}^{2}}{{Om}^{2}}}} + \color{blue}{\frac{1}{2}}} \]
              4. accelerator-lowering-fma.f64N/A

                \[\leadsto \sqrt{\color{blue}{\mathsf{fma}\left(\frac{1}{2}, \sqrt{\frac{1}{1 + 4 \cdot \frac{{\ell}^{2} \cdot {\sin kx}^{2}}{{Om}^{2}}}}, \frac{1}{2}\right)}} \]
            5. Simplified80.6%

              \[\leadsto \sqrt{\color{blue}{\mathsf{fma}\left(0.5, \sqrt{\frac{1}{\mathsf{fma}\left(4 \cdot \left(\ell \cdot \ell\right), \frac{{\sin kx}^{2}}{Om \cdot Om}, 1\right)}}, 0.5\right)}} \]
            6. Taylor expanded in l around 0

              \[\leadsto \color{blue}{1} \]
            7. Step-by-step derivation
              1. Simplified61.2%

                \[\leadsto \color{blue}{1} \]
              2. Add Preprocessing

              Reproduce

              ?
              herbie shell --seed 2024198 
              (FPCore (l Om kx ky)
                :name "Toniolo and Linder, Equation (3a)"
                :precision binary64
                (sqrt (* (/ 1.0 2.0) (+ 1.0 (/ 1.0 (sqrt (+ 1.0 (* (pow (/ (* 2.0 l) Om) 2.0) (+ (pow (sin kx) 2.0) (pow (sin ky) 2.0))))))))))