Toniolo and Linder, Equation (2)

Percentage Accurate: 84.9% → 98.9%
Time: 7.5s
Alternatives: 10
Speedup: 1.1×

Specification

?
\[\begin{array}{l} \\ \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \end{array} \]
(FPCore (t l Om Omc)
 :precision binary64
 (asin
  (sqrt (/ (- 1.0 (pow (/ Om Omc) 2.0)) (+ 1.0 (* 2.0 (pow (/ t l) 2.0)))))))
double code(double t, double l, double Om, double Omc) {
	return asin(sqrt(((1.0 - pow((Om / Omc), 2.0)) / (1.0 + (2.0 * pow((t / l), 2.0))))));
}
module fmin_fmax_functions
    implicit none
    private
    public fmax
    public fmin

    interface fmax
        module procedure fmax88
        module procedure fmax44
        module procedure fmax84
        module procedure fmax48
    end interface
    interface fmin
        module procedure fmin88
        module procedure fmin44
        module procedure fmin84
        module procedure fmin48
    end interface
contains
    real(8) function fmax88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(4) function fmax44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(8) function fmax84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmax48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
    end function
    real(8) function fmin88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(4) function fmin44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(8) function fmin84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmin48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
    end function
end module

real(8) function code(t, l, om, omc)
use fmin_fmax_functions
    real(8), intent (in) :: t
    real(8), intent (in) :: l
    real(8), intent (in) :: om
    real(8), intent (in) :: omc
    code = asin(sqrt(((1.0d0 - ((om / omc) ** 2.0d0)) / (1.0d0 + (2.0d0 * ((t / l) ** 2.0d0))))))
end function
public static double code(double t, double l, double Om, double Omc) {
	return Math.asin(Math.sqrt(((1.0 - Math.pow((Om / Omc), 2.0)) / (1.0 + (2.0 * Math.pow((t / l), 2.0))))));
}
def code(t, l, Om, Omc):
	return math.asin(math.sqrt(((1.0 - math.pow((Om / Omc), 2.0)) / (1.0 + (2.0 * math.pow((t / l), 2.0))))))
function code(t, l, Om, Omc)
	return asin(sqrt(Float64(Float64(1.0 - (Float64(Om / Omc) ^ 2.0)) / Float64(1.0 + Float64(2.0 * (Float64(t / l) ^ 2.0))))))
end
function tmp = code(t, l, Om, Omc)
	tmp = asin(sqrt(((1.0 - ((Om / Omc) ^ 2.0)) / (1.0 + (2.0 * ((t / l) ^ 2.0))))));
end
code[t_, l_, Om_, Omc_] := N[ArcSin[N[Sqrt[N[(N[(1.0 - N[Power[N[(Om / Omc), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] / N[(1.0 + N[(2.0 * N[Power[N[(t / l), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]
\begin{array}{l}

\\
\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right)
\end{array}

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 10 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: 84.9% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \end{array} \]
(FPCore (t l Om Omc)
 :precision binary64
 (asin
  (sqrt (/ (- 1.0 (pow (/ Om Omc) 2.0)) (+ 1.0 (* 2.0 (pow (/ t l) 2.0)))))))
double code(double t, double l, double Om, double Omc) {
	return asin(sqrt(((1.0 - pow((Om / Omc), 2.0)) / (1.0 + (2.0 * pow((t / l), 2.0))))));
}
module fmin_fmax_functions
    implicit none
    private
    public fmax
    public fmin

    interface fmax
        module procedure fmax88
        module procedure fmax44
        module procedure fmax84
        module procedure fmax48
    end interface
    interface fmin
        module procedure fmin88
        module procedure fmin44
        module procedure fmin84
        module procedure fmin48
    end interface
contains
    real(8) function fmax88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(4) function fmax44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(8) function fmax84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmax48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
    end function
    real(8) function fmin88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(4) function fmin44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(8) function fmin84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmin48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
    end function
end module

real(8) function code(t, l, om, omc)
use fmin_fmax_functions
    real(8), intent (in) :: t
    real(8), intent (in) :: l
    real(8), intent (in) :: om
    real(8), intent (in) :: omc
    code = asin(sqrt(((1.0d0 - ((om / omc) ** 2.0d0)) / (1.0d0 + (2.0d0 * ((t / l) ** 2.0d0))))))
end function
public static double code(double t, double l, double Om, double Omc) {
	return Math.asin(Math.sqrt(((1.0 - Math.pow((Om / Omc), 2.0)) / (1.0 + (2.0 * Math.pow((t / l), 2.0))))));
}
def code(t, l, Om, Omc):
	return math.asin(math.sqrt(((1.0 - math.pow((Om / Omc), 2.0)) / (1.0 + (2.0 * math.pow((t / l), 2.0))))))
function code(t, l, Om, Omc)
	return asin(sqrt(Float64(Float64(1.0 - (Float64(Om / Omc) ^ 2.0)) / Float64(1.0 + Float64(2.0 * (Float64(t / l) ^ 2.0))))))
end
function tmp = code(t, l, Om, Omc)
	tmp = asin(sqrt(((1.0 - ((Om / Omc) ^ 2.0)) / (1.0 + (2.0 * ((t / l) ^ 2.0))))));
end
code[t_, l_, Om_, Omc_] := N[ArcSin[N[Sqrt[N[(N[(1.0 - N[Power[N[(Om / Omc), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] / N[(1.0 + N[(2.0 * N[Power[N[(t / l), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]
\begin{array}{l}

\\
\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right)
\end{array}

Alternative 1: 98.9% accurate, 0.5× speedup?

\[\begin{array}{l} t_m = \left|t\right| \\ l_m = \left|\ell\right| \\ \begin{array}{l} t_1 := 1 - {\left(\frac{Om}{Omc}\right)}^{2}\\ \mathbf{if}\;\sin^{-1} \left(\sqrt{\frac{t\_1}{1 + 2 \cdot {\left(\frac{t\_m}{l\_m}\right)}^{2}}}\right) \leq 5 \cdot 10^{-153}:\\ \;\;\;\;\sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot 0.5} \cdot l\_m}{t\_m}\right)\\ \mathbf{else}:\\ \;\;\;\;\sin^{-1} \left(\sqrt{\frac{t\_1}{1 + 2 \cdot \frac{1}{{\left(\frac{t\_m}{l\_m}\right)}^{-2}}}}\right)\\ \end{array} \end{array} \]
t_m = (fabs.f64 t)
l_m = (fabs.f64 l)
(FPCore (t_m l_m Om Omc)
 :precision binary64
 (let* ((t_1 (- 1.0 (pow (/ Om Omc) 2.0))))
   (if (<= (asin (sqrt (/ t_1 (+ 1.0 (* 2.0 (pow (/ t_m l_m) 2.0)))))) 5e-153)
     (asin (/ (* (sqrt (* (- 1.0 (* (/ (/ Om Omc) Omc) Om)) 0.5)) l_m) t_m))
     (asin (sqrt (/ t_1 (+ 1.0 (* 2.0 (/ 1.0 (pow (/ t_m l_m) -2.0))))))))))
t_m = fabs(t);
l_m = fabs(l);
double code(double t_m, double l_m, double Om, double Omc) {
	double t_1 = 1.0 - pow((Om / Omc), 2.0);
	double tmp;
	if (asin(sqrt((t_1 / (1.0 + (2.0 * pow((t_m / l_m), 2.0)))))) <= 5e-153) {
		tmp = asin(((sqrt(((1.0 - (((Om / Omc) / Omc) * Om)) * 0.5)) * l_m) / t_m));
	} else {
		tmp = asin(sqrt((t_1 / (1.0 + (2.0 * (1.0 / pow((t_m / l_m), -2.0)))))));
	}
	return tmp;
}
t_m =     private
l_m =     private
module fmin_fmax_functions
    implicit none
    private
    public fmax
    public fmin

    interface fmax
        module procedure fmax88
        module procedure fmax44
        module procedure fmax84
        module procedure fmax48
    end interface
    interface fmin
        module procedure fmin88
        module procedure fmin44
        module procedure fmin84
        module procedure fmin48
    end interface
contains
    real(8) function fmax88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(4) function fmax44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(8) function fmax84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmax48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
    end function
    real(8) function fmin88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(4) function fmin44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(8) function fmin84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmin48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
    end function
end module

real(8) function code(t_m, l_m, om, omc)
use fmin_fmax_functions
    real(8), intent (in) :: t_m
    real(8), intent (in) :: l_m
    real(8), intent (in) :: om
    real(8), intent (in) :: omc
    real(8) :: t_1
    real(8) :: tmp
    t_1 = 1.0d0 - ((om / omc) ** 2.0d0)
    if (asin(sqrt((t_1 / (1.0d0 + (2.0d0 * ((t_m / l_m) ** 2.0d0)))))) <= 5d-153) then
        tmp = asin(((sqrt(((1.0d0 - (((om / omc) / omc) * om)) * 0.5d0)) * l_m) / t_m))
    else
        tmp = asin(sqrt((t_1 / (1.0d0 + (2.0d0 * (1.0d0 / ((t_m / l_m) ** (-2.0d0))))))))
    end if
    code = tmp
end function
t_m = Math.abs(t);
l_m = Math.abs(l);
public static double code(double t_m, double l_m, double Om, double Omc) {
	double t_1 = 1.0 - Math.pow((Om / Omc), 2.0);
	double tmp;
	if (Math.asin(Math.sqrt((t_1 / (1.0 + (2.0 * Math.pow((t_m / l_m), 2.0)))))) <= 5e-153) {
		tmp = Math.asin(((Math.sqrt(((1.0 - (((Om / Omc) / Omc) * Om)) * 0.5)) * l_m) / t_m));
	} else {
		tmp = Math.asin(Math.sqrt((t_1 / (1.0 + (2.0 * (1.0 / Math.pow((t_m / l_m), -2.0)))))));
	}
	return tmp;
}
t_m = math.fabs(t)
l_m = math.fabs(l)
def code(t_m, l_m, Om, Omc):
	t_1 = 1.0 - math.pow((Om / Omc), 2.0)
	tmp = 0
	if math.asin(math.sqrt((t_1 / (1.0 + (2.0 * math.pow((t_m / l_m), 2.0)))))) <= 5e-153:
		tmp = math.asin(((math.sqrt(((1.0 - (((Om / Omc) / Omc) * Om)) * 0.5)) * l_m) / t_m))
	else:
		tmp = math.asin(math.sqrt((t_1 / (1.0 + (2.0 * (1.0 / math.pow((t_m / l_m), -2.0)))))))
	return tmp
t_m = abs(t)
l_m = abs(l)
function code(t_m, l_m, Om, Omc)
	t_1 = Float64(1.0 - (Float64(Om / Omc) ^ 2.0))
	tmp = 0.0
	if (asin(sqrt(Float64(t_1 / Float64(1.0 + Float64(2.0 * (Float64(t_m / l_m) ^ 2.0)))))) <= 5e-153)
		tmp = asin(Float64(Float64(sqrt(Float64(Float64(1.0 - Float64(Float64(Float64(Om / Omc) / Omc) * Om)) * 0.5)) * l_m) / t_m));
	else
		tmp = asin(sqrt(Float64(t_1 / Float64(1.0 + Float64(2.0 * Float64(1.0 / (Float64(t_m / l_m) ^ -2.0)))))));
	end
	return tmp
end
t_m = abs(t);
l_m = abs(l);
function tmp_2 = code(t_m, l_m, Om, Omc)
	t_1 = 1.0 - ((Om / Omc) ^ 2.0);
	tmp = 0.0;
	if (asin(sqrt((t_1 / (1.0 + (2.0 * ((t_m / l_m) ^ 2.0)))))) <= 5e-153)
		tmp = asin(((sqrt(((1.0 - (((Om / Omc) / Omc) * Om)) * 0.5)) * l_m) / t_m));
	else
		tmp = asin(sqrt((t_1 / (1.0 + (2.0 * (1.0 / ((t_m / l_m) ^ -2.0)))))));
	end
	tmp_2 = tmp;
end
t_m = N[Abs[t], $MachinePrecision]
l_m = N[Abs[l], $MachinePrecision]
code[t$95$m_, l$95$m_, Om_, Omc_] := Block[{t$95$1 = N[(1.0 - N[Power[N[(Om / Omc), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[N[ArcSin[N[Sqrt[N[(t$95$1 / N[(1.0 + N[(2.0 * N[Power[N[(t$95$m / l$95$m), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], 5e-153], N[ArcSin[N[(N[(N[Sqrt[N[(N[(1.0 - N[(N[(N[(Om / Omc), $MachinePrecision] / Omc), $MachinePrecision] * Om), $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision]], $MachinePrecision] * l$95$m), $MachinePrecision] / t$95$m), $MachinePrecision]], $MachinePrecision], N[ArcSin[N[Sqrt[N[(t$95$1 / N[(1.0 + N[(2.0 * N[(1.0 / N[Power[N[(t$95$m / l$95$m), $MachinePrecision], -2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]]
\begin{array}{l}
t_m = \left|t\right|
\\
l_m = \left|\ell\right|

\\
\begin{array}{l}
t_1 := 1 - {\left(\frac{Om}{Omc}\right)}^{2}\\
\mathbf{if}\;\sin^{-1} \left(\sqrt{\frac{t\_1}{1 + 2 \cdot {\left(\frac{t\_m}{l\_m}\right)}^{2}}}\right) \leq 5 \cdot 10^{-153}:\\
\;\;\;\;\sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot 0.5} \cdot l\_m}{t\_m}\right)\\

\mathbf{else}:\\
\;\;\;\;\sin^{-1} \left(\sqrt{\frac{t\_1}{1 + 2 \cdot \frac{1}{{\left(\frac{t\_m}{l\_m}\right)}^{-2}}}}\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (asin.f64 (sqrt.f64 (/.f64 (-.f64 #s(literal 1 binary64) (pow.f64 (/.f64 Om Omc) #s(literal 2 binary64))) (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 2 binary64) (pow.f64 (/.f64 t l) #s(literal 2 binary64))))))) < 5.00000000000000033e-153

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Taylor expanded in t around inf

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right)} \]
    3. Step-by-step derivation
      1. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{\color{blue}{t}}\right) \]
      2. lower-sqrt.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right) \]
      3. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      5. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      6. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      7. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      8. lower--.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      9. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      10. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      11. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      12. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      13. lower-*.f6430.2

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right) \]
    4. Applied rewrites30.2%

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right)} \]
    5. Taylor expanded in Om around 0

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot {\ell}^{2}}}{t}\right) \]
    6. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{{\ell}^{2} \cdot \frac{1}{2}}}{t}\right) \]
      2. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{{\ell}^{2} \cdot \frac{1}{2}}}{t}\right) \]
      3. pow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot \frac{1}{2}}}{t}\right) \]
      4. lift-*.f6433.9

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot 0.5}}{t}\right) \]
    7. Applied rewrites33.9%

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot 0.5}}{t}\right) \]
    8. Taylor expanded in l around 0

      \[\leadsto \sin^{-1} \left(\frac{\ell \cdot \sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)}}{t}\right) \]
    9. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      2. lower--.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      3. pow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      4. associate-/l*N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - Om \cdot \frac{Om}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      5. pow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right)} \cdot \ell}{t}\right) \]
      6. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right)} \cdot \ell}{t}\right) \]
      7. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right)} \cdot \ell}{t}\right) \]
      8. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right)} \cdot \ell}{t}\right) \]
      9. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      10. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      11. lift-sqrt.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      12. lift-*.f6445.7

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot 0.5} \cdot \ell}{t}\right) \]
    10. Applied rewrites45.7%

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{Om}{Omc \cdot Omc} \cdot Om\right) \cdot 0.5} \cdot \ell}{t}\right) \]
    11. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{Om}{Omc \cdot Omc} \cdot Om\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      2. lift-/.f64N/A

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

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      4. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      5. lower-/.f6448.4

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot 0.5} \cdot \ell}{t}\right) \]
    12. Applied rewrites48.4%

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot 0.5} \cdot \ell}{t}\right) \]

    if 5.00000000000000033e-153 < (asin.f64 (sqrt.f64 (/.f64 (-.f64 #s(literal 1 binary64) (pow.f64 (/.f64 Om Omc) #s(literal 2 binary64))) (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 2 binary64) (pow.f64 (/.f64 t l) #s(literal 2 binary64)))))))

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\color{blue}{\left(\frac{t}{\ell}\right)}}^{2}}}\right) \]
      2. lift-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{{\left(\frac{t}{\ell}\right)}^{2}}}}\right) \]
      3. metadata-evalN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{\color{blue}{\left(\mathsf{neg}\left(-2\right)\right)}}}}\right) \]
      4. pow-negN/A

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

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      6. lower-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{\color{blue}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      7. lift-/.f6484.9

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{{\color{blue}{\left(\frac{t}{\ell}\right)}}^{-2}}}}\right) \]
    3. Applied rewrites84.9%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 2: 98.9% accurate, 0.5× speedup?

\[\begin{array}{l} t_m = \left|t\right| \\ l_m = \left|\ell\right| \\ \begin{array}{l} t_1 := 1 - {\left(\frac{Om}{Omc}\right)}^{2}\\ \mathbf{if}\;\sin^{-1} \left(\sqrt{\frac{t\_1}{1 + 2 \cdot {\left(\frac{t\_m}{l\_m}\right)}^{2}}}\right) \leq 5 \cdot 10^{-153}:\\ \;\;\;\;\sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot 0.5} \cdot l\_m}{t\_m}\right)\\ \mathbf{else}:\\ \;\;\;\;\sin^{-1} \left(\sqrt{\frac{t\_1}{1 + 2 \cdot \left(\frac{t\_m}{l\_m} \cdot \frac{t\_m}{l\_m}\right)}}\right)\\ \end{array} \end{array} \]
t_m = (fabs.f64 t)
l_m = (fabs.f64 l)
(FPCore (t_m l_m Om Omc)
 :precision binary64
 (let* ((t_1 (- 1.0 (pow (/ Om Omc) 2.0))))
   (if (<= (asin (sqrt (/ t_1 (+ 1.0 (* 2.0 (pow (/ t_m l_m) 2.0)))))) 5e-153)
     (asin (/ (* (sqrt (* (- 1.0 (* (/ (/ Om Omc) Omc) Om)) 0.5)) l_m) t_m))
     (asin (sqrt (/ t_1 (+ 1.0 (* 2.0 (* (/ t_m l_m) (/ t_m l_m))))))))))
t_m = fabs(t);
l_m = fabs(l);
double code(double t_m, double l_m, double Om, double Omc) {
	double t_1 = 1.0 - pow((Om / Omc), 2.0);
	double tmp;
	if (asin(sqrt((t_1 / (1.0 + (2.0 * pow((t_m / l_m), 2.0)))))) <= 5e-153) {
		tmp = asin(((sqrt(((1.0 - (((Om / Omc) / Omc) * Om)) * 0.5)) * l_m) / t_m));
	} else {
		tmp = asin(sqrt((t_1 / (1.0 + (2.0 * ((t_m / l_m) * (t_m / l_m)))))));
	}
	return tmp;
}
t_m =     private
l_m =     private
module fmin_fmax_functions
    implicit none
    private
    public fmax
    public fmin

    interface fmax
        module procedure fmax88
        module procedure fmax44
        module procedure fmax84
        module procedure fmax48
    end interface
    interface fmin
        module procedure fmin88
        module procedure fmin44
        module procedure fmin84
        module procedure fmin48
    end interface
contains
    real(8) function fmax88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(4) function fmax44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(8) function fmax84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmax48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
    end function
    real(8) function fmin88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(4) function fmin44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(8) function fmin84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmin48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
    end function
end module

real(8) function code(t_m, l_m, om, omc)
use fmin_fmax_functions
    real(8), intent (in) :: t_m
    real(8), intent (in) :: l_m
    real(8), intent (in) :: om
    real(8), intent (in) :: omc
    real(8) :: t_1
    real(8) :: tmp
    t_1 = 1.0d0 - ((om / omc) ** 2.0d0)
    if (asin(sqrt((t_1 / (1.0d0 + (2.0d0 * ((t_m / l_m) ** 2.0d0)))))) <= 5d-153) then
        tmp = asin(((sqrt(((1.0d0 - (((om / omc) / omc) * om)) * 0.5d0)) * l_m) / t_m))
    else
        tmp = asin(sqrt((t_1 / (1.0d0 + (2.0d0 * ((t_m / l_m) * (t_m / l_m)))))))
    end if
    code = tmp
end function
t_m = Math.abs(t);
l_m = Math.abs(l);
public static double code(double t_m, double l_m, double Om, double Omc) {
	double t_1 = 1.0 - Math.pow((Om / Omc), 2.0);
	double tmp;
	if (Math.asin(Math.sqrt((t_1 / (1.0 + (2.0 * Math.pow((t_m / l_m), 2.0)))))) <= 5e-153) {
		tmp = Math.asin(((Math.sqrt(((1.0 - (((Om / Omc) / Omc) * Om)) * 0.5)) * l_m) / t_m));
	} else {
		tmp = Math.asin(Math.sqrt((t_1 / (1.0 + (2.0 * ((t_m / l_m) * (t_m / l_m)))))));
	}
	return tmp;
}
t_m = math.fabs(t)
l_m = math.fabs(l)
def code(t_m, l_m, Om, Omc):
	t_1 = 1.0 - math.pow((Om / Omc), 2.0)
	tmp = 0
	if math.asin(math.sqrt((t_1 / (1.0 + (2.0 * math.pow((t_m / l_m), 2.0)))))) <= 5e-153:
		tmp = math.asin(((math.sqrt(((1.0 - (((Om / Omc) / Omc) * Om)) * 0.5)) * l_m) / t_m))
	else:
		tmp = math.asin(math.sqrt((t_1 / (1.0 + (2.0 * ((t_m / l_m) * (t_m / l_m)))))))
	return tmp
t_m = abs(t)
l_m = abs(l)
function code(t_m, l_m, Om, Omc)
	t_1 = Float64(1.0 - (Float64(Om / Omc) ^ 2.0))
	tmp = 0.0
	if (asin(sqrt(Float64(t_1 / Float64(1.0 + Float64(2.0 * (Float64(t_m / l_m) ^ 2.0)))))) <= 5e-153)
		tmp = asin(Float64(Float64(sqrt(Float64(Float64(1.0 - Float64(Float64(Float64(Om / Omc) / Omc) * Om)) * 0.5)) * l_m) / t_m));
	else
		tmp = asin(sqrt(Float64(t_1 / Float64(1.0 + Float64(2.0 * Float64(Float64(t_m / l_m) * Float64(t_m / l_m)))))));
	end
	return tmp
end
t_m = abs(t);
l_m = abs(l);
function tmp_2 = code(t_m, l_m, Om, Omc)
	t_1 = 1.0 - ((Om / Omc) ^ 2.0);
	tmp = 0.0;
	if (asin(sqrt((t_1 / (1.0 + (2.0 * ((t_m / l_m) ^ 2.0)))))) <= 5e-153)
		tmp = asin(((sqrt(((1.0 - (((Om / Omc) / Omc) * Om)) * 0.5)) * l_m) / t_m));
	else
		tmp = asin(sqrt((t_1 / (1.0 + (2.0 * ((t_m / l_m) * (t_m / l_m)))))));
	end
	tmp_2 = tmp;
end
t_m = N[Abs[t], $MachinePrecision]
l_m = N[Abs[l], $MachinePrecision]
code[t$95$m_, l$95$m_, Om_, Omc_] := Block[{t$95$1 = N[(1.0 - N[Power[N[(Om / Omc), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[N[ArcSin[N[Sqrt[N[(t$95$1 / N[(1.0 + N[(2.0 * N[Power[N[(t$95$m / l$95$m), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], 5e-153], N[ArcSin[N[(N[(N[Sqrt[N[(N[(1.0 - N[(N[(N[(Om / Omc), $MachinePrecision] / Omc), $MachinePrecision] * Om), $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision]], $MachinePrecision] * l$95$m), $MachinePrecision] / t$95$m), $MachinePrecision]], $MachinePrecision], N[ArcSin[N[Sqrt[N[(t$95$1 / N[(1.0 + N[(2.0 * N[(N[(t$95$m / l$95$m), $MachinePrecision] * N[(t$95$m / l$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]]
\begin{array}{l}
t_m = \left|t\right|
\\
l_m = \left|\ell\right|

\\
\begin{array}{l}
t_1 := 1 - {\left(\frac{Om}{Omc}\right)}^{2}\\
\mathbf{if}\;\sin^{-1} \left(\sqrt{\frac{t\_1}{1 + 2 \cdot {\left(\frac{t\_m}{l\_m}\right)}^{2}}}\right) \leq 5 \cdot 10^{-153}:\\
\;\;\;\;\sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot 0.5} \cdot l\_m}{t\_m}\right)\\

\mathbf{else}:\\
\;\;\;\;\sin^{-1} \left(\sqrt{\frac{t\_1}{1 + 2 \cdot \left(\frac{t\_m}{l\_m} \cdot \frac{t\_m}{l\_m}\right)}}\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (asin.f64 (sqrt.f64 (/.f64 (-.f64 #s(literal 1 binary64) (pow.f64 (/.f64 Om Omc) #s(literal 2 binary64))) (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 2 binary64) (pow.f64 (/.f64 t l) #s(literal 2 binary64))))))) < 5.00000000000000033e-153

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Taylor expanded in t around inf

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right)} \]
    3. Step-by-step derivation
      1. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{\color{blue}{t}}\right) \]
      2. lower-sqrt.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right) \]
      3. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      5. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      6. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      7. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      8. lower--.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      9. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      10. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      11. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      12. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      13. lower-*.f6430.2

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right) \]
    4. Applied rewrites30.2%

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right)} \]
    5. Taylor expanded in Om around 0

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot {\ell}^{2}}}{t}\right) \]
    6. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{{\ell}^{2} \cdot \frac{1}{2}}}{t}\right) \]
      2. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{{\ell}^{2} \cdot \frac{1}{2}}}{t}\right) \]
      3. pow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot \frac{1}{2}}}{t}\right) \]
      4. lift-*.f6433.9

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot 0.5}}{t}\right) \]
    7. Applied rewrites33.9%

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot 0.5}}{t}\right) \]
    8. Taylor expanded in l around 0

      \[\leadsto \sin^{-1} \left(\frac{\ell \cdot \sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)}}{t}\right) \]
    9. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      2. lower--.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      3. pow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      4. associate-/l*N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - Om \cdot \frac{Om}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      5. pow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right)} \cdot \ell}{t}\right) \]
      6. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right)} \cdot \ell}{t}\right) \]
      7. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right)} \cdot \ell}{t}\right) \]
      8. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right)} \cdot \ell}{t}\right) \]
      9. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      10. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      11. lift-sqrt.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      12. lift-*.f6445.7

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot 0.5} \cdot \ell}{t}\right) \]
    10. Applied rewrites45.7%

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{Om}{Omc \cdot Omc} \cdot Om\right) \cdot 0.5} \cdot \ell}{t}\right) \]
    11. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{Om}{Omc \cdot Omc} \cdot Om\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      2. lift-/.f64N/A

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

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      4. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      5. lower-/.f6448.4

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot 0.5} \cdot \ell}{t}\right) \]
    12. Applied rewrites48.4%

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot 0.5} \cdot \ell}{t}\right) \]

    if 5.00000000000000033e-153 < (asin.f64 (sqrt.f64 (/.f64 (-.f64 #s(literal 1 binary64) (pow.f64 (/.f64 Om Omc) #s(literal 2 binary64))) (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 2 binary64) (pow.f64 (/.f64 t l) #s(literal 2 binary64)))))))

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\color{blue}{\left(\frac{t}{\ell}\right)}}^{2}}}\right) \]
      2. lift-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{{\left(\frac{t}{\ell}\right)}^{2}}}}\right) \]
      3. unpow2N/A

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

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

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \left(\color{blue}{\frac{t}{\ell}} \cdot \frac{t}{\ell}\right)}}\right) \]
      6. lift-/.f6484.9

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \left(\frac{t}{\ell} \cdot \color{blue}{\frac{t}{\ell}}\right)}}\right) \]
    3. Applied rewrites84.9%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\left(\frac{t}{\ell} \cdot \frac{t}{\ell}\right)}}}\right) \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 3: 98.2% accurate, 0.6× speedup?

\[\begin{array}{l} t_m = \left|t\right| \\ l_m = \left|\ell\right| \\ \begin{array}{l} \mathbf{if}\;\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t\_m}{l\_m}\right)}^{2}}}\right) \leq 5 \cdot 10^{-153}:\\ \;\;\;\;\sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot 0.5} \cdot l\_m}{t\_m}\right)\\ \mathbf{else}:\\ \;\;\;\;\sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t\_m}{l\_m} \cdot \frac{t\_m}{l\_m}, 2, 1\right)}}\right)\\ \end{array} \end{array} \]
t_m = (fabs.f64 t)
l_m = (fabs.f64 l)
(FPCore (t_m l_m Om Omc)
 :precision binary64
 (if (<=
      (asin
       (sqrt
        (/
         (- 1.0 (pow (/ Om Omc) 2.0))
         (+ 1.0 (* 2.0 (pow (/ t_m l_m) 2.0))))))
      5e-153)
   (asin (/ (* (sqrt (* (- 1.0 (* (/ (/ Om Omc) Omc) Om)) 0.5)) l_m) t_m))
   (asin (sqrt (/ 1.0 (fma (* (/ t_m l_m) (/ t_m l_m)) 2.0 1.0))))))
t_m = fabs(t);
l_m = fabs(l);
double code(double t_m, double l_m, double Om, double Omc) {
	double tmp;
	if (asin(sqrt(((1.0 - pow((Om / Omc), 2.0)) / (1.0 + (2.0 * pow((t_m / l_m), 2.0)))))) <= 5e-153) {
		tmp = asin(((sqrt(((1.0 - (((Om / Omc) / Omc) * Om)) * 0.5)) * l_m) / t_m));
	} else {
		tmp = asin(sqrt((1.0 / fma(((t_m / l_m) * (t_m / l_m)), 2.0, 1.0))));
	}
	return tmp;
}
t_m = abs(t)
l_m = abs(l)
function code(t_m, l_m, Om, Omc)
	tmp = 0.0
	if (asin(sqrt(Float64(Float64(1.0 - (Float64(Om / Omc) ^ 2.0)) / Float64(1.0 + Float64(2.0 * (Float64(t_m / l_m) ^ 2.0)))))) <= 5e-153)
		tmp = asin(Float64(Float64(sqrt(Float64(Float64(1.0 - Float64(Float64(Float64(Om / Omc) / Omc) * Om)) * 0.5)) * l_m) / t_m));
	else
		tmp = asin(sqrt(Float64(1.0 / fma(Float64(Float64(t_m / l_m) * Float64(t_m / l_m)), 2.0, 1.0))));
	end
	return tmp
end
t_m = N[Abs[t], $MachinePrecision]
l_m = N[Abs[l], $MachinePrecision]
code[t$95$m_, l$95$m_, Om_, Omc_] := If[LessEqual[N[ArcSin[N[Sqrt[N[(N[(1.0 - N[Power[N[(Om / Omc), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] / N[(1.0 + N[(2.0 * N[Power[N[(t$95$m / l$95$m), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], 5e-153], N[ArcSin[N[(N[(N[Sqrt[N[(N[(1.0 - N[(N[(N[(Om / Omc), $MachinePrecision] / Omc), $MachinePrecision] * Om), $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision]], $MachinePrecision] * l$95$m), $MachinePrecision] / t$95$m), $MachinePrecision]], $MachinePrecision], N[ArcSin[N[Sqrt[N[(1.0 / N[(N[(N[(t$95$m / l$95$m), $MachinePrecision] * N[(t$95$m / l$95$m), $MachinePrecision]), $MachinePrecision] * 2.0 + 1.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
t_m = \left|t\right|
\\
l_m = \left|\ell\right|

\\
\begin{array}{l}
\mathbf{if}\;\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t\_m}{l\_m}\right)}^{2}}}\right) \leq 5 \cdot 10^{-153}:\\
\;\;\;\;\sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot 0.5} \cdot l\_m}{t\_m}\right)\\

\mathbf{else}:\\
\;\;\;\;\sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t\_m}{l\_m} \cdot \frac{t\_m}{l\_m}, 2, 1\right)}}\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (asin.f64 (sqrt.f64 (/.f64 (-.f64 #s(literal 1 binary64) (pow.f64 (/.f64 Om Omc) #s(literal 2 binary64))) (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 2 binary64) (pow.f64 (/.f64 t l) #s(literal 2 binary64))))))) < 5.00000000000000033e-153

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Taylor expanded in t around inf

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right)} \]
    3. Step-by-step derivation
      1. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{\color{blue}{t}}\right) \]
      2. lower-sqrt.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right) \]
      3. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      5. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      6. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      7. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      8. lower--.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      9. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      10. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      11. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      12. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      13. lower-*.f6430.2

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right) \]
    4. Applied rewrites30.2%

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right)} \]
    5. Taylor expanded in Om around 0

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot {\ell}^{2}}}{t}\right) \]
    6. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{{\ell}^{2} \cdot \frac{1}{2}}}{t}\right) \]
      2. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{{\ell}^{2} \cdot \frac{1}{2}}}{t}\right) \]
      3. pow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot \frac{1}{2}}}{t}\right) \]
      4. lift-*.f6433.9

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot 0.5}}{t}\right) \]
    7. Applied rewrites33.9%

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot 0.5}}{t}\right) \]
    8. Taylor expanded in l around 0

      \[\leadsto \sin^{-1} \left(\frac{\ell \cdot \sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)}}{t}\right) \]
    9. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      2. lower--.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      3. pow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      4. associate-/l*N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - Om \cdot \frac{Om}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      5. pow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right)} \cdot \ell}{t}\right) \]
      6. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right)} \cdot \ell}{t}\right) \]
      7. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right)} \cdot \ell}{t}\right) \]
      8. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right)} \cdot \ell}{t}\right) \]
      9. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      10. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      11. lift-sqrt.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      12. lift-*.f6445.7

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot 0.5} \cdot \ell}{t}\right) \]
    10. Applied rewrites45.7%

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{Om}{Omc \cdot Omc} \cdot Om\right) \cdot 0.5} \cdot \ell}{t}\right) \]
    11. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{Om}{Omc \cdot Omc} \cdot Om\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      2. lift-/.f64N/A

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

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      4. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      5. lower-/.f6448.4

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot 0.5} \cdot \ell}{t}\right) \]
    12. Applied rewrites48.4%

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{\frac{Om}{Omc}}{Omc} \cdot Om\right) \cdot 0.5} \cdot \ell}{t}\right) \]

    if 5.00000000000000033e-153 < (asin.f64 (sqrt.f64 (/.f64 (-.f64 #s(literal 1 binary64) (pow.f64 (/.f64 Om Omc) #s(literal 2 binary64))) (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 2 binary64) (pow.f64 (/.f64 t l) #s(literal 2 binary64)))))))

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\color{blue}{\left(\frac{t}{\ell}\right)}}^{2}}}\right) \]
      2. lift-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{{\left(\frac{t}{\ell}\right)}^{2}}}}\right) \]
      3. metadata-evalN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{\color{blue}{\left(\mathsf{neg}\left(-2\right)\right)}}}}\right) \]
      4. pow-negN/A

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

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      6. lower-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{\color{blue}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      7. lift-/.f6484.9

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{{\color{blue}{\left(\frac{t}{\ell}\right)}}^{-2}}}}\right) \]
    3. Applied rewrites84.9%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
    4. Taylor expanded in Om around 0

      \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}}\right) \]
    5. Step-by-step derivation
      1. pow-flipN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      2. metadata-evalN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      3. unpow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      4. times-fracN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      5. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      6. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      7. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      8. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      9. times-fracN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      10. unpow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      11. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\color{blue}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}}\right) \]
      12. +-commutativeN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{2 \cdot \frac{{t}^{2}}{{\ell}^{2}} + \color{blue}{1}}}\right) \]
      13. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\frac{{t}^{2}}{{\ell}^{2}} \cdot 2 + 1}}\right) \]
      14. lower-fma.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{{t}^{2}}{{\ell}^{2}}, \color{blue}{2}, 1\right)}}\right) \]
    6. Applied rewrites72.7%

      \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}}\right) \]
    7. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}\right) \]
      2. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}\right) \]
      3. associate-/r*N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      4. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      5. lower-/.f6481.2

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
    8. Applied rewrites81.2%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
    9. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      2. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      3. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      4. associate-*r/N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t \cdot \frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      5. associate-*l/N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
      6. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
      7. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
      8. lift-*.f6484.2

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
    10. Applied rewrites84.2%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 4: 96.8% accurate, 0.6× speedup?

\[\begin{array}{l} t_m = \left|t\right| \\ l_m = \left|\ell\right| \\ \begin{array}{l} \mathbf{if}\;\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t\_m}{l\_m}\right)}^{2}}}\right) \leq 5 \cdot 10^{-153}:\\ \;\;\;\;\sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot 0.5} \cdot l\_m}{t\_m}\right)\\ \mathbf{else}:\\ \;\;\;\;\sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t\_m}{l\_m} \cdot \frac{t\_m}{l\_m}, 2, 1\right)}}\right)\\ \end{array} \end{array} \]
t_m = (fabs.f64 t)
l_m = (fabs.f64 l)
(FPCore (t_m l_m Om Omc)
 :precision binary64
 (if (<=
      (asin
       (sqrt
        (/
         (- 1.0 (pow (/ Om Omc) 2.0))
         (+ 1.0 (* 2.0 (pow (/ t_m l_m) 2.0))))))
      5e-153)
   (asin (/ (* (sqrt (* (- 1.0 (* Om (/ Om (* Omc Omc)))) 0.5)) l_m) t_m))
   (asin (sqrt (/ 1.0 (fma (* (/ t_m l_m) (/ t_m l_m)) 2.0 1.0))))))
t_m = fabs(t);
l_m = fabs(l);
double code(double t_m, double l_m, double Om, double Omc) {
	double tmp;
	if (asin(sqrt(((1.0 - pow((Om / Omc), 2.0)) / (1.0 + (2.0 * pow((t_m / l_m), 2.0)))))) <= 5e-153) {
		tmp = asin(((sqrt(((1.0 - (Om * (Om / (Omc * Omc)))) * 0.5)) * l_m) / t_m));
	} else {
		tmp = asin(sqrt((1.0 / fma(((t_m / l_m) * (t_m / l_m)), 2.0, 1.0))));
	}
	return tmp;
}
t_m = abs(t)
l_m = abs(l)
function code(t_m, l_m, Om, Omc)
	tmp = 0.0
	if (asin(sqrt(Float64(Float64(1.0 - (Float64(Om / Omc) ^ 2.0)) / Float64(1.0 + Float64(2.0 * (Float64(t_m / l_m) ^ 2.0)))))) <= 5e-153)
		tmp = asin(Float64(Float64(sqrt(Float64(Float64(1.0 - Float64(Om * Float64(Om / Float64(Omc * Omc)))) * 0.5)) * l_m) / t_m));
	else
		tmp = asin(sqrt(Float64(1.0 / fma(Float64(Float64(t_m / l_m) * Float64(t_m / l_m)), 2.0, 1.0))));
	end
	return tmp
end
t_m = N[Abs[t], $MachinePrecision]
l_m = N[Abs[l], $MachinePrecision]
code[t$95$m_, l$95$m_, Om_, Omc_] := If[LessEqual[N[ArcSin[N[Sqrt[N[(N[(1.0 - N[Power[N[(Om / Omc), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] / N[(1.0 + N[(2.0 * N[Power[N[(t$95$m / l$95$m), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], 5e-153], N[ArcSin[N[(N[(N[Sqrt[N[(N[(1.0 - N[(Om * N[(Om / N[(Omc * Omc), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision]], $MachinePrecision] * l$95$m), $MachinePrecision] / t$95$m), $MachinePrecision]], $MachinePrecision], N[ArcSin[N[Sqrt[N[(1.0 / N[(N[(N[(t$95$m / l$95$m), $MachinePrecision] * N[(t$95$m / l$95$m), $MachinePrecision]), $MachinePrecision] * 2.0 + 1.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
t_m = \left|t\right|
\\
l_m = \left|\ell\right|

\\
\begin{array}{l}
\mathbf{if}\;\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t\_m}{l\_m}\right)}^{2}}}\right) \leq 5 \cdot 10^{-153}:\\
\;\;\;\;\sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot 0.5} \cdot l\_m}{t\_m}\right)\\

\mathbf{else}:\\
\;\;\;\;\sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t\_m}{l\_m} \cdot \frac{t\_m}{l\_m}, 2, 1\right)}}\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (asin.f64 (sqrt.f64 (/.f64 (-.f64 #s(literal 1 binary64) (pow.f64 (/.f64 Om Omc) #s(literal 2 binary64))) (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 2 binary64) (pow.f64 (/.f64 t l) #s(literal 2 binary64))))))) < 5.00000000000000033e-153

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Taylor expanded in t around inf

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right)} \]
    3. Step-by-step derivation
      1. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{\color{blue}{t}}\right) \]
      2. lower-sqrt.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right) \]
      3. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      5. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      6. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      7. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      8. lower--.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      9. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      10. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      11. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      12. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      13. lower-*.f6430.2

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right) \]
    4. Applied rewrites30.2%

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right)} \]
    5. Taylor expanded in l around 0

      \[\leadsto \sin^{-1} \left(\frac{\ell \cdot \sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)}}{t}\right) \]
    6. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      2. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      3. lower-sqrt.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      4. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      5. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      6. lower--.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      7. pow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      8. associate-/l*N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{{Omc}^{2}}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      9. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{{Omc}^{2}}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      10. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{{Omc}^{2}}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      11. pow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      12. lift-*.f6445.7

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot 0.5} \cdot \ell}{t}\right) \]
    7. Applied rewrites45.7%

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot 0.5} \cdot \ell}{t}\right) \]

    if 5.00000000000000033e-153 < (asin.f64 (sqrt.f64 (/.f64 (-.f64 #s(literal 1 binary64) (pow.f64 (/.f64 Om Omc) #s(literal 2 binary64))) (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 2 binary64) (pow.f64 (/.f64 t l) #s(literal 2 binary64)))))))

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\color{blue}{\left(\frac{t}{\ell}\right)}}^{2}}}\right) \]
      2. lift-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{{\left(\frac{t}{\ell}\right)}^{2}}}}\right) \]
      3. metadata-evalN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{\color{blue}{\left(\mathsf{neg}\left(-2\right)\right)}}}}\right) \]
      4. pow-negN/A

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

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      6. lower-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{\color{blue}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      7. lift-/.f6484.9

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{{\color{blue}{\left(\frac{t}{\ell}\right)}}^{-2}}}}\right) \]
    3. Applied rewrites84.9%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
    4. Taylor expanded in Om around 0

      \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}}\right) \]
    5. Step-by-step derivation
      1. pow-flipN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      2. metadata-evalN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      3. unpow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      4. times-fracN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      5. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      6. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      7. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      8. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      9. times-fracN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      10. unpow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      11. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\color{blue}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}}\right) \]
      12. +-commutativeN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{2 \cdot \frac{{t}^{2}}{{\ell}^{2}} + \color{blue}{1}}}\right) \]
      13. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\frac{{t}^{2}}{{\ell}^{2}} \cdot 2 + 1}}\right) \]
      14. lower-fma.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{{t}^{2}}{{\ell}^{2}}, \color{blue}{2}, 1\right)}}\right) \]
    6. Applied rewrites72.7%

      \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}}\right) \]
    7. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}\right) \]
      2. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}\right) \]
      3. associate-/r*N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      4. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      5. lower-/.f6481.2

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
    8. Applied rewrites81.2%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
    9. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      2. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      3. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      4. associate-*r/N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t \cdot \frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      5. associate-*l/N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
      6. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
      7. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
      8. lift-*.f6484.2

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
    10. Applied rewrites84.2%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 5: 96.7% accurate, 0.6× speedup?

\[\begin{array}{l} t_m = \left|t\right| \\ l_m = \left|\ell\right| \\ \begin{array}{l} \mathbf{if}\;\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t\_m}{l\_m}\right)}^{2}}}\right) \leq 0:\\ \;\;\;\;\sin^{-1} \left(l\_m \cdot \frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot 0.5}}{t\_m}\right)\\ \mathbf{else}:\\ \;\;\;\;\sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t\_m}{l\_m} \cdot \frac{t\_m}{l\_m}, 2, 1\right)}}\right)\\ \end{array} \end{array} \]
t_m = (fabs.f64 t)
l_m = (fabs.f64 l)
(FPCore (t_m l_m Om Omc)
 :precision binary64
 (if (<=
      (asin
       (sqrt
        (/
         (- 1.0 (pow (/ Om Omc) 2.0))
         (+ 1.0 (* 2.0 (pow (/ t_m l_m) 2.0))))))
      0.0)
   (asin (* l_m (/ (sqrt (* (- 1.0 (* Om (/ Om (* Omc Omc)))) 0.5)) t_m)))
   (asin (sqrt (/ 1.0 (fma (* (/ t_m l_m) (/ t_m l_m)) 2.0 1.0))))))
t_m = fabs(t);
l_m = fabs(l);
double code(double t_m, double l_m, double Om, double Omc) {
	double tmp;
	if (asin(sqrt(((1.0 - pow((Om / Omc), 2.0)) / (1.0 + (2.0 * pow((t_m / l_m), 2.0)))))) <= 0.0) {
		tmp = asin((l_m * (sqrt(((1.0 - (Om * (Om / (Omc * Omc)))) * 0.5)) / t_m)));
	} else {
		tmp = asin(sqrt((1.0 / fma(((t_m / l_m) * (t_m / l_m)), 2.0, 1.0))));
	}
	return tmp;
}
t_m = abs(t)
l_m = abs(l)
function code(t_m, l_m, Om, Omc)
	tmp = 0.0
	if (asin(sqrt(Float64(Float64(1.0 - (Float64(Om / Omc) ^ 2.0)) / Float64(1.0 + Float64(2.0 * (Float64(t_m / l_m) ^ 2.0)))))) <= 0.0)
		tmp = asin(Float64(l_m * Float64(sqrt(Float64(Float64(1.0 - Float64(Om * Float64(Om / Float64(Omc * Omc)))) * 0.5)) / t_m)));
	else
		tmp = asin(sqrt(Float64(1.0 / fma(Float64(Float64(t_m / l_m) * Float64(t_m / l_m)), 2.0, 1.0))));
	end
	return tmp
end
t_m = N[Abs[t], $MachinePrecision]
l_m = N[Abs[l], $MachinePrecision]
code[t$95$m_, l$95$m_, Om_, Omc_] := If[LessEqual[N[ArcSin[N[Sqrt[N[(N[(1.0 - N[Power[N[(Om / Omc), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] / N[(1.0 + N[(2.0 * N[Power[N[(t$95$m / l$95$m), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], 0.0], N[ArcSin[N[(l$95$m * N[(N[Sqrt[N[(N[(1.0 - N[(Om * N[(Om / N[(Omc * Omc), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * 0.5), $MachinePrecision]], $MachinePrecision] / t$95$m), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], N[ArcSin[N[Sqrt[N[(1.0 / N[(N[(N[(t$95$m / l$95$m), $MachinePrecision] * N[(t$95$m / l$95$m), $MachinePrecision]), $MachinePrecision] * 2.0 + 1.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
t_m = \left|t\right|
\\
l_m = \left|\ell\right|

\\
\begin{array}{l}
\mathbf{if}\;\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t\_m}{l\_m}\right)}^{2}}}\right) \leq 0:\\
\;\;\;\;\sin^{-1} \left(l\_m \cdot \frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot 0.5}}{t\_m}\right)\\

\mathbf{else}:\\
\;\;\;\;\sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t\_m}{l\_m} \cdot \frac{t\_m}{l\_m}, 2, 1\right)}}\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (asin.f64 (sqrt.f64 (/.f64 (-.f64 #s(literal 1 binary64) (pow.f64 (/.f64 Om Omc) #s(literal 2 binary64))) (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 2 binary64) (pow.f64 (/.f64 t l) #s(literal 2 binary64))))))) < 0.0

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Taylor expanded in t around inf

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right)} \]
    3. Step-by-step derivation
      1. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{\color{blue}{t}}\right) \]
      2. lower-sqrt.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right) \]
      3. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      5. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      6. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      7. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      8. lower--.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      9. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      10. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      11. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      12. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      13. lower-*.f6430.2

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right) \]
    4. Applied rewrites30.2%

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right)} \]
    5. Taylor expanded in l around 0

      \[\leadsto \sin^{-1} \left(\frac{\ell \cdot \sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)}}{\color{blue}{t}}\right) \]
    6. Step-by-step derivation
      1. associate-/l*N/A

        \[\leadsto \sin^{-1} \left(\ell \cdot \frac{\sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)}}{\color{blue}{t}}\right) \]
      2. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\ell \cdot \frac{\sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)}}{\color{blue}{t}}\right) \]
      3. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\ell \cdot \frac{\sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)}}{t}\right) \]
      4. lower-sqrt.f64N/A

        \[\leadsto \sin^{-1} \left(\ell \cdot \frac{\sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)}}{t}\right) \]
      5. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\ell \cdot \frac{\sqrt{\left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right) \cdot \frac{1}{2}}}{t}\right) \]
      6. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\ell \cdot \frac{\sqrt{\left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right) \cdot \frac{1}{2}}}{t}\right) \]
      7. lower--.f64N/A

        \[\leadsto \sin^{-1} \left(\ell \cdot \frac{\sqrt{\left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right) \cdot \frac{1}{2}}}{t}\right) \]
      8. pow2N/A

        \[\leadsto \sin^{-1} \left(\ell \cdot \frac{\sqrt{\left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right) \cdot \frac{1}{2}}}{t}\right) \]
      9. associate-/l*N/A

        \[\leadsto \sin^{-1} \left(\ell \cdot \frac{\sqrt{\left(1 - Om \cdot \frac{Om}{{Omc}^{2}}\right) \cdot \frac{1}{2}}}{t}\right) \]
      10. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\ell \cdot \frac{\sqrt{\left(1 - Om \cdot \frac{Om}{{Omc}^{2}}\right) \cdot \frac{1}{2}}}{t}\right) \]
      11. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\ell \cdot \frac{\sqrt{\left(1 - Om \cdot \frac{Om}{{Omc}^{2}}\right) \cdot \frac{1}{2}}}{t}\right) \]
      12. pow2N/A

        \[\leadsto \sin^{-1} \left(\ell \cdot \frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot \frac{1}{2}}}{t}\right) \]
      13. lift-*.f6445.7

        \[\leadsto \sin^{-1} \left(\ell \cdot \frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot 0.5}}{t}\right) \]
    7. Applied rewrites45.7%

      \[\leadsto \sin^{-1} \left(\ell \cdot \color{blue}{\frac{\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot 0.5}}{t}}\right) \]

    if 0.0 < (asin.f64 (sqrt.f64 (/.f64 (-.f64 #s(literal 1 binary64) (pow.f64 (/.f64 Om Omc) #s(literal 2 binary64))) (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 2 binary64) (pow.f64 (/.f64 t l) #s(literal 2 binary64)))))))

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\color{blue}{\left(\frac{t}{\ell}\right)}}^{2}}}\right) \]
      2. lift-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{{\left(\frac{t}{\ell}\right)}^{2}}}}\right) \]
      3. metadata-evalN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{\color{blue}{\left(\mathsf{neg}\left(-2\right)\right)}}}}\right) \]
      4. pow-negN/A

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

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      6. lower-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{\color{blue}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      7. lift-/.f6484.9

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{{\color{blue}{\left(\frac{t}{\ell}\right)}}^{-2}}}}\right) \]
    3. Applied rewrites84.9%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
    4. Taylor expanded in Om around 0

      \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}}\right) \]
    5. Step-by-step derivation
      1. pow-flipN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      2. metadata-evalN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      3. unpow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      4. times-fracN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      5. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      6. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      7. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      8. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      9. times-fracN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      10. unpow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      11. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\color{blue}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}}\right) \]
      12. +-commutativeN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{2 \cdot \frac{{t}^{2}}{{\ell}^{2}} + \color{blue}{1}}}\right) \]
      13. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\frac{{t}^{2}}{{\ell}^{2}} \cdot 2 + 1}}\right) \]
      14. lower-fma.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{{t}^{2}}{{\ell}^{2}}, \color{blue}{2}, 1\right)}}\right) \]
    6. Applied rewrites72.7%

      \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}}\right) \]
    7. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}\right) \]
      2. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}\right) \]
      3. associate-/r*N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      4. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      5. lower-/.f6481.2

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
    8. Applied rewrites81.2%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
    9. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      2. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      3. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      4. associate-*r/N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t \cdot \frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      5. associate-*l/N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
      6. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
      7. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
      8. lift-*.f6484.2

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
    10. Applied rewrites84.2%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 6: 92.4% accurate, 1.1× speedup?

\[\begin{array}{l} t_m = \left|t\right| \\ l_m = \left|\ell\right| \\ \begin{array}{l} \mathbf{if}\;1 + 2 \cdot {\left(\frac{t\_m}{l\_m}\right)}^{2} \leq 6 \cdot 10^{+304}:\\ \;\;\;\;\sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t\_m}{l\_m} \cdot \frac{t\_m}{l\_m}, 2, 1\right)}}\right)\\ \mathbf{else}:\\ \;\;\;\;\sin^{-1} \left(\frac{\sqrt{\left(l\_m \cdot l\_m\right) \cdot 0.5}}{t\_m}\right)\\ \end{array} \end{array} \]
t_m = (fabs.f64 t)
l_m = (fabs.f64 l)
(FPCore (t_m l_m Om Omc)
 :precision binary64
 (if (<= (+ 1.0 (* 2.0 (pow (/ t_m l_m) 2.0))) 6e+304)
   (asin (sqrt (/ 1.0 (fma (* (/ t_m l_m) (/ t_m l_m)) 2.0 1.0))))
   (asin (/ (sqrt (* (* l_m l_m) 0.5)) t_m))))
t_m = fabs(t);
l_m = fabs(l);
double code(double t_m, double l_m, double Om, double Omc) {
	double tmp;
	if ((1.0 + (2.0 * pow((t_m / l_m), 2.0))) <= 6e+304) {
		tmp = asin(sqrt((1.0 / fma(((t_m / l_m) * (t_m / l_m)), 2.0, 1.0))));
	} else {
		tmp = asin((sqrt(((l_m * l_m) * 0.5)) / t_m));
	}
	return tmp;
}
t_m = abs(t)
l_m = abs(l)
function code(t_m, l_m, Om, Omc)
	tmp = 0.0
	if (Float64(1.0 + Float64(2.0 * (Float64(t_m / l_m) ^ 2.0))) <= 6e+304)
		tmp = asin(sqrt(Float64(1.0 / fma(Float64(Float64(t_m / l_m) * Float64(t_m / l_m)), 2.0, 1.0))));
	else
		tmp = asin(Float64(sqrt(Float64(Float64(l_m * l_m) * 0.5)) / t_m));
	end
	return tmp
end
t_m = N[Abs[t], $MachinePrecision]
l_m = N[Abs[l], $MachinePrecision]
code[t$95$m_, l$95$m_, Om_, Omc_] := If[LessEqual[N[(1.0 + N[(2.0 * N[Power[N[(t$95$m / l$95$m), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 6e+304], N[ArcSin[N[Sqrt[N[(1.0 / N[(N[(N[(t$95$m / l$95$m), $MachinePrecision] * N[(t$95$m / l$95$m), $MachinePrecision]), $MachinePrecision] * 2.0 + 1.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], N[ArcSin[N[(N[Sqrt[N[(N[(l$95$m * l$95$m), $MachinePrecision] * 0.5), $MachinePrecision]], $MachinePrecision] / t$95$m), $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
t_m = \left|t\right|
\\
l_m = \left|\ell\right|

\\
\begin{array}{l}
\mathbf{if}\;1 + 2 \cdot {\left(\frac{t\_m}{l\_m}\right)}^{2} \leq 6 \cdot 10^{+304}:\\
\;\;\;\;\sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t\_m}{l\_m} \cdot \frac{t\_m}{l\_m}, 2, 1\right)}}\right)\\

\mathbf{else}:\\
\;\;\;\;\sin^{-1} \left(\frac{\sqrt{\left(l\_m \cdot l\_m\right) \cdot 0.5}}{t\_m}\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 2 binary64) (pow.f64 (/.f64 t l) #s(literal 2 binary64)))) < 5.9999999999999996e304

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\color{blue}{\left(\frac{t}{\ell}\right)}}^{2}}}\right) \]
      2. lift-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{{\left(\frac{t}{\ell}\right)}^{2}}}}\right) \]
      3. metadata-evalN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{\color{blue}{\left(\mathsf{neg}\left(-2\right)\right)}}}}\right) \]
      4. pow-negN/A

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

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      6. lower-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{\color{blue}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      7. lift-/.f6484.9

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{{\color{blue}{\left(\frac{t}{\ell}\right)}}^{-2}}}}\right) \]
    3. Applied rewrites84.9%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
    4. Taylor expanded in Om around 0

      \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}}\right) \]
    5. Step-by-step derivation
      1. pow-flipN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      2. metadata-evalN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      3. unpow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      4. times-fracN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      5. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      6. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      7. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      8. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      9. times-fracN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      10. unpow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      11. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\color{blue}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}}\right) \]
      12. +-commutativeN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{2 \cdot \frac{{t}^{2}}{{\ell}^{2}} + \color{blue}{1}}}\right) \]
      13. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\frac{{t}^{2}}{{\ell}^{2}} \cdot 2 + 1}}\right) \]
      14. lower-fma.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{{t}^{2}}{{\ell}^{2}}, \color{blue}{2}, 1\right)}}\right) \]
    6. Applied rewrites72.7%

      \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}}\right) \]
    7. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}\right) \]
      2. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}\right) \]
      3. associate-/r*N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      4. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      5. lower-/.f6481.2

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
    8. Applied rewrites81.2%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
    9. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      2. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      3. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      4. associate-*r/N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t \cdot \frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      5. associate-*l/N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
      6. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
      7. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
      8. lift-*.f6484.2

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]
    10. Applied rewrites84.2%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{t}{\ell} \cdot \frac{t}{\ell}, 2, 1\right)}}\right) \]

    if 5.9999999999999996e304 < (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 2 binary64) (pow.f64 (/.f64 t l) #s(literal 2 binary64))))

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Taylor expanded in t around inf

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right)} \]
    3. Step-by-step derivation
      1. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{\color{blue}{t}}\right) \]
      2. lower-sqrt.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right) \]
      3. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      5. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      6. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      7. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      8. lower--.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      9. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      10. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      11. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      12. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      13. lower-*.f6430.2

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right) \]
    4. Applied rewrites30.2%

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right)} \]
    5. Taylor expanded in Om around 0

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot {\ell}^{2}}}{t}\right) \]
    6. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{{\ell}^{2} \cdot \frac{1}{2}}}{t}\right) \]
      2. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{{\ell}^{2} \cdot \frac{1}{2}}}{t}\right) \]
      3. pow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot \frac{1}{2}}}{t}\right) \]
      4. lift-*.f6433.9

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot 0.5}}{t}\right) \]
    7. Applied rewrites33.9%

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot 0.5}}{t}\right) \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 7: 89.5% accurate, 0.7× speedup?

\[\begin{array}{l} t_m = \left|t\right| \\ l_m = \left|\ell\right| \\ \begin{array}{l} \mathbf{if}\;\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t\_m}{l\_m}\right)}^{2}}}\right) \leq 5 \cdot 10^{-153}:\\ \;\;\;\;\sin^{-1} \left(\frac{\sqrt{\left(l\_m \cdot l\_m\right) \cdot 0.5}}{t\_m}\right)\\ \mathbf{else}:\\ \;\;\;\;\sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t\_m \cdot \frac{\frac{t\_m}{l\_m}}{l\_m}, 2, 1\right)}}\right)\\ \end{array} \end{array} \]
t_m = (fabs.f64 t)
l_m = (fabs.f64 l)
(FPCore (t_m l_m Om Omc)
 :precision binary64
 (if (<=
      (asin
       (sqrt
        (/
         (- 1.0 (pow (/ Om Omc) 2.0))
         (+ 1.0 (* 2.0 (pow (/ t_m l_m) 2.0))))))
      5e-153)
   (asin (/ (sqrt (* (* l_m l_m) 0.5)) t_m))
   (asin (sqrt (/ 1.0 (fma (* t_m (/ (/ t_m l_m) l_m)) 2.0 1.0))))))
t_m = fabs(t);
l_m = fabs(l);
double code(double t_m, double l_m, double Om, double Omc) {
	double tmp;
	if (asin(sqrt(((1.0 - pow((Om / Omc), 2.0)) / (1.0 + (2.0 * pow((t_m / l_m), 2.0)))))) <= 5e-153) {
		tmp = asin((sqrt(((l_m * l_m) * 0.5)) / t_m));
	} else {
		tmp = asin(sqrt((1.0 / fma((t_m * ((t_m / l_m) / l_m)), 2.0, 1.0))));
	}
	return tmp;
}
t_m = abs(t)
l_m = abs(l)
function code(t_m, l_m, Om, Omc)
	tmp = 0.0
	if (asin(sqrt(Float64(Float64(1.0 - (Float64(Om / Omc) ^ 2.0)) / Float64(1.0 + Float64(2.0 * (Float64(t_m / l_m) ^ 2.0)))))) <= 5e-153)
		tmp = asin(Float64(sqrt(Float64(Float64(l_m * l_m) * 0.5)) / t_m));
	else
		tmp = asin(sqrt(Float64(1.0 / fma(Float64(t_m * Float64(Float64(t_m / l_m) / l_m)), 2.0, 1.0))));
	end
	return tmp
end
t_m = N[Abs[t], $MachinePrecision]
l_m = N[Abs[l], $MachinePrecision]
code[t$95$m_, l$95$m_, Om_, Omc_] := If[LessEqual[N[ArcSin[N[Sqrt[N[(N[(1.0 - N[Power[N[(Om / Omc), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] / N[(1.0 + N[(2.0 * N[Power[N[(t$95$m / l$95$m), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], 5e-153], N[ArcSin[N[(N[Sqrt[N[(N[(l$95$m * l$95$m), $MachinePrecision] * 0.5), $MachinePrecision]], $MachinePrecision] / t$95$m), $MachinePrecision]], $MachinePrecision], N[ArcSin[N[Sqrt[N[(1.0 / N[(N[(t$95$m * N[(N[(t$95$m / l$95$m), $MachinePrecision] / l$95$m), $MachinePrecision]), $MachinePrecision] * 2.0 + 1.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
t_m = \left|t\right|
\\
l_m = \left|\ell\right|

\\
\begin{array}{l}
\mathbf{if}\;\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t\_m}{l\_m}\right)}^{2}}}\right) \leq 5 \cdot 10^{-153}:\\
\;\;\;\;\sin^{-1} \left(\frac{\sqrt{\left(l\_m \cdot l\_m\right) \cdot 0.5}}{t\_m}\right)\\

\mathbf{else}:\\
\;\;\;\;\sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t\_m \cdot \frac{\frac{t\_m}{l\_m}}{l\_m}, 2, 1\right)}}\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (asin.f64 (sqrt.f64 (/.f64 (-.f64 #s(literal 1 binary64) (pow.f64 (/.f64 Om Omc) #s(literal 2 binary64))) (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 2 binary64) (pow.f64 (/.f64 t l) #s(literal 2 binary64))))))) < 5.00000000000000033e-153

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Taylor expanded in t around inf

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right)} \]
    3. Step-by-step derivation
      1. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{\color{blue}{t}}\right) \]
      2. lower-sqrt.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right) \]
      3. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      5. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      6. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      7. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      8. lower--.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      9. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      10. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      11. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      12. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      13. lower-*.f6430.2

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right) \]
    4. Applied rewrites30.2%

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right)} \]
    5. Taylor expanded in Om around 0

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot {\ell}^{2}}}{t}\right) \]
    6. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{{\ell}^{2} \cdot \frac{1}{2}}}{t}\right) \]
      2. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{{\ell}^{2} \cdot \frac{1}{2}}}{t}\right) \]
      3. pow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot \frac{1}{2}}}{t}\right) \]
      4. lift-*.f6433.9

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot 0.5}}{t}\right) \]
    7. Applied rewrites33.9%

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot 0.5}}{t}\right) \]

    if 5.00000000000000033e-153 < (asin.f64 (sqrt.f64 (/.f64 (-.f64 #s(literal 1 binary64) (pow.f64 (/.f64 Om Omc) #s(literal 2 binary64))) (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 2 binary64) (pow.f64 (/.f64 t l) #s(literal 2 binary64)))))))

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\color{blue}{\left(\frac{t}{\ell}\right)}}^{2}}}\right) \]
      2. lift-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{{\left(\frac{t}{\ell}\right)}^{2}}}}\right) \]
      3. metadata-evalN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{\color{blue}{\left(\mathsf{neg}\left(-2\right)\right)}}}}\right) \]
      4. pow-negN/A

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

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      6. lower-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{\color{blue}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      7. lift-/.f6484.9

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{{\color{blue}{\left(\frac{t}{\ell}\right)}}^{-2}}}}\right) \]
    3. Applied rewrites84.9%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
    4. Taylor expanded in Om around 0

      \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}}\right) \]
    5. Step-by-step derivation
      1. pow-flipN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      2. metadata-evalN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      3. unpow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      4. times-fracN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      5. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      6. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      7. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      8. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      9. times-fracN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      10. unpow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      11. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\color{blue}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}}\right) \]
      12. +-commutativeN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{2 \cdot \frac{{t}^{2}}{{\ell}^{2}} + \color{blue}{1}}}\right) \]
      13. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\frac{{t}^{2}}{{\ell}^{2}} \cdot 2 + 1}}\right) \]
      14. lower-fma.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{{t}^{2}}{{\ell}^{2}}, \color{blue}{2}, 1\right)}}\right) \]
    6. Applied rewrites72.7%

      \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}}\right) \]
    7. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}\right) \]
      2. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}\right) \]
      3. associate-/r*N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      4. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      5. lower-/.f6481.2

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
    8. Applied rewrites81.2%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 8: 82.5% accurate, 0.7× speedup?

\[\begin{array}{l} t_m = \left|t\right| \\ l_m = \left|\ell\right| \\ \begin{array}{l} \mathbf{if}\;\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t\_m}{l\_m}\right)}^{2}}}\right) \leq 5 \cdot 10^{-12}:\\ \;\;\;\;\sin^{-1} \left(\frac{\sqrt{\left(l\_m \cdot l\_m\right) \cdot 0.5}}{t\_m}\right)\\ \mathbf{else}:\\ \;\;\;\;\sin^{-1} \left(\sqrt{1}\right)\\ \end{array} \end{array} \]
t_m = (fabs.f64 t)
l_m = (fabs.f64 l)
(FPCore (t_m l_m Om Omc)
 :precision binary64
 (if (<=
      (asin
       (sqrt
        (/
         (- 1.0 (pow (/ Om Omc) 2.0))
         (+ 1.0 (* 2.0 (pow (/ t_m l_m) 2.0))))))
      5e-12)
   (asin (/ (sqrt (* (* l_m l_m) 0.5)) t_m))
   (asin (sqrt 1.0))))
t_m = fabs(t);
l_m = fabs(l);
double code(double t_m, double l_m, double Om, double Omc) {
	double tmp;
	if (asin(sqrt(((1.0 - pow((Om / Omc), 2.0)) / (1.0 + (2.0 * pow((t_m / l_m), 2.0)))))) <= 5e-12) {
		tmp = asin((sqrt(((l_m * l_m) * 0.5)) / t_m));
	} else {
		tmp = asin(sqrt(1.0));
	}
	return tmp;
}
t_m =     private
l_m =     private
module fmin_fmax_functions
    implicit none
    private
    public fmax
    public fmin

    interface fmax
        module procedure fmax88
        module procedure fmax44
        module procedure fmax84
        module procedure fmax48
    end interface
    interface fmin
        module procedure fmin88
        module procedure fmin44
        module procedure fmin84
        module procedure fmin48
    end interface
contains
    real(8) function fmax88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(4) function fmax44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(8) function fmax84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmax48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
    end function
    real(8) function fmin88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(4) function fmin44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(8) function fmin84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmin48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
    end function
end module

real(8) function code(t_m, l_m, om, omc)
use fmin_fmax_functions
    real(8), intent (in) :: t_m
    real(8), intent (in) :: l_m
    real(8), intent (in) :: om
    real(8), intent (in) :: omc
    real(8) :: tmp
    if (asin(sqrt(((1.0d0 - ((om / omc) ** 2.0d0)) / (1.0d0 + (2.0d0 * ((t_m / l_m) ** 2.0d0)))))) <= 5d-12) then
        tmp = asin((sqrt(((l_m * l_m) * 0.5d0)) / t_m))
    else
        tmp = asin(sqrt(1.0d0))
    end if
    code = tmp
end function
t_m = Math.abs(t);
l_m = Math.abs(l);
public static double code(double t_m, double l_m, double Om, double Omc) {
	double tmp;
	if (Math.asin(Math.sqrt(((1.0 - Math.pow((Om / Omc), 2.0)) / (1.0 + (2.0 * Math.pow((t_m / l_m), 2.0)))))) <= 5e-12) {
		tmp = Math.asin((Math.sqrt(((l_m * l_m) * 0.5)) / t_m));
	} else {
		tmp = Math.asin(Math.sqrt(1.0));
	}
	return tmp;
}
t_m = math.fabs(t)
l_m = math.fabs(l)
def code(t_m, l_m, Om, Omc):
	tmp = 0
	if math.asin(math.sqrt(((1.0 - math.pow((Om / Omc), 2.0)) / (1.0 + (2.0 * math.pow((t_m / l_m), 2.0)))))) <= 5e-12:
		tmp = math.asin((math.sqrt(((l_m * l_m) * 0.5)) / t_m))
	else:
		tmp = math.asin(math.sqrt(1.0))
	return tmp
t_m = abs(t)
l_m = abs(l)
function code(t_m, l_m, Om, Omc)
	tmp = 0.0
	if (asin(sqrt(Float64(Float64(1.0 - (Float64(Om / Omc) ^ 2.0)) / Float64(1.0 + Float64(2.0 * (Float64(t_m / l_m) ^ 2.0)))))) <= 5e-12)
		tmp = asin(Float64(sqrt(Float64(Float64(l_m * l_m) * 0.5)) / t_m));
	else
		tmp = asin(sqrt(1.0));
	end
	return tmp
end
t_m = abs(t);
l_m = abs(l);
function tmp_2 = code(t_m, l_m, Om, Omc)
	tmp = 0.0;
	if (asin(sqrt(((1.0 - ((Om / Omc) ^ 2.0)) / (1.0 + (2.0 * ((t_m / l_m) ^ 2.0)))))) <= 5e-12)
		tmp = asin((sqrt(((l_m * l_m) * 0.5)) / t_m));
	else
		tmp = asin(sqrt(1.0));
	end
	tmp_2 = tmp;
end
t_m = N[Abs[t], $MachinePrecision]
l_m = N[Abs[l], $MachinePrecision]
code[t$95$m_, l$95$m_, Om_, Omc_] := If[LessEqual[N[ArcSin[N[Sqrt[N[(N[(1.0 - N[Power[N[(Om / Omc), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] / N[(1.0 + N[(2.0 * N[Power[N[(t$95$m / l$95$m), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], 5e-12], N[ArcSin[N[(N[Sqrt[N[(N[(l$95$m * l$95$m), $MachinePrecision] * 0.5), $MachinePrecision]], $MachinePrecision] / t$95$m), $MachinePrecision]], $MachinePrecision], N[ArcSin[N[Sqrt[1.0], $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
t_m = \left|t\right|
\\
l_m = \left|\ell\right|

\\
\begin{array}{l}
\mathbf{if}\;\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t\_m}{l\_m}\right)}^{2}}}\right) \leq 5 \cdot 10^{-12}:\\
\;\;\;\;\sin^{-1} \left(\frac{\sqrt{\left(l\_m \cdot l\_m\right) \cdot 0.5}}{t\_m}\right)\\

\mathbf{else}:\\
\;\;\;\;\sin^{-1} \left(\sqrt{1}\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (asin.f64 (sqrt.f64 (/.f64 (-.f64 #s(literal 1 binary64) (pow.f64 (/.f64 Om Omc) #s(literal 2 binary64))) (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 2 binary64) (pow.f64 (/.f64 t l) #s(literal 2 binary64))))))) < 4.9999999999999997e-12

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Taylor expanded in t around inf

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right)} \]
    3. Step-by-step derivation
      1. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{\color{blue}{t}}\right) \]
      2. lower-sqrt.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right) \]
      3. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      5. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      6. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      7. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      8. lower--.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      9. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      10. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      11. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      12. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      13. lower-*.f6430.2

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right) \]
    4. Applied rewrites30.2%

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right)} \]
    5. Taylor expanded in Om around 0

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot {\ell}^{2}}}{t}\right) \]
    6. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{{\ell}^{2} \cdot \frac{1}{2}}}{t}\right) \]
      2. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{{\ell}^{2} \cdot \frac{1}{2}}}{t}\right) \]
      3. pow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot \frac{1}{2}}}{t}\right) \]
      4. lift-*.f6433.9

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot 0.5}}{t}\right) \]
    7. Applied rewrites33.9%

      \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\ell \cdot \ell\right) \cdot 0.5}}{t}\right) \]

    if 4.9999999999999997e-12 < (asin.f64 (sqrt.f64 (/.f64 (-.f64 #s(literal 1 binary64) (pow.f64 (/.f64 Om Omc) #s(literal 2 binary64))) (+.f64 #s(literal 1 binary64) (*.f64 #s(literal 2 binary64) (pow.f64 (/.f64 t l) #s(literal 2 binary64)))))))

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\color{blue}{\left(\frac{t}{\ell}\right)}}^{2}}}\right) \]
      2. lift-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{{\left(\frac{t}{\ell}\right)}^{2}}}}\right) \]
      3. metadata-evalN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{\color{blue}{\left(\mathsf{neg}\left(-2\right)\right)}}}}\right) \]
      4. pow-negN/A

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

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      6. lower-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{\color{blue}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      7. lift-/.f6484.9

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{{\color{blue}{\left(\frac{t}{\ell}\right)}}^{-2}}}}\right) \]
    3. Applied rewrites84.9%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
    4. Taylor expanded in Om around 0

      \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}}\right) \]
    5. Step-by-step derivation
      1. pow-flipN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      2. metadata-evalN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      3. unpow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      4. times-fracN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      5. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      6. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      7. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      8. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      9. times-fracN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      10. unpow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      11. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\color{blue}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}}\right) \]
      12. +-commutativeN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{2 \cdot \frac{{t}^{2}}{{\ell}^{2}} + \color{blue}{1}}}\right) \]
      13. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\frac{{t}^{2}}{{\ell}^{2}} \cdot 2 + 1}}\right) \]
      14. lower-fma.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{{t}^{2}}{{\ell}^{2}}, \color{blue}{2}, 1\right)}}\right) \]
    6. Applied rewrites72.7%

      \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}}\right) \]
    7. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}\right) \]
      2. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}\right) \]
      3. associate-/r*N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      4. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      5. lower-/.f6481.2

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
    8. Applied rewrites81.2%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
    9. Taylor expanded in t around 0

      \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
    10. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
      2. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
      3. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
      4. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
      5. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
      6. lift-/.f6451.5

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
    11. Applied rewrites51.5%

      \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 9: 63.1% accurate, 2.6× speedup?

\[\begin{array}{l} t_m = \left|t\right| \\ l_m = \left|\ell\right| \\ \begin{array}{l} \mathbf{if}\;\frac{t\_m}{l\_m} \leq 10^{+203}:\\ \;\;\;\;\sin^{-1} \left(\sqrt{1}\right)\\ \mathbf{else}:\\ \;\;\;\;\sin^{-1} \left(\frac{-\sqrt{0.5} \cdot l\_m}{t\_m}\right)\\ \end{array} \end{array} \]
t_m = (fabs.f64 t)
l_m = (fabs.f64 l)
(FPCore (t_m l_m Om Omc)
 :precision binary64
 (if (<= (/ t_m l_m) 1e+203)
   (asin (sqrt 1.0))
   (asin (/ (- (* (sqrt 0.5) l_m)) t_m))))
t_m = fabs(t);
l_m = fabs(l);
double code(double t_m, double l_m, double Om, double Omc) {
	double tmp;
	if ((t_m / l_m) <= 1e+203) {
		tmp = asin(sqrt(1.0));
	} else {
		tmp = asin((-(sqrt(0.5) * l_m) / t_m));
	}
	return tmp;
}
t_m =     private
l_m =     private
module fmin_fmax_functions
    implicit none
    private
    public fmax
    public fmin

    interface fmax
        module procedure fmax88
        module procedure fmax44
        module procedure fmax84
        module procedure fmax48
    end interface
    interface fmin
        module procedure fmin88
        module procedure fmin44
        module procedure fmin84
        module procedure fmin48
    end interface
contains
    real(8) function fmax88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(4) function fmax44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, max(x, y), y /= y), x /= x)
    end function
    real(8) function fmax84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmax48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
    end function
    real(8) function fmin88(x, y) result (res)
        real(8), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(4) function fmin44(x, y) result (res)
        real(4), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(y, merge(x, min(x, y), y /= y), x /= x)
    end function
    real(8) function fmin84(x, y) result(res)
        real(8), intent (in) :: x
        real(4), intent (in) :: y
        res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
    end function
    real(8) function fmin48(x, y) result(res)
        real(4), intent (in) :: x
        real(8), intent (in) :: y
        res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
    end function
end module

real(8) function code(t_m, l_m, om, omc)
use fmin_fmax_functions
    real(8), intent (in) :: t_m
    real(8), intent (in) :: l_m
    real(8), intent (in) :: om
    real(8), intent (in) :: omc
    real(8) :: tmp
    if ((t_m / l_m) <= 1d+203) then
        tmp = asin(sqrt(1.0d0))
    else
        tmp = asin((-(sqrt(0.5d0) * l_m) / t_m))
    end if
    code = tmp
end function
t_m = Math.abs(t);
l_m = Math.abs(l);
public static double code(double t_m, double l_m, double Om, double Omc) {
	double tmp;
	if ((t_m / l_m) <= 1e+203) {
		tmp = Math.asin(Math.sqrt(1.0));
	} else {
		tmp = Math.asin((-(Math.sqrt(0.5) * l_m) / t_m));
	}
	return tmp;
}
t_m = math.fabs(t)
l_m = math.fabs(l)
def code(t_m, l_m, Om, Omc):
	tmp = 0
	if (t_m / l_m) <= 1e+203:
		tmp = math.asin(math.sqrt(1.0))
	else:
		tmp = math.asin((-(math.sqrt(0.5) * l_m) / t_m))
	return tmp
t_m = abs(t)
l_m = abs(l)
function code(t_m, l_m, Om, Omc)
	tmp = 0.0
	if (Float64(t_m / l_m) <= 1e+203)
		tmp = asin(sqrt(1.0));
	else
		tmp = asin(Float64(Float64(-Float64(sqrt(0.5) * l_m)) / t_m));
	end
	return tmp
end
t_m = abs(t);
l_m = abs(l);
function tmp_2 = code(t_m, l_m, Om, Omc)
	tmp = 0.0;
	if ((t_m / l_m) <= 1e+203)
		tmp = asin(sqrt(1.0));
	else
		tmp = asin((-(sqrt(0.5) * l_m) / t_m));
	end
	tmp_2 = tmp;
end
t_m = N[Abs[t], $MachinePrecision]
l_m = N[Abs[l], $MachinePrecision]
code[t$95$m_, l$95$m_, Om_, Omc_] := If[LessEqual[N[(t$95$m / l$95$m), $MachinePrecision], 1e+203], N[ArcSin[N[Sqrt[1.0], $MachinePrecision]], $MachinePrecision], N[ArcSin[N[((-N[(N[Sqrt[0.5], $MachinePrecision] * l$95$m), $MachinePrecision]) / t$95$m), $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
t_m = \left|t\right|
\\
l_m = \left|\ell\right|

\\
\begin{array}{l}
\mathbf{if}\;\frac{t\_m}{l\_m} \leq 10^{+203}:\\
\;\;\;\;\sin^{-1} \left(\sqrt{1}\right)\\

\mathbf{else}:\\
\;\;\;\;\sin^{-1} \left(\frac{-\sqrt{0.5} \cdot l\_m}{t\_m}\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (/.f64 t l) < 9.9999999999999999e202

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\color{blue}{\left(\frac{t}{\ell}\right)}}^{2}}}\right) \]
      2. lift-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{{\left(\frac{t}{\ell}\right)}^{2}}}}\right) \]
      3. metadata-evalN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{\color{blue}{\left(\mathsf{neg}\left(-2\right)\right)}}}}\right) \]
      4. pow-negN/A

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

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      6. lower-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{\color{blue}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      7. lift-/.f6484.9

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{{\color{blue}{\left(\frac{t}{\ell}\right)}}^{-2}}}}\right) \]
    3. Applied rewrites84.9%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
    4. Taylor expanded in Om around 0

      \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}}\right) \]
    5. Step-by-step derivation
      1. pow-flipN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      2. metadata-evalN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      3. unpow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      4. times-fracN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      5. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      6. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      7. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      8. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      9. times-fracN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      10. unpow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      11. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\color{blue}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}}\right) \]
      12. +-commutativeN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{2 \cdot \frac{{t}^{2}}{{\ell}^{2}} + \color{blue}{1}}}\right) \]
      13. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\frac{{t}^{2}}{{\ell}^{2}} \cdot 2 + 1}}\right) \]
      14. lower-fma.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{{t}^{2}}{{\ell}^{2}}, \color{blue}{2}, 1\right)}}\right) \]
    6. Applied rewrites72.7%

      \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}}\right) \]
    7. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}\right) \]
      2. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}\right) \]
      3. associate-/r*N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      4. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      5. lower-/.f6481.2

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
    8. Applied rewrites81.2%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
    9. Taylor expanded in t around 0

      \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
    10. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
      2. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
      3. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
      4. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
      5. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
      6. lift-/.f6451.5

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
    11. Applied rewrites51.5%

      \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]

    if 9.9999999999999999e202 < (/.f64 t l)

    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Taylor expanded in t around inf

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right)} \]
    3. Step-by-step derivation
      1. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{\color{blue}{t}}\right) \]
      2. lower-sqrt.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\frac{1}{2} \cdot \left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right)}}{t}\right) \]
      3. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      5. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left({\ell}^{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      6. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      7. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      8. lower--.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      9. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      10. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      11. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      12. unpow2N/A

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot \frac{1}{2}}}{t}\right) \]
      13. lower-*.f6430.2

        \[\leadsto \sin^{-1} \left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right) \]
    4. Applied rewrites30.2%

      \[\leadsto \sin^{-1} \color{blue}{\left(\frac{\sqrt{\left(\left(\ell \cdot \ell\right) \cdot \left(1 - \frac{Om \cdot Om}{Omc \cdot Omc}\right)\right) \cdot 0.5}}{t}\right)} \]
    5. Taylor expanded in l around -inf

      \[\leadsto \sin^{-1} \left(\frac{-1 \cdot \left(\ell \cdot \sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)}\right)}{t}\right) \]
    6. Step-by-step derivation
      1. mul-1-negN/A

        \[\leadsto \sin^{-1} \left(\frac{\mathsf{neg}\left(\ell \cdot \sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)}\right)}{t}\right) \]
      2. lower-neg.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{-\ell \cdot \sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)}}{t}\right) \]
      3. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{-\sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{-\sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      5. lower-sqrt.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{-\sqrt{\frac{1}{2} \cdot \left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right)} \cdot \ell}{t}\right) \]
      6. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\frac{-\sqrt{\left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      7. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{-\sqrt{\left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      8. lower--.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{-\sqrt{\left(1 - \frac{{Om}^{2}}{{Omc}^{2}}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      9. pow2N/A

        \[\leadsto \sin^{-1} \left(\frac{-\sqrt{\left(1 - \frac{Om \cdot Om}{{Omc}^{2}}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      10. associate-/l*N/A

        \[\leadsto \sin^{-1} \left(\frac{-\sqrt{\left(1 - Om \cdot \frac{Om}{{Omc}^{2}}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      11. lower-*.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{-\sqrt{\left(1 - Om \cdot \frac{Om}{{Omc}^{2}}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      12. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\frac{-\sqrt{\left(1 - Om \cdot \frac{Om}{{Omc}^{2}}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      13. pow2N/A

        \[\leadsto \sin^{-1} \left(\frac{-\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot \frac{1}{2}} \cdot \ell}{t}\right) \]
      14. lift-*.f6412.4

        \[\leadsto \sin^{-1} \left(\frac{-\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot 0.5} \cdot \ell}{t}\right) \]
    7. Applied rewrites12.4%

      \[\leadsto \sin^{-1} \left(\frac{-\sqrt{\left(1 - Om \cdot \frac{Om}{Omc \cdot Omc}\right) \cdot 0.5} \cdot \ell}{t}\right) \]
    8. Taylor expanded in Om around 0

      \[\leadsto \sin^{-1} \left(\frac{-\sqrt{\frac{1}{2}} \cdot \ell}{t}\right) \]
    9. Step-by-step derivation
      1. Applied rewrites13.0%

        \[\leadsto \sin^{-1} \left(\frac{-\sqrt{0.5} \cdot \ell}{t}\right) \]
    10. Recombined 2 regimes into one program.
    11. Add Preprocessing

    Alternative 10: 51.5% accurate, 7.7× speedup?

    \[\begin{array}{l} t_m = \left|t\right| \\ l_m = \left|\ell\right| \\ \sin^{-1} \left(\sqrt{1}\right) \end{array} \]
    t_m = (fabs.f64 t)
    l_m = (fabs.f64 l)
    (FPCore (t_m l_m Om Omc) :precision binary64 (asin (sqrt 1.0)))
    t_m = fabs(t);
    l_m = fabs(l);
    double code(double t_m, double l_m, double Om, double Omc) {
    	return asin(sqrt(1.0));
    }
    
    t_m =     private
    l_m =     private
    module fmin_fmax_functions
        implicit none
        private
        public fmax
        public fmin
    
        interface fmax
            module procedure fmax88
            module procedure fmax44
            module procedure fmax84
            module procedure fmax48
        end interface
        interface fmin
            module procedure fmin88
            module procedure fmin44
            module procedure fmin84
            module procedure fmin48
        end interface
    contains
        real(8) function fmax88(x, y) result (res)
            real(8), intent (in) :: x
            real(8), intent (in) :: y
            res = merge(y, merge(x, max(x, y), y /= y), x /= x)
        end function
        real(4) function fmax44(x, y) result (res)
            real(4), intent (in) :: x
            real(4), intent (in) :: y
            res = merge(y, merge(x, max(x, y), y /= y), x /= x)
        end function
        real(8) function fmax84(x, y) result(res)
            real(8), intent (in) :: x
            real(4), intent (in) :: y
            res = merge(dble(y), merge(x, max(x, dble(y)), y /= y), x /= x)
        end function
        real(8) function fmax48(x, y) result(res)
            real(4), intent (in) :: x
            real(8), intent (in) :: y
            res = merge(y, merge(dble(x), max(dble(x), y), y /= y), x /= x)
        end function
        real(8) function fmin88(x, y) result (res)
            real(8), intent (in) :: x
            real(8), intent (in) :: y
            res = merge(y, merge(x, min(x, y), y /= y), x /= x)
        end function
        real(4) function fmin44(x, y) result (res)
            real(4), intent (in) :: x
            real(4), intent (in) :: y
            res = merge(y, merge(x, min(x, y), y /= y), x /= x)
        end function
        real(8) function fmin84(x, y) result(res)
            real(8), intent (in) :: x
            real(4), intent (in) :: y
            res = merge(dble(y), merge(x, min(x, dble(y)), y /= y), x /= x)
        end function
        real(8) function fmin48(x, y) result(res)
            real(4), intent (in) :: x
            real(8), intent (in) :: y
            res = merge(y, merge(dble(x), min(dble(x), y), y /= y), x /= x)
        end function
    end module
    
    real(8) function code(t_m, l_m, om, omc)
    use fmin_fmax_functions
        real(8), intent (in) :: t_m
        real(8), intent (in) :: l_m
        real(8), intent (in) :: om
        real(8), intent (in) :: omc
        code = asin(sqrt(1.0d0))
    end function
    
    t_m = Math.abs(t);
    l_m = Math.abs(l);
    public static double code(double t_m, double l_m, double Om, double Omc) {
    	return Math.asin(Math.sqrt(1.0));
    }
    
    t_m = math.fabs(t)
    l_m = math.fabs(l)
    def code(t_m, l_m, Om, Omc):
    	return math.asin(math.sqrt(1.0))
    
    t_m = abs(t)
    l_m = abs(l)
    function code(t_m, l_m, Om, Omc)
    	return asin(sqrt(1.0))
    end
    
    t_m = abs(t);
    l_m = abs(l);
    function tmp = code(t_m, l_m, Om, Omc)
    	tmp = asin(sqrt(1.0));
    end
    
    t_m = N[Abs[t], $MachinePrecision]
    l_m = N[Abs[l], $MachinePrecision]
    code[t$95$m_, l$95$m_, Om_, Omc_] := N[ArcSin[N[Sqrt[1.0], $MachinePrecision]], $MachinePrecision]
    
    \begin{array}{l}
    t_m = \left|t\right|
    \\
    l_m = \left|\ell\right|
    
    \\
    \sin^{-1} \left(\sqrt{1}\right)
    \end{array}
    
    Derivation
    1. Initial program 84.9%

      \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right) \]
    2. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\color{blue}{\left(\frac{t}{\ell}\right)}}^{2}}}\right) \]
      2. lift-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{{\left(\frac{t}{\ell}\right)}^{2}}}}\right) \]
      3. metadata-evalN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{\color{blue}{\left(\mathsf{neg}\left(-2\right)\right)}}}}\right) \]
      4. pow-negN/A

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

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      6. lower-pow.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{\color{blue}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
      7. lift-/.f6484.9

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \frac{1}{{\color{blue}{\left(\frac{t}{\ell}\right)}}^{-2}}}}\right) \]
    3. Applied rewrites84.9%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot \color{blue}{\frac{1}{{\left(\frac{t}{\ell}\right)}^{-2}}}}}\right) \]
    4. Taylor expanded in Om around 0

      \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}}\right) \]
    5. Step-by-step derivation
      1. pow-flipN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      2. metadata-evalN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      3. unpow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      4. times-fracN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      5. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      6. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      7. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      8. pow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      9. times-fracN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      10. unpow2N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}\right) \]
      11. lower-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\color{blue}{1 + 2 \cdot \frac{{t}^{2}}{{\ell}^{2}}}}}\right) \]
      12. +-commutativeN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{2 \cdot \frac{{t}^{2}}{{\ell}^{2}} + \color{blue}{1}}}\right) \]
      13. *-commutativeN/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\frac{{t}^{2}}{{\ell}^{2}} \cdot 2 + 1}}\right) \]
      14. lower-fma.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(\frac{{t}^{2}}{{\ell}^{2}}, \color{blue}{2}, 1\right)}}\right) \]
    6. Applied rewrites72.7%

      \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}}\right) \]
    7. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}\right) \]
      2. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{t}{\ell \cdot \ell}, 2, 1\right)}}\right) \]
      3. associate-/r*N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      4. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
      5. lower-/.f6481.2

        \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
    8. Applied rewrites81.2%

      \[\leadsto \sin^{-1} \left(\sqrt{\frac{1}{\mathsf{fma}\left(t \cdot \frac{\frac{t}{\ell}}{\ell}, 2, 1\right)}}\right) \]
    9. Taylor expanded in t around 0

      \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
    10. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
      2. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
      3. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
      4. lift-*.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
      5. lift-/.f64N/A

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
      6. lift-/.f6451.5

        \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
    11. Applied rewrites51.5%

      \[\leadsto \sin^{-1} \left(\sqrt{1}\right) \]
    12. Add Preprocessing

    Reproduce

    ?
    herbie shell --seed 2025136 
    (FPCore (t l Om Omc)
      :name "Toniolo and Linder, Equation (2)"
      :precision binary64
      (asin (sqrt (/ (- 1.0 (pow (/ Om Omc) 2.0)) (+ 1.0 (* 2.0 (pow (/ t l) 2.0)))))))