1/2(abs(p)+abs(r) - sqrt((p-r)^2 + 4q^2))

Percentage Accurate: 24.4% → 55.4%
Time: 7.4s
Alternatives: 9
Speedup: 83.3×

Specification

?
\[\begin{array}{l} \\ \frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \end{array} \]
(FPCore (p r q)
 :precision binary64
 (*
  (/ 1.0 2.0)
  (- (+ (fabs p) (fabs r)) (sqrt (+ (pow (- p r) 2.0) (* 4.0 (pow q 2.0)))))))
double code(double p, double r, double q) {
	return (1.0 / 2.0) * ((fabs(p) + fabs(r)) - sqrt((pow((p - r), 2.0) + (4.0 * pow(q, 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(p, r, q)
use fmin_fmax_functions
    real(8), intent (in) :: p
    real(8), intent (in) :: r
    real(8), intent (in) :: q
    code = (1.0d0 / 2.0d0) * ((abs(p) + abs(r)) - sqrt((((p - r) ** 2.0d0) + (4.0d0 * (q ** 2.0d0)))))
end function
public static double code(double p, double r, double q) {
	return (1.0 / 2.0) * ((Math.abs(p) + Math.abs(r)) - Math.sqrt((Math.pow((p - r), 2.0) + (4.0 * Math.pow(q, 2.0)))));
}
def code(p, r, q):
	return (1.0 / 2.0) * ((math.fabs(p) + math.fabs(r)) - math.sqrt((math.pow((p - r), 2.0) + (4.0 * math.pow(q, 2.0)))))
function code(p, r, q)
	return Float64(Float64(1.0 / 2.0) * Float64(Float64(abs(p) + abs(r)) - sqrt(Float64((Float64(p - r) ^ 2.0) + Float64(4.0 * (q ^ 2.0))))))
end
function tmp = code(p, r, q)
	tmp = (1.0 / 2.0) * ((abs(p) + abs(r)) - sqrt((((p - r) ^ 2.0) + (4.0 * (q ^ 2.0)))));
end
code[p_, r_, q_] := N[(N[(1.0 / 2.0), $MachinePrecision] * N[(N[(N[Abs[p], $MachinePrecision] + N[Abs[r], $MachinePrecision]), $MachinePrecision] - N[Sqrt[N[(N[Power[N[(p - r), $MachinePrecision], 2.0], $MachinePrecision] + N[(4.0 * N[Power[q, 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right)
\end{array}

Sampling outcomes in binary64 precision:

Local Percentage Accuracy vs ?

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

Accuracy vs Speed?

Herbie found 9 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: 24.4% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \end{array} \]
(FPCore (p r q)
 :precision binary64
 (*
  (/ 1.0 2.0)
  (- (+ (fabs p) (fabs r)) (sqrt (+ (pow (- p r) 2.0) (* 4.0 (pow q 2.0)))))))
double code(double p, double r, double q) {
	return (1.0 / 2.0) * ((fabs(p) + fabs(r)) - sqrt((pow((p - r), 2.0) + (4.0 * pow(q, 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(p, r, q)
use fmin_fmax_functions
    real(8), intent (in) :: p
    real(8), intent (in) :: r
    real(8), intent (in) :: q
    code = (1.0d0 / 2.0d0) * ((abs(p) + abs(r)) - sqrt((((p - r) ** 2.0d0) + (4.0d0 * (q ** 2.0d0)))))
end function
public static double code(double p, double r, double q) {
	return (1.0 / 2.0) * ((Math.abs(p) + Math.abs(r)) - Math.sqrt((Math.pow((p - r), 2.0) + (4.0 * Math.pow(q, 2.0)))));
}
def code(p, r, q):
	return (1.0 / 2.0) * ((math.fabs(p) + math.fabs(r)) - math.sqrt((math.pow((p - r), 2.0) + (4.0 * math.pow(q, 2.0)))))
function code(p, r, q)
	return Float64(Float64(1.0 / 2.0) * Float64(Float64(abs(p) + abs(r)) - sqrt(Float64((Float64(p - r) ^ 2.0) + Float64(4.0 * (q ^ 2.0))))))
end
function tmp = code(p, r, q)
	tmp = (1.0 / 2.0) * ((abs(p) + abs(r)) - sqrt((((p - r) ^ 2.0) + (4.0 * (q ^ 2.0)))));
end
code[p_, r_, q_] := N[(N[(1.0 / 2.0), $MachinePrecision] * N[(N[(N[Abs[p], $MachinePrecision] + N[Abs[r], $MachinePrecision]), $MachinePrecision] - N[Sqrt[N[(N[Power[N[(p - r), $MachinePrecision], 2.0], $MachinePrecision] + N[(4.0 * N[Power[q, 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right)
\end{array}

Alternative 1: 55.4% accurate, 2.7× speedup?

\[\begin{array}{l} q_m = \left|q\right| \\ [p, r, q_m] = \mathsf{sort}([p, r, q_m])\\ \\ \begin{array}{l} \mathbf{if}\;r \leq -9.8 \cdot 10^{-76}:\\ \;\;\;\;\mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right)\\ \mathbf{elif}\;r \leq 35:\\ \;\;\;\;0.5 \cdot \left(\left(\left(\left|p\right| + \left|r\right|\right) + p \cdot \mathsf{fma}\left(-0.25, \frac{p}{q\_m}, 0.5 \cdot \frac{r}{q\_m}\right)\right) - 2 \cdot q\_m\right)\\ \mathbf{elif}\;r \leq 3.6 \cdot 10^{+250}:\\ \;\;\;\;\frac{1}{2} \cdot \left(\frac{\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) + p\right) \cdot r}{r} + \frac{-2 \cdot \left(q\_m \cdot q\_m\right)}{r}\right)\\ \mathbf{elif}\;r \leq 1.18 \cdot 10^{+277}:\\ \;\;\;\;\frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q\_m}{r} \cdot \frac{q\_m}{r}\right)\right) \cdot r\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)\\ \end{array} \end{array} \]
q_m = (fabs.f64 q)
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
(FPCore (p r q_m)
 :precision binary64
 (if (<= r -9.8e-76)
   (fma (+ (+ p (fabs p)) (fabs r)) 0.5 (* -0.5 r))
   (if (<= r 35.0)
     (*
      0.5
      (-
       (+ (+ (fabs p) (fabs r)) (* p (fma -0.25 (/ p q_m) (* 0.5 (/ r q_m)))))
       (* 2.0 q_m)))
     (if (<= r 3.6e+250)
       (*
        (/ 1.0 2.0)
        (+
         (/ (* (+ (+ (fma -1.0 r (fabs r)) (fabs p)) p) r) r)
         (/ (* -2.0 (* q_m q_m)) r)))
       (if (<= r 1.18e+277)
         (* (/ 1.0 2.0) (* (* -2.0 (* (/ q_m r) (/ q_m r))) r))
         (* 0.5 (+ p (+ (- (fabs r) r) (fabs p)))))))))
q_m = fabs(q);
assert(p < r && r < q_m);
double code(double p, double r, double q_m) {
	double tmp;
	if (r <= -9.8e-76) {
		tmp = fma(((p + fabs(p)) + fabs(r)), 0.5, (-0.5 * r));
	} else if (r <= 35.0) {
		tmp = 0.5 * (((fabs(p) + fabs(r)) + (p * fma(-0.25, (p / q_m), (0.5 * (r / q_m))))) - (2.0 * q_m));
	} else if (r <= 3.6e+250) {
		tmp = (1.0 / 2.0) * (((((fma(-1.0, r, fabs(r)) + fabs(p)) + p) * r) / r) + ((-2.0 * (q_m * q_m)) / r));
	} else if (r <= 1.18e+277) {
		tmp = (1.0 / 2.0) * ((-2.0 * ((q_m / r) * (q_m / r))) * r);
	} else {
		tmp = 0.5 * (p + ((fabs(r) - r) + fabs(p)));
	}
	return tmp;
}
q_m = abs(q)
p, r, q_m = sort([p, r, q_m])
function code(p, r, q_m)
	tmp = 0.0
	if (r <= -9.8e-76)
		tmp = fma(Float64(Float64(p + abs(p)) + abs(r)), 0.5, Float64(-0.5 * r));
	elseif (r <= 35.0)
		tmp = Float64(0.5 * Float64(Float64(Float64(abs(p) + abs(r)) + Float64(p * fma(-0.25, Float64(p / q_m), Float64(0.5 * Float64(r / q_m))))) - Float64(2.0 * q_m)));
	elseif (r <= 3.6e+250)
		tmp = Float64(Float64(1.0 / 2.0) * Float64(Float64(Float64(Float64(Float64(fma(-1.0, r, abs(r)) + abs(p)) + p) * r) / r) + Float64(Float64(-2.0 * Float64(q_m * q_m)) / r)));
	elseif (r <= 1.18e+277)
		tmp = Float64(Float64(1.0 / 2.0) * Float64(Float64(-2.0 * Float64(Float64(q_m / r) * Float64(q_m / r))) * r));
	else
		tmp = Float64(0.5 * Float64(p + Float64(Float64(abs(r) - r) + abs(p))));
	end
	return tmp
end
q_m = N[Abs[q], $MachinePrecision]
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
code[p_, r_, q$95$m_] := If[LessEqual[r, -9.8e-76], N[(N[(N[(p + N[Abs[p], $MachinePrecision]), $MachinePrecision] + N[Abs[r], $MachinePrecision]), $MachinePrecision] * 0.5 + N[(-0.5 * r), $MachinePrecision]), $MachinePrecision], If[LessEqual[r, 35.0], N[(0.5 * N[(N[(N[(N[Abs[p], $MachinePrecision] + N[Abs[r], $MachinePrecision]), $MachinePrecision] + N[(p * N[(-0.25 * N[(p / q$95$m), $MachinePrecision] + N[(0.5 * N[(r / q$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(2.0 * q$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[r, 3.6e+250], N[(N[(1.0 / 2.0), $MachinePrecision] * N[(N[(N[(N[(N[(N[(-1.0 * r + N[Abs[r], $MachinePrecision]), $MachinePrecision] + N[Abs[p], $MachinePrecision]), $MachinePrecision] + p), $MachinePrecision] * r), $MachinePrecision] / r), $MachinePrecision] + N[(N[(-2.0 * N[(q$95$m * q$95$m), $MachinePrecision]), $MachinePrecision] / r), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[r, 1.18e+277], N[(N[(1.0 / 2.0), $MachinePrecision] * N[(N[(-2.0 * N[(N[(q$95$m / r), $MachinePrecision] * N[(q$95$m / r), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * r), $MachinePrecision]), $MachinePrecision], N[(0.5 * N[(p + N[(N[(N[Abs[r], $MachinePrecision] - r), $MachinePrecision] + N[Abs[p], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
q_m = \left|q\right|
\\
[p, r, q_m] = \mathsf{sort}([p, r, q_m])\\
\\
\begin{array}{l}
\mathbf{if}\;r \leq -9.8 \cdot 10^{-76}:\\
\;\;\;\;\mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right)\\

\mathbf{elif}\;r \leq 35:\\
\;\;\;\;0.5 \cdot \left(\left(\left(\left|p\right| + \left|r\right|\right) + p \cdot \mathsf{fma}\left(-0.25, \frac{p}{q\_m}, 0.5 \cdot \frac{r}{q\_m}\right)\right) - 2 \cdot q\_m\right)\\

\mathbf{elif}\;r \leq 3.6 \cdot 10^{+250}:\\
\;\;\;\;\frac{1}{2} \cdot \left(\frac{\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) + p\right) \cdot r}{r} + \frac{-2 \cdot \left(q\_m \cdot q\_m\right)}{r}\right)\\

\mathbf{elif}\;r \leq 1.18 \cdot 10^{+277}:\\
\;\;\;\;\frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q\_m}{r} \cdot \frac{q\_m}{r}\right)\right) \cdot r\right)\\

\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 5 regimes
  2. if r < -9.79999999999999944e-76

    1. Initial program 15.7%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in r around inf

      \[\leadsto \color{blue}{r \cdot \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right)} \]
    4. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto r \cdot \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right) \]
      2. metadata-evalN/A

        \[\leadsto r \cdot \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{\color{blue}{2}}\right) \]
      3. *-commutativeN/A

        \[\leadsto \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right) \cdot \color{blue}{r} \]
      4. lower-*.f64N/A

        \[\leadsto \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right) \cdot \color{blue}{r} \]
    5. Applied rewrites5.0%

      \[\leadsto \color{blue}{\left(\frac{\left(\left|r\right| + \left|p\right|\right) - \left(-p\right)}{r} \cdot 0.5 - 0.5\right) \cdot r} \]
    6. Taylor expanded in r around 0

      \[\leadsto \frac{-1}{2} \cdot r + \color{blue}{\frac{1}{2} \cdot \left(p + \left(\left|p\right| + \left|r\right|\right)\right)} \]
    7. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{-1}{2} \cdot r + \frac{1}{2} \cdot \left(p + \left(\color{blue}{\left|p\right|} + \left|r\right|\right)\right) \]
      2. +-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left|p\right| + \left|r\right|\right)\right) + \frac{-1}{2} \cdot \color{blue}{r} \]
      3. *-commutativeN/A

        \[\leadsto \left(p + \left(\left|p\right| + \left|r\right|\right)\right) \cdot \frac{1}{2} + \frac{-1}{2} \cdot r \]
      4. lower-fma.f64N/A

        \[\leadsto \mathsf{fma}\left(p + \left(\left|p\right| + \left|r\right|\right), \frac{1}{\color{blue}{2}}, \frac{-1}{2} \cdot r\right) \]
      5. associate-+r+N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      6. lower-+.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      7. lower-+.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      8. lift-fabs.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      9. lift-fabs.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      10. metadata-evalN/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      11. lower-*.f6411.6

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right) \]
    8. Applied rewrites11.6%

      \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \color{blue}{0.5}, -0.5 \cdot r\right) \]

    if -9.79999999999999944e-76 < r < 35

    1. Initial program 41.9%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in r around 0

      \[\leadsto \color{blue}{\frac{1}{2} \cdot \left(\left(p \cdot r\right) \cdot \sqrt{\frac{1}{4 \cdot {q}^{2} + {p}^{2}}}\right) + \frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{4 \cdot {q}^{2} + {p}^{2}}\right)} \]
    4. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(p \cdot r\right) \cdot \sqrt{\frac{1}{4 \cdot {q}^{2} + {p}^{2}}}\right) + \frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{4 \cdot {q}^{2} + {p}^{2}}\right) \]
      2. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(p \cdot r\right) \cdot \sqrt{\frac{1}{4 \cdot {q}^{2} + {p}^{2}}}\right) + \frac{1}{2} \cdot \left(\color{blue}{\left(\left|p\right| + \left|r\right|\right)} - \sqrt{4 \cdot {q}^{2} + {p}^{2}}\right) \]
      3. distribute-lft-outN/A

        \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(\left(p \cdot r\right) \cdot \sqrt{\frac{1}{4 \cdot {q}^{2} + {p}^{2}}} + \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{4 \cdot {q}^{2} + {p}^{2}}\right)\right)} \]
      4. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(\left(p \cdot r\right) \cdot \sqrt{\frac{1}{4 \cdot {q}^{2} + {p}^{2}}} + \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{4 \cdot {q}^{2} + {p}^{2}}\right)\right)} \]
    5. Applied rewrites33.3%

      \[\leadsto \color{blue}{0.5 \cdot \mathsf{fma}\left({\left(\mathsf{fma}\left(q \cdot q, 4, p \cdot p\right)\right)}^{-0.5}, r \cdot p, \left(\left|r\right| + \left|p\right|\right) - \sqrt{\mathsf{fma}\left(q \cdot q, 4, p \cdot p\right)}\right)} \]
    6. Taylor expanded in p around 0

      \[\leadsto \frac{1}{2} \cdot \left(\left(\left|p\right| + \left(\left|r\right| + p \cdot \left(\frac{-1}{4} \cdot \frac{p}{q} + \frac{1}{2} \cdot \frac{r}{q}\right)\right)\right) - \color{blue}{2 \cdot q}\right) \]
    7. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left|p\right| + \left(\left|r\right| + p \cdot \left(\frac{-1}{4} \cdot \frac{p}{q} + \frac{1}{2} \cdot \frac{r}{q}\right)\right)\right) - 2 \cdot q\right) \]
      2. lower--.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left|p\right| + \left(\left|r\right| + p \cdot \left(\frac{-1}{4} \cdot \frac{p}{q} + \frac{1}{2} \cdot \frac{r}{q}\right)\right)\right) - 2 \cdot \color{blue}{q}\right) \]
    8. Applied rewrites29.2%

      \[\leadsto 0.5 \cdot \left(\left(\left(\left|p\right| + \left|r\right|\right) + p \cdot \mathsf{fma}\left(-0.25, \frac{p}{q}, 0.5 \cdot \frac{r}{q}\right)\right) - \color{blue}{2 \cdot q}\right) \]

    if 35 < r < 3.5999999999999997e250

    1. Initial program 16.9%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in r around inf

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(r \cdot \left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right)\right)} \]
    4. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
      2. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
    5. Applied rewrites29.7%

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{\left|r\right| + \left|p\right|}{r} - \mathsf{fma}\left(\frac{p}{r}, -1, 1\right)\right) \cdot r\right)} \]
    6. Taylor expanded in r around 0

      \[\leadsto \frac{1}{2} \cdot \frac{-2 \cdot {q}^{2} + r \cdot \left(\left(\left|p\right| + \left(\left|r\right| + -1 \cdot r\right)\right) - -1 \cdot p\right)}{\color{blue}{r}} \]
    7. Step-by-step derivation
      1. lower-/.f64N/A

        \[\leadsto \frac{1}{2} \cdot \frac{-2 \cdot {q}^{2} + r \cdot \left(\left(\left|p\right| + \left(\left|r\right| + -1 \cdot r\right)\right) - -1 \cdot p\right)}{r} \]
    8. Applied rewrites70.9%

      \[\leadsto \frac{1}{2} \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{\color{blue}{r}} \]
    9. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \frac{1}{2} \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{r} \]
      2. lift-fma.f64N/A

        \[\leadsto \frac{1}{2} \cdot \frac{\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right)\right) \cdot r + -2 \cdot \left(q \cdot q\right)}{r} \]
      3. lift-neg.f64N/A

        \[\leadsto \frac{1}{2} \cdot \frac{\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(\mathsf{neg}\left(p\right)\right)\right) \cdot r + -2 \cdot \left(q \cdot q\right)}{r} \]
      4. lift--.f64N/A

        \[\leadsto \frac{1}{2} \cdot \frac{\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(\mathsf{neg}\left(p\right)\right)\right) \cdot r + -2 \cdot \left(q \cdot q\right)}{r} \]
      5. lift-+.f64N/A

        \[\leadsto \frac{1}{2} \cdot \frac{\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(\mathsf{neg}\left(p\right)\right)\right) \cdot r + -2 \cdot \left(q \cdot q\right)}{r} \]
      6. lift-fabs.f64N/A

        \[\leadsto \frac{1}{2} \cdot \frac{\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(\mathsf{neg}\left(p\right)\right)\right) \cdot r + -2 \cdot \left(q \cdot q\right)}{r} \]
      7. lift-fma.f64N/A

        \[\leadsto \frac{1}{2} \cdot \frac{\left(\left(\left(-1 \cdot r + \left|r\right|\right) + \left|p\right|\right) - \left(\mathsf{neg}\left(p\right)\right)\right) \cdot r + -2 \cdot \left(q \cdot q\right)}{r} \]
      8. lift-fabs.f64N/A

        \[\leadsto \frac{1}{2} \cdot \frac{\left(\left(\left(-1 \cdot r + \left|r\right|\right) + \left|p\right|\right) - \left(\mathsf{neg}\left(p\right)\right)\right) \cdot r + -2 \cdot \left(q \cdot q\right)}{r} \]
      9. div-addN/A

        \[\leadsto \frac{1}{2} \cdot \left(\frac{\left(\left(\left(-1 \cdot r + \left|r\right|\right) + \left|p\right|\right) - \left(\mathsf{neg}\left(p\right)\right)\right) \cdot r}{r} + \frac{-2 \cdot \left(q \cdot q\right)}{\color{blue}{r}}\right) \]
      10. lift-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\frac{\left(\left(\left(-1 \cdot r + \left|r\right|\right) + \left|p\right|\right) - \left(\mathsf{neg}\left(p\right)\right)\right) \cdot r}{r} + \frac{-2 \cdot \left(q \cdot q\right)}{r}\right) \]
      11. lift-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\frac{\left(\left(\left(-1 \cdot r + \left|r\right|\right) + \left|p\right|\right) - \left(\mathsf{neg}\left(p\right)\right)\right) \cdot r}{r} + \frac{-2 \cdot \left(q \cdot q\right)}{r}\right) \]
      12. pow2N/A

        \[\leadsto \frac{1}{2} \cdot \left(\frac{\left(\left(\left(-1 \cdot r + \left|r\right|\right) + \left|p\right|\right) - \left(\mathsf{neg}\left(p\right)\right)\right) \cdot r}{r} + \frac{-2 \cdot {q}^{2}}{r}\right) \]
    10. Applied rewrites70.9%

      \[\leadsto \frac{1}{2} \cdot \left(\frac{\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right)\right) \cdot r}{r} + \frac{-2 \cdot \left(q \cdot q\right)}{\color{blue}{r}}\right) \]

    if 3.5999999999999997e250 < r < 1.17999999999999997e277

    1. Initial program 3.9%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in r around inf

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(r \cdot \left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right)\right)} \]
    4. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
      2. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
    5. Applied rewrites1.6%

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{\left|r\right| + \left|p\right|}{r} - \mathsf{fma}\left(\frac{p}{r}, -1, 1\right)\right) \cdot r\right)} \]
    6. Taylor expanded in p around inf

      \[\leadsto \frac{1}{2} \cdot \left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{p}{r}\right) \cdot r\right) \]
    7. Step-by-step derivation
      1. lift-/.f643.5

        \[\leadsto \frac{1}{2} \cdot \left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{p}{r}\right) \cdot r\right) \]
    8. Applied rewrites3.5%

      \[\leadsto \frac{1}{2} \cdot \left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{p}{r}\right) \cdot r\right) \]
    9. Taylor expanded in r around 0

      \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}}\right) \cdot r\right) \]
    10. Step-by-step derivation
      1. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}}\right) \cdot r\right) \]
      2. pow2N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \frac{q \cdot q}{{r}^{2}}\right) \cdot r\right) \]
      3. pow2N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \frac{q \cdot q}{r \cdot r}\right) \cdot r\right) \]
      4. times-fracN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]
      5. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]
      6. lower-/.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]
      7. lower-/.f6470.6

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]
    11. Applied rewrites70.6%

      \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]

    if 1.17999999999999997e277 < r

    1. Initial program 0.8%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in p around -inf

      \[\leadsto \color{blue}{-1 \cdot \left(p \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)\right)} \]
    4. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto -1 \cdot \left(p \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{\color{blue}{2}}\right)\right) \]
      2. associate-*r*N/A

        \[\leadsto \left(-1 \cdot p\right) \cdot \color{blue}{\left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)} \]
      3. mul-1-negN/A

        \[\leadsto \left(\mathsf{neg}\left(p\right)\right) \cdot \left(\color{blue}{\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p}} - \frac{1}{2}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \left(\mathsf{neg}\left(p\right)\right) \cdot \color{blue}{\left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)} \]
      5. lower-neg.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\color{blue}{\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p}} - \frac{1}{2}\right) \]
      6. lower--.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \color{blue}{\frac{1}{2}}\right) \]
    5. Applied rewrites100.0%

      \[\leadsto \color{blue}{\left(-p\right) \cdot \left(\frac{\left|p\right| + \left(\left|r\right| - r\right)}{p} \cdot -0.5 - 0.5\right)} \]
    6. Taylor expanded in r around inf

      \[\leadsto \left(-p\right) \cdot \left(\frac{1}{2} \cdot \color{blue}{\frac{r}{p}}\right) \]
    7. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{1}{2} \cdot \frac{r}{p}\right) \]
      2. *-commutativeN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{\color{blue}{2}}\right) \]
      3. unpow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{1}}{p} \cdot \frac{1}{2}\right) \]
      4. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{\left(\frac{2}{2}\right)}}{p} \cdot \frac{1}{2}\right) \]
      5. sqrt-pow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{{r}^{2}}}{p} \cdot \frac{1}{2}\right) \]
      6. unpow2N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{r \cdot r}}{p} \cdot \frac{1}{2}\right) \]
      7. rem-sqrt-square-revN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\left|r\right|}{p} \cdot \frac{1}{2}\right) \]
      8. lower-*.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\left|r\right|}{p} \cdot \frac{1}{\color{blue}{2}}\right) \]
      9. rem-sqrt-square-revN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{r \cdot r}}{p} \cdot \frac{1}{2}\right) \]
      10. unpow2N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{{r}^{2}}}{p} \cdot \frac{1}{2}\right) \]
      11. sqrt-pow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{\left(\frac{2}{2}\right)}}{p} \cdot \frac{1}{2}\right) \]
      12. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{1}}{p} \cdot \frac{1}{2}\right) \]
      13. unpow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{2}\right) \]
      14. lower-/.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{2}\right) \]
      15. metadata-eval0.8

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot 0.5\right) \]
    8. Applied rewrites0.8%

      \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \color{blue}{0.5}\right) \]
    9. Taylor expanded in p around 0

      \[\leadsto \frac{1}{2} \cdot p + \color{blue}{\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - r\right)} \]
    10. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot p + \frac{1}{2} \cdot \left(\left(\color{blue}{\left|p\right|} + \left|r\right|\right) - r\right) \]
      2. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot p + \frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - r\right) \]
      3. distribute-lft-outN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \color{blue}{\left(\left(\left|p\right| + \left|r\right|\right) - r\right)}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \color{blue}{\left(\left(\left|p\right| + \left|r\right|\right) - r\right)}\right) \]
      5. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\color{blue}{\left(\left|p\right| + \left|r\right|\right)} - r\right)\right) \]
      6. lower-+.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|p\right| + \left|r\right|\right) - \color{blue}{r}\right)\right) \]
      7. associate-+r-N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left|p\right| + \left(\left|r\right| - \color{blue}{r}\right)\right)\right) \]
      8. +-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      9. lower-+.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      10. lower--.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      11. lift-fabs.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      12. lift-fabs.f64100.0

        \[\leadsto 0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
    11. Applied rewrites100.0%

      \[\leadsto 0.5 \cdot \color{blue}{\left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)} \]
  3. Recombined 5 regimes into one program.
  4. Final simplification36.2%

    \[\leadsto \begin{array}{l} \mathbf{if}\;r \leq -9.8 \cdot 10^{-76}:\\ \;\;\;\;\mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right)\\ \mathbf{elif}\;r \leq 35:\\ \;\;\;\;0.5 \cdot \left(\left(\left(\left|p\right| + \left|r\right|\right) + p \cdot \mathsf{fma}\left(-0.25, \frac{p}{q}, 0.5 \cdot \frac{r}{q}\right)\right) - 2 \cdot q\right)\\ \mathbf{elif}\;r \leq 3.6 \cdot 10^{+250}:\\ \;\;\;\;\frac{1}{2} \cdot \left(\frac{\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) + p\right) \cdot r}{r} + \frac{-2 \cdot \left(q \cdot q\right)}{r}\right)\\ \mathbf{elif}\;r \leq 1.18 \cdot 10^{+277}:\\ \;\;\;\;\frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)\\ \end{array} \]
  5. Add Preprocessing

Alternative 2: 40.0% accurate, 2.0× speedup?

\[\begin{array}{l} q_m = \left|q\right| \\ [p, r, q_m] = \mathsf{sort}([p, r, q_m])\\ \\ \begin{array}{l} \mathbf{if}\;4 \cdot {q\_m}^{2} \leq 2 \cdot 10^{-231}:\\ \;\;\;\;\left(\left(r + p\right) - r\right) \cdot 0.5\\ \mathbf{else}:\\ \;\;\;\;-q\_m\\ \end{array} \end{array} \]
q_m = (fabs.f64 q)
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
(FPCore (p r q_m)
 :precision binary64
 (if (<= (* 4.0 (pow q_m 2.0)) 2e-231) (* (- (+ r p) r) 0.5) (- q_m)))
q_m = fabs(q);
assert(p < r && r < q_m);
double code(double p, double r, double q_m) {
	double tmp;
	if ((4.0 * pow(q_m, 2.0)) <= 2e-231) {
		tmp = ((r + p) - r) * 0.5;
	} else {
		tmp = -q_m;
	}
	return tmp;
}
q_m =     private
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
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(p, r, q_m)
use fmin_fmax_functions
    real(8), intent (in) :: p
    real(8), intent (in) :: r
    real(8), intent (in) :: q_m
    real(8) :: tmp
    if ((4.0d0 * (q_m ** 2.0d0)) <= 2d-231) then
        tmp = ((r + p) - r) * 0.5d0
    else
        tmp = -q_m
    end if
    code = tmp
end function
q_m = Math.abs(q);
assert p < r && r < q_m;
public static double code(double p, double r, double q_m) {
	double tmp;
	if ((4.0 * Math.pow(q_m, 2.0)) <= 2e-231) {
		tmp = ((r + p) - r) * 0.5;
	} else {
		tmp = -q_m;
	}
	return tmp;
}
q_m = math.fabs(q)
[p, r, q_m] = sort([p, r, q_m])
def code(p, r, q_m):
	tmp = 0
	if (4.0 * math.pow(q_m, 2.0)) <= 2e-231:
		tmp = ((r + p) - r) * 0.5
	else:
		tmp = -q_m
	return tmp
q_m = abs(q)
p, r, q_m = sort([p, r, q_m])
function code(p, r, q_m)
	tmp = 0.0
	if (Float64(4.0 * (q_m ^ 2.0)) <= 2e-231)
		tmp = Float64(Float64(Float64(r + p) - r) * 0.5);
	else
		tmp = Float64(-q_m);
	end
	return tmp
end
q_m = abs(q);
p, r, q_m = num2cell(sort([p, r, q_m])){:}
function tmp_2 = code(p, r, q_m)
	tmp = 0.0;
	if ((4.0 * (q_m ^ 2.0)) <= 2e-231)
		tmp = ((r + p) - r) * 0.5;
	else
		tmp = -q_m;
	end
	tmp_2 = tmp;
end
q_m = N[Abs[q], $MachinePrecision]
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
code[p_, r_, q$95$m_] := If[LessEqual[N[(4.0 * N[Power[q$95$m, 2.0], $MachinePrecision]), $MachinePrecision], 2e-231], N[(N[(N[(r + p), $MachinePrecision] - r), $MachinePrecision] * 0.5), $MachinePrecision], (-q$95$m)]
\begin{array}{l}
q_m = \left|q\right|
\\
[p, r, q_m] = \mathsf{sort}([p, r, q_m])\\
\\
\begin{array}{l}
\mathbf{if}\;4 \cdot {q\_m}^{2} \leq 2 \cdot 10^{-231}:\\
\;\;\;\;\left(\left(r + p\right) - r\right) \cdot 0.5\\

\mathbf{else}:\\
\;\;\;\;-q\_m\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (*.f64 #s(literal 4 binary64) (pow.f64 q #s(literal 2 binary64))) < 2e-231

    1. Initial program 27.3%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in p around -inf

      \[\leadsto \color{blue}{-1 \cdot \left(p \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)\right)} \]
    4. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto -1 \cdot \left(p \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{\color{blue}{2}}\right)\right) \]
      2. associate-*r*N/A

        \[\leadsto \left(-1 \cdot p\right) \cdot \color{blue}{\left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)} \]
      3. mul-1-negN/A

        \[\leadsto \left(\mathsf{neg}\left(p\right)\right) \cdot \left(\color{blue}{\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p}} - \frac{1}{2}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \left(\mathsf{neg}\left(p\right)\right) \cdot \color{blue}{\left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)} \]
      5. lower-neg.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\color{blue}{\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p}} - \frac{1}{2}\right) \]
      6. lower--.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \color{blue}{\frac{1}{2}}\right) \]
    5. Applied rewrites45.2%

      \[\leadsto \color{blue}{\left(-p\right) \cdot \left(\frac{\left|p\right| + \left(\left|r\right| - r\right)}{p} \cdot -0.5 - 0.5\right)} \]
    6. Taylor expanded in p around 0

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(\left(\left|p\right| + \left|r\right|\right) - r\right)} \]
    7. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - r\right) \]
      2. associate-+r-N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left|p\right| + \left(\left|r\right| - \color{blue}{r}\right)\right) \]
      3. *-commutativeN/A

        \[\leadsto \left(\left|p\right| + \left(\left|r\right| - r\right)\right) \cdot \frac{1}{\color{blue}{2}} \]
      4. lower-*.f64N/A

        \[\leadsto \left(\left|p\right| + \left(\left|r\right| - r\right)\right) \cdot \frac{1}{\color{blue}{2}} \]
      5. associate-+r-N/A

        \[\leadsto \left(\left(\left|p\right| + \left|r\right|\right) - r\right) \cdot \frac{1}{2} \]
      6. lower--.f64N/A

        \[\leadsto \left(\left(\left|p\right| + \left|r\right|\right) - r\right) \cdot \frac{1}{2} \]
      7. +-commutativeN/A

        \[\leadsto \left(\left(\left|r\right| + \left|p\right|\right) - r\right) \cdot \frac{1}{2} \]
      8. rem-sqrt-square-revN/A

        \[\leadsto \left(\left(\sqrt{r \cdot r} + \left|p\right|\right) - r\right) \cdot \frac{1}{2} \]
      9. unpow2N/A

        \[\leadsto \left(\left(\sqrt{{r}^{2}} + \left|p\right|\right) - r\right) \cdot \frac{1}{2} \]
      10. sqrt-pow1N/A

        \[\leadsto \left(\left({r}^{\left(\frac{2}{2}\right)} + \left|p\right|\right) - r\right) \cdot \frac{1}{2} \]
      11. metadata-evalN/A

        \[\leadsto \left(\left({r}^{1} + \left|p\right|\right) - r\right) \cdot \frac{1}{2} \]
      12. unpow1N/A

        \[\leadsto \left(\left(r + \left|p\right|\right) - r\right) \cdot \frac{1}{2} \]
      13. rem-sqrt-square-revN/A

        \[\leadsto \left(\left(r + \sqrt{p \cdot p}\right) - r\right) \cdot \frac{1}{2} \]
      14. unpow2N/A

        \[\leadsto \left(\left(r + \sqrt{{p}^{2}}\right) - r\right) \cdot \frac{1}{2} \]
      15. sqrt-pow1N/A

        \[\leadsto \left(\left(r + {p}^{\left(\frac{2}{2}\right)}\right) - r\right) \cdot \frac{1}{2} \]
      16. metadata-evalN/A

        \[\leadsto \left(\left(r + {p}^{1}\right) - r\right) \cdot \frac{1}{2} \]
      17. unpow1N/A

        \[\leadsto \left(\left(r + p\right) - r\right) \cdot \frac{1}{2} \]
      18. lower-+.f64N/A

        \[\leadsto \left(\left(r + p\right) - r\right) \cdot \frac{1}{2} \]
      19. metadata-eval26.6

        \[\leadsto \left(\left(r + p\right) - r\right) \cdot 0.5 \]
    8. Applied rewrites26.6%

      \[\leadsto \left(\left(r + p\right) - r\right) \cdot \color{blue}{0.5} \]

    if 2e-231 < (*.f64 #s(literal 4 binary64) (pow.f64 q #s(literal 2 binary64)))

    1. Initial program 24.9%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in q around inf

      \[\leadsto \color{blue}{-1 \cdot q} \]
    4. Step-by-step derivation
      1. mul-1-negN/A

        \[\leadsto \mathsf{neg}\left(q\right) \]
      2. lower-neg.f6426.4

        \[\leadsto -q \]
    5. Applied rewrites26.4%

      \[\leadsto \color{blue}{-q} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 3: 55.5% accurate, 3.2× speedup?

\[\begin{array}{l} q_m = \left|q\right| \\ [p, r, q_m] = \mathsf{sort}([p, r, q_m])\\ \\ \begin{array}{l} \mathbf{if}\;r \leq -9.8 \cdot 10^{-76}:\\ \;\;\;\;\mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right)\\ \mathbf{elif}\;r \leq 35:\\ \;\;\;\;0.5 \cdot \left(\left(\left(\left|p\right| + \left|r\right|\right) + p \cdot \mathsf{fma}\left(-0.25, \frac{p}{q\_m}, 0.5 \cdot \frac{r}{q\_m}\right)\right) - 2 \cdot q\_m\right)\\ \mathbf{elif}\;r \leq 3.6 \cdot 10^{+250}:\\ \;\;\;\;0.5 \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) + p, r, -2 \cdot \left(q\_m \cdot q\_m\right)\right)}{r}\\ \mathbf{elif}\;r \leq 1.18 \cdot 10^{+277}:\\ \;\;\;\;\frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q\_m}{r} \cdot \frac{q\_m}{r}\right)\right) \cdot r\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)\\ \end{array} \end{array} \]
q_m = (fabs.f64 q)
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
(FPCore (p r q_m)
 :precision binary64
 (if (<= r -9.8e-76)
   (fma (+ (+ p (fabs p)) (fabs r)) 0.5 (* -0.5 r))
   (if (<= r 35.0)
     (*
      0.5
      (-
       (+ (+ (fabs p) (fabs r)) (* p (fma -0.25 (/ p q_m) (* 0.5 (/ r q_m)))))
       (* 2.0 q_m)))
     (if (<= r 3.6e+250)
       (*
        0.5
        (/
         (fma (+ (+ (fma -1.0 r (fabs r)) (fabs p)) p) r (* -2.0 (* q_m q_m)))
         r))
       (if (<= r 1.18e+277)
         (* (/ 1.0 2.0) (* (* -2.0 (* (/ q_m r) (/ q_m r))) r))
         (* 0.5 (+ p (+ (- (fabs r) r) (fabs p)))))))))
q_m = fabs(q);
assert(p < r && r < q_m);
double code(double p, double r, double q_m) {
	double tmp;
	if (r <= -9.8e-76) {
		tmp = fma(((p + fabs(p)) + fabs(r)), 0.5, (-0.5 * r));
	} else if (r <= 35.0) {
		tmp = 0.5 * (((fabs(p) + fabs(r)) + (p * fma(-0.25, (p / q_m), (0.5 * (r / q_m))))) - (2.0 * q_m));
	} else if (r <= 3.6e+250) {
		tmp = 0.5 * (fma(((fma(-1.0, r, fabs(r)) + fabs(p)) + p), r, (-2.0 * (q_m * q_m))) / r);
	} else if (r <= 1.18e+277) {
		tmp = (1.0 / 2.0) * ((-2.0 * ((q_m / r) * (q_m / r))) * r);
	} else {
		tmp = 0.5 * (p + ((fabs(r) - r) + fabs(p)));
	}
	return tmp;
}
q_m = abs(q)
p, r, q_m = sort([p, r, q_m])
function code(p, r, q_m)
	tmp = 0.0
	if (r <= -9.8e-76)
		tmp = fma(Float64(Float64(p + abs(p)) + abs(r)), 0.5, Float64(-0.5 * r));
	elseif (r <= 35.0)
		tmp = Float64(0.5 * Float64(Float64(Float64(abs(p) + abs(r)) + Float64(p * fma(-0.25, Float64(p / q_m), Float64(0.5 * Float64(r / q_m))))) - Float64(2.0 * q_m)));
	elseif (r <= 3.6e+250)
		tmp = Float64(0.5 * Float64(fma(Float64(Float64(fma(-1.0, r, abs(r)) + abs(p)) + p), r, Float64(-2.0 * Float64(q_m * q_m))) / r));
	elseif (r <= 1.18e+277)
		tmp = Float64(Float64(1.0 / 2.0) * Float64(Float64(-2.0 * Float64(Float64(q_m / r) * Float64(q_m / r))) * r));
	else
		tmp = Float64(0.5 * Float64(p + Float64(Float64(abs(r) - r) + abs(p))));
	end
	return tmp
end
q_m = N[Abs[q], $MachinePrecision]
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
code[p_, r_, q$95$m_] := If[LessEqual[r, -9.8e-76], N[(N[(N[(p + N[Abs[p], $MachinePrecision]), $MachinePrecision] + N[Abs[r], $MachinePrecision]), $MachinePrecision] * 0.5 + N[(-0.5 * r), $MachinePrecision]), $MachinePrecision], If[LessEqual[r, 35.0], N[(0.5 * N[(N[(N[(N[Abs[p], $MachinePrecision] + N[Abs[r], $MachinePrecision]), $MachinePrecision] + N[(p * N[(-0.25 * N[(p / q$95$m), $MachinePrecision] + N[(0.5 * N[(r / q$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(2.0 * q$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[r, 3.6e+250], N[(0.5 * N[(N[(N[(N[(N[(-1.0 * r + N[Abs[r], $MachinePrecision]), $MachinePrecision] + N[Abs[p], $MachinePrecision]), $MachinePrecision] + p), $MachinePrecision] * r + N[(-2.0 * N[(q$95$m * q$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / r), $MachinePrecision]), $MachinePrecision], If[LessEqual[r, 1.18e+277], N[(N[(1.0 / 2.0), $MachinePrecision] * N[(N[(-2.0 * N[(N[(q$95$m / r), $MachinePrecision] * N[(q$95$m / r), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * r), $MachinePrecision]), $MachinePrecision], N[(0.5 * N[(p + N[(N[(N[Abs[r], $MachinePrecision] - r), $MachinePrecision] + N[Abs[p], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
q_m = \left|q\right|
\\
[p, r, q_m] = \mathsf{sort}([p, r, q_m])\\
\\
\begin{array}{l}
\mathbf{if}\;r \leq -9.8 \cdot 10^{-76}:\\
\;\;\;\;\mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right)\\

\mathbf{elif}\;r \leq 35:\\
\;\;\;\;0.5 \cdot \left(\left(\left(\left|p\right| + \left|r\right|\right) + p \cdot \mathsf{fma}\left(-0.25, \frac{p}{q\_m}, 0.5 \cdot \frac{r}{q\_m}\right)\right) - 2 \cdot q\_m\right)\\

\mathbf{elif}\;r \leq 3.6 \cdot 10^{+250}:\\
\;\;\;\;0.5 \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) + p, r, -2 \cdot \left(q\_m \cdot q\_m\right)\right)}{r}\\

\mathbf{elif}\;r \leq 1.18 \cdot 10^{+277}:\\
\;\;\;\;\frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q\_m}{r} \cdot \frac{q\_m}{r}\right)\right) \cdot r\right)\\

\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 5 regimes
  2. if r < -9.79999999999999944e-76

    1. Initial program 15.7%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in r around inf

      \[\leadsto \color{blue}{r \cdot \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right)} \]
    4. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto r \cdot \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right) \]
      2. metadata-evalN/A

        \[\leadsto r \cdot \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{\color{blue}{2}}\right) \]
      3. *-commutativeN/A

        \[\leadsto \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right) \cdot \color{blue}{r} \]
      4. lower-*.f64N/A

        \[\leadsto \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right) \cdot \color{blue}{r} \]
    5. Applied rewrites5.0%

      \[\leadsto \color{blue}{\left(\frac{\left(\left|r\right| + \left|p\right|\right) - \left(-p\right)}{r} \cdot 0.5 - 0.5\right) \cdot r} \]
    6. Taylor expanded in r around 0

      \[\leadsto \frac{-1}{2} \cdot r + \color{blue}{\frac{1}{2} \cdot \left(p + \left(\left|p\right| + \left|r\right|\right)\right)} \]
    7. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{-1}{2} \cdot r + \frac{1}{2} \cdot \left(p + \left(\color{blue}{\left|p\right|} + \left|r\right|\right)\right) \]
      2. +-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left|p\right| + \left|r\right|\right)\right) + \frac{-1}{2} \cdot \color{blue}{r} \]
      3. *-commutativeN/A

        \[\leadsto \left(p + \left(\left|p\right| + \left|r\right|\right)\right) \cdot \frac{1}{2} + \frac{-1}{2} \cdot r \]
      4. lower-fma.f64N/A

        \[\leadsto \mathsf{fma}\left(p + \left(\left|p\right| + \left|r\right|\right), \frac{1}{\color{blue}{2}}, \frac{-1}{2} \cdot r\right) \]
      5. associate-+r+N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      6. lower-+.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      7. lower-+.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      8. lift-fabs.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      9. lift-fabs.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      10. metadata-evalN/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      11. lower-*.f6411.6

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right) \]
    8. Applied rewrites11.6%

      \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \color{blue}{0.5}, -0.5 \cdot r\right) \]

    if -9.79999999999999944e-76 < r < 35

    1. Initial program 41.9%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in r around 0

      \[\leadsto \color{blue}{\frac{1}{2} \cdot \left(\left(p \cdot r\right) \cdot \sqrt{\frac{1}{4 \cdot {q}^{2} + {p}^{2}}}\right) + \frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{4 \cdot {q}^{2} + {p}^{2}}\right)} \]
    4. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(p \cdot r\right) \cdot \sqrt{\frac{1}{4 \cdot {q}^{2} + {p}^{2}}}\right) + \frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{4 \cdot {q}^{2} + {p}^{2}}\right) \]
      2. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(p \cdot r\right) \cdot \sqrt{\frac{1}{4 \cdot {q}^{2} + {p}^{2}}}\right) + \frac{1}{2} \cdot \left(\color{blue}{\left(\left|p\right| + \left|r\right|\right)} - \sqrt{4 \cdot {q}^{2} + {p}^{2}}\right) \]
      3. distribute-lft-outN/A

        \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(\left(p \cdot r\right) \cdot \sqrt{\frac{1}{4 \cdot {q}^{2} + {p}^{2}}} + \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{4 \cdot {q}^{2} + {p}^{2}}\right)\right)} \]
      4. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(\left(p \cdot r\right) \cdot \sqrt{\frac{1}{4 \cdot {q}^{2} + {p}^{2}}} + \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{4 \cdot {q}^{2} + {p}^{2}}\right)\right)} \]
    5. Applied rewrites33.3%

      \[\leadsto \color{blue}{0.5 \cdot \mathsf{fma}\left({\left(\mathsf{fma}\left(q \cdot q, 4, p \cdot p\right)\right)}^{-0.5}, r \cdot p, \left(\left|r\right| + \left|p\right|\right) - \sqrt{\mathsf{fma}\left(q \cdot q, 4, p \cdot p\right)}\right)} \]
    6. Taylor expanded in p around 0

      \[\leadsto \frac{1}{2} \cdot \left(\left(\left|p\right| + \left(\left|r\right| + p \cdot \left(\frac{-1}{4} \cdot \frac{p}{q} + \frac{1}{2} \cdot \frac{r}{q}\right)\right)\right) - \color{blue}{2 \cdot q}\right) \]
    7. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left|p\right| + \left(\left|r\right| + p \cdot \left(\frac{-1}{4} \cdot \frac{p}{q} + \frac{1}{2} \cdot \frac{r}{q}\right)\right)\right) - 2 \cdot q\right) \]
      2. lower--.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left|p\right| + \left(\left|r\right| + p \cdot \left(\frac{-1}{4} \cdot \frac{p}{q} + \frac{1}{2} \cdot \frac{r}{q}\right)\right)\right) - 2 \cdot \color{blue}{q}\right) \]
    8. Applied rewrites29.2%

      \[\leadsto 0.5 \cdot \left(\left(\left(\left|p\right| + \left|r\right|\right) + p \cdot \mathsf{fma}\left(-0.25, \frac{p}{q}, 0.5 \cdot \frac{r}{q}\right)\right) - \color{blue}{2 \cdot q}\right) \]

    if 35 < r < 3.5999999999999997e250

    1. Initial program 16.9%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in r around inf

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(r \cdot \left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right)\right)} \]
    4. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
      2. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
    5. Applied rewrites29.7%

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{\left|r\right| + \left|p\right|}{r} - \mathsf{fma}\left(\frac{p}{r}, -1, 1\right)\right) \cdot r\right)} \]
    6. Taylor expanded in r around 0

      \[\leadsto \frac{1}{2} \cdot \frac{-2 \cdot {q}^{2} + r \cdot \left(\left(\left|p\right| + \left(\left|r\right| + -1 \cdot r\right)\right) - -1 \cdot p\right)}{\color{blue}{r}} \]
    7. Step-by-step derivation
      1. lower-/.f64N/A

        \[\leadsto \frac{1}{2} \cdot \frac{-2 \cdot {q}^{2} + r \cdot \left(\left(\left|p\right| + \left(\left|r\right| + -1 \cdot r\right)\right) - -1 \cdot p\right)}{r} \]
    8. Applied rewrites70.9%

      \[\leadsto \frac{1}{2} \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{\color{blue}{r}} \]
    9. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \color{blue}{\frac{1}{2}} \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{r} \]
      2. metadata-eval70.9

        \[\leadsto \color{blue}{0.5} \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{r} \]
    10. Applied rewrites70.9%

      \[\leadsto \color{blue}{0.5 \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{r}} \]

    if 3.5999999999999997e250 < r < 1.17999999999999997e277

    1. Initial program 3.9%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in r around inf

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(r \cdot \left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right)\right)} \]
    4. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
      2. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
    5. Applied rewrites1.6%

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{\left|r\right| + \left|p\right|}{r} - \mathsf{fma}\left(\frac{p}{r}, -1, 1\right)\right) \cdot r\right)} \]
    6. Taylor expanded in p around inf

      \[\leadsto \frac{1}{2} \cdot \left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{p}{r}\right) \cdot r\right) \]
    7. Step-by-step derivation
      1. lift-/.f643.5

        \[\leadsto \frac{1}{2} \cdot \left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{p}{r}\right) \cdot r\right) \]
    8. Applied rewrites3.5%

      \[\leadsto \frac{1}{2} \cdot \left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{p}{r}\right) \cdot r\right) \]
    9. Taylor expanded in r around 0

      \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}}\right) \cdot r\right) \]
    10. Step-by-step derivation
      1. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}}\right) \cdot r\right) \]
      2. pow2N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \frac{q \cdot q}{{r}^{2}}\right) \cdot r\right) \]
      3. pow2N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \frac{q \cdot q}{r \cdot r}\right) \cdot r\right) \]
      4. times-fracN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]
      5. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]
      6. lower-/.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]
      7. lower-/.f6470.6

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]
    11. Applied rewrites70.6%

      \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]

    if 1.17999999999999997e277 < r

    1. Initial program 0.8%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in p around -inf

      \[\leadsto \color{blue}{-1 \cdot \left(p \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)\right)} \]
    4. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto -1 \cdot \left(p \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{\color{blue}{2}}\right)\right) \]
      2. associate-*r*N/A

        \[\leadsto \left(-1 \cdot p\right) \cdot \color{blue}{\left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)} \]
      3. mul-1-negN/A

        \[\leadsto \left(\mathsf{neg}\left(p\right)\right) \cdot \left(\color{blue}{\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p}} - \frac{1}{2}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \left(\mathsf{neg}\left(p\right)\right) \cdot \color{blue}{\left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)} \]
      5. lower-neg.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\color{blue}{\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p}} - \frac{1}{2}\right) \]
      6. lower--.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \color{blue}{\frac{1}{2}}\right) \]
    5. Applied rewrites100.0%

      \[\leadsto \color{blue}{\left(-p\right) \cdot \left(\frac{\left|p\right| + \left(\left|r\right| - r\right)}{p} \cdot -0.5 - 0.5\right)} \]
    6. Taylor expanded in r around inf

      \[\leadsto \left(-p\right) \cdot \left(\frac{1}{2} \cdot \color{blue}{\frac{r}{p}}\right) \]
    7. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{1}{2} \cdot \frac{r}{p}\right) \]
      2. *-commutativeN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{\color{blue}{2}}\right) \]
      3. unpow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{1}}{p} \cdot \frac{1}{2}\right) \]
      4. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{\left(\frac{2}{2}\right)}}{p} \cdot \frac{1}{2}\right) \]
      5. sqrt-pow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{{r}^{2}}}{p} \cdot \frac{1}{2}\right) \]
      6. unpow2N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{r \cdot r}}{p} \cdot \frac{1}{2}\right) \]
      7. rem-sqrt-square-revN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\left|r\right|}{p} \cdot \frac{1}{2}\right) \]
      8. lower-*.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\left|r\right|}{p} \cdot \frac{1}{\color{blue}{2}}\right) \]
      9. rem-sqrt-square-revN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{r \cdot r}}{p} \cdot \frac{1}{2}\right) \]
      10. unpow2N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{{r}^{2}}}{p} \cdot \frac{1}{2}\right) \]
      11. sqrt-pow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{\left(\frac{2}{2}\right)}}{p} \cdot \frac{1}{2}\right) \]
      12. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{1}}{p} \cdot \frac{1}{2}\right) \]
      13. unpow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{2}\right) \]
      14. lower-/.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{2}\right) \]
      15. metadata-eval0.8

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot 0.5\right) \]
    8. Applied rewrites0.8%

      \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \color{blue}{0.5}\right) \]
    9. Taylor expanded in p around 0

      \[\leadsto \frac{1}{2} \cdot p + \color{blue}{\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - r\right)} \]
    10. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot p + \frac{1}{2} \cdot \left(\left(\color{blue}{\left|p\right|} + \left|r\right|\right) - r\right) \]
      2. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot p + \frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - r\right) \]
      3. distribute-lft-outN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \color{blue}{\left(\left(\left|p\right| + \left|r\right|\right) - r\right)}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \color{blue}{\left(\left(\left|p\right| + \left|r\right|\right) - r\right)}\right) \]
      5. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\color{blue}{\left(\left|p\right| + \left|r\right|\right)} - r\right)\right) \]
      6. lower-+.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|p\right| + \left|r\right|\right) - \color{blue}{r}\right)\right) \]
      7. associate-+r-N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left|p\right| + \left(\left|r\right| - \color{blue}{r}\right)\right)\right) \]
      8. +-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      9. lower-+.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      10. lower--.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      11. lift-fabs.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      12. lift-fabs.f64100.0

        \[\leadsto 0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
    11. Applied rewrites100.0%

      \[\leadsto 0.5 \cdot \color{blue}{\left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)} \]
  3. Recombined 5 regimes into one program.
  4. Final simplification36.2%

    \[\leadsto \begin{array}{l} \mathbf{if}\;r \leq -9.8 \cdot 10^{-76}:\\ \;\;\;\;\mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right)\\ \mathbf{elif}\;r \leq 35:\\ \;\;\;\;0.5 \cdot \left(\left(\left(\left|p\right| + \left|r\right|\right) + p \cdot \mathsf{fma}\left(-0.25, \frac{p}{q}, 0.5 \cdot \frac{r}{q}\right)\right) - 2 \cdot q\right)\\ \mathbf{elif}\;r \leq 3.6 \cdot 10^{+250}:\\ \;\;\;\;0.5 \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) + p, r, -2 \cdot \left(q \cdot q\right)\right)}{r}\\ \mathbf{elif}\;r \leq 1.18 \cdot 10^{+277}:\\ \;\;\;\;\frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)\\ \end{array} \]
  5. Add Preprocessing

Alternative 4: 55.5% accurate, 3.2× speedup?

\[\begin{array}{l} q_m = \left|q\right| \\ [p, r, q_m] = \mathsf{sort}([p, r, q_m])\\ \\ \begin{array}{l} \mathbf{if}\;r \leq -9.8 \cdot 10^{-76}:\\ \;\;\;\;\mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right)\\ \mathbf{elif}\;r \leq 35:\\ \;\;\;\;\mathsf{fma}\left(0.5, \left(\left|p\right| + \left|r\right|\right) - 2 \cdot q\_m, p \cdot \mathsf{fma}\left(-0.125, \frac{p}{q\_m}, 0.25 \cdot \frac{r}{q\_m}\right)\right)\\ \mathbf{elif}\;r \leq 3.6 \cdot 10^{+250}:\\ \;\;\;\;0.5 \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) + p, r, -2 \cdot \left(q\_m \cdot q\_m\right)\right)}{r}\\ \mathbf{elif}\;r \leq 1.18 \cdot 10^{+277}:\\ \;\;\;\;\frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q\_m}{r} \cdot \frac{q\_m}{r}\right)\right) \cdot r\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)\\ \end{array} \end{array} \]
q_m = (fabs.f64 q)
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
(FPCore (p r q_m)
 :precision binary64
 (if (<= r -9.8e-76)
   (fma (+ (+ p (fabs p)) (fabs r)) 0.5 (* -0.5 r))
   (if (<= r 35.0)
     (fma
      0.5
      (- (+ (fabs p) (fabs r)) (* 2.0 q_m))
      (* p (fma -0.125 (/ p q_m) (* 0.25 (/ r q_m)))))
     (if (<= r 3.6e+250)
       (*
        0.5
        (/
         (fma (+ (+ (fma -1.0 r (fabs r)) (fabs p)) p) r (* -2.0 (* q_m q_m)))
         r))
       (if (<= r 1.18e+277)
         (* (/ 1.0 2.0) (* (* -2.0 (* (/ q_m r) (/ q_m r))) r))
         (* 0.5 (+ p (+ (- (fabs r) r) (fabs p)))))))))
q_m = fabs(q);
assert(p < r && r < q_m);
double code(double p, double r, double q_m) {
	double tmp;
	if (r <= -9.8e-76) {
		tmp = fma(((p + fabs(p)) + fabs(r)), 0.5, (-0.5 * r));
	} else if (r <= 35.0) {
		tmp = fma(0.5, ((fabs(p) + fabs(r)) - (2.0 * q_m)), (p * fma(-0.125, (p / q_m), (0.25 * (r / q_m)))));
	} else if (r <= 3.6e+250) {
		tmp = 0.5 * (fma(((fma(-1.0, r, fabs(r)) + fabs(p)) + p), r, (-2.0 * (q_m * q_m))) / r);
	} else if (r <= 1.18e+277) {
		tmp = (1.0 / 2.0) * ((-2.0 * ((q_m / r) * (q_m / r))) * r);
	} else {
		tmp = 0.5 * (p + ((fabs(r) - r) + fabs(p)));
	}
	return tmp;
}
q_m = abs(q)
p, r, q_m = sort([p, r, q_m])
function code(p, r, q_m)
	tmp = 0.0
	if (r <= -9.8e-76)
		tmp = fma(Float64(Float64(p + abs(p)) + abs(r)), 0.5, Float64(-0.5 * r));
	elseif (r <= 35.0)
		tmp = fma(0.5, Float64(Float64(abs(p) + abs(r)) - Float64(2.0 * q_m)), Float64(p * fma(-0.125, Float64(p / q_m), Float64(0.25 * Float64(r / q_m)))));
	elseif (r <= 3.6e+250)
		tmp = Float64(0.5 * Float64(fma(Float64(Float64(fma(-1.0, r, abs(r)) + abs(p)) + p), r, Float64(-2.0 * Float64(q_m * q_m))) / r));
	elseif (r <= 1.18e+277)
		tmp = Float64(Float64(1.0 / 2.0) * Float64(Float64(-2.0 * Float64(Float64(q_m / r) * Float64(q_m / r))) * r));
	else
		tmp = Float64(0.5 * Float64(p + Float64(Float64(abs(r) - r) + abs(p))));
	end
	return tmp
end
q_m = N[Abs[q], $MachinePrecision]
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
code[p_, r_, q$95$m_] := If[LessEqual[r, -9.8e-76], N[(N[(N[(p + N[Abs[p], $MachinePrecision]), $MachinePrecision] + N[Abs[r], $MachinePrecision]), $MachinePrecision] * 0.5 + N[(-0.5 * r), $MachinePrecision]), $MachinePrecision], If[LessEqual[r, 35.0], N[(0.5 * N[(N[(N[Abs[p], $MachinePrecision] + N[Abs[r], $MachinePrecision]), $MachinePrecision] - N[(2.0 * q$95$m), $MachinePrecision]), $MachinePrecision] + N[(p * N[(-0.125 * N[(p / q$95$m), $MachinePrecision] + N[(0.25 * N[(r / q$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[r, 3.6e+250], N[(0.5 * N[(N[(N[(N[(N[(-1.0 * r + N[Abs[r], $MachinePrecision]), $MachinePrecision] + N[Abs[p], $MachinePrecision]), $MachinePrecision] + p), $MachinePrecision] * r + N[(-2.0 * N[(q$95$m * q$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / r), $MachinePrecision]), $MachinePrecision], If[LessEqual[r, 1.18e+277], N[(N[(1.0 / 2.0), $MachinePrecision] * N[(N[(-2.0 * N[(N[(q$95$m / r), $MachinePrecision] * N[(q$95$m / r), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * r), $MachinePrecision]), $MachinePrecision], N[(0.5 * N[(p + N[(N[(N[Abs[r], $MachinePrecision] - r), $MachinePrecision] + N[Abs[p], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
q_m = \left|q\right|
\\
[p, r, q_m] = \mathsf{sort}([p, r, q_m])\\
\\
\begin{array}{l}
\mathbf{if}\;r \leq -9.8 \cdot 10^{-76}:\\
\;\;\;\;\mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right)\\

\mathbf{elif}\;r \leq 35:\\
\;\;\;\;\mathsf{fma}\left(0.5, \left(\left|p\right| + \left|r\right|\right) - 2 \cdot q\_m, p \cdot \mathsf{fma}\left(-0.125, \frac{p}{q\_m}, 0.25 \cdot \frac{r}{q\_m}\right)\right)\\

\mathbf{elif}\;r \leq 3.6 \cdot 10^{+250}:\\
\;\;\;\;0.5 \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) + p, r, -2 \cdot \left(q\_m \cdot q\_m\right)\right)}{r}\\

\mathbf{elif}\;r \leq 1.18 \cdot 10^{+277}:\\
\;\;\;\;\frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q\_m}{r} \cdot \frac{q\_m}{r}\right)\right) \cdot r\right)\\

\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 5 regimes
  2. if r < -9.79999999999999944e-76

    1. Initial program 15.7%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in r around inf

      \[\leadsto \color{blue}{r \cdot \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right)} \]
    4. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto r \cdot \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right) \]
      2. metadata-evalN/A

        \[\leadsto r \cdot \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{\color{blue}{2}}\right) \]
      3. *-commutativeN/A

        \[\leadsto \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right) \cdot \color{blue}{r} \]
      4. lower-*.f64N/A

        \[\leadsto \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right) \cdot \color{blue}{r} \]
    5. Applied rewrites5.0%

      \[\leadsto \color{blue}{\left(\frac{\left(\left|r\right| + \left|p\right|\right) - \left(-p\right)}{r} \cdot 0.5 - 0.5\right) \cdot r} \]
    6. Taylor expanded in r around 0

      \[\leadsto \frac{-1}{2} \cdot r + \color{blue}{\frac{1}{2} \cdot \left(p + \left(\left|p\right| + \left|r\right|\right)\right)} \]
    7. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{-1}{2} \cdot r + \frac{1}{2} \cdot \left(p + \left(\color{blue}{\left|p\right|} + \left|r\right|\right)\right) \]
      2. +-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left|p\right| + \left|r\right|\right)\right) + \frac{-1}{2} \cdot \color{blue}{r} \]
      3. *-commutativeN/A

        \[\leadsto \left(p + \left(\left|p\right| + \left|r\right|\right)\right) \cdot \frac{1}{2} + \frac{-1}{2} \cdot r \]
      4. lower-fma.f64N/A

        \[\leadsto \mathsf{fma}\left(p + \left(\left|p\right| + \left|r\right|\right), \frac{1}{\color{blue}{2}}, \frac{-1}{2} \cdot r\right) \]
      5. associate-+r+N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      6. lower-+.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      7. lower-+.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      8. lift-fabs.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      9. lift-fabs.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      10. metadata-evalN/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      11. lower-*.f6411.6

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right) \]
    8. Applied rewrites11.6%

      \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \color{blue}{0.5}, -0.5 \cdot r\right) \]

    if -9.79999999999999944e-76 < r < 35

    1. Initial program 41.9%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in r around 0

      \[\leadsto \color{blue}{\frac{1}{2} \cdot \left(\left(p \cdot r\right) \cdot \sqrt{\frac{1}{4 \cdot {q}^{2} + {p}^{2}}}\right) + \frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{4 \cdot {q}^{2} + {p}^{2}}\right)} \]
    4. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(p \cdot r\right) \cdot \sqrt{\frac{1}{4 \cdot {q}^{2} + {p}^{2}}}\right) + \frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{4 \cdot {q}^{2} + {p}^{2}}\right) \]
      2. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(p \cdot r\right) \cdot \sqrt{\frac{1}{4 \cdot {q}^{2} + {p}^{2}}}\right) + \frac{1}{2} \cdot \left(\color{blue}{\left(\left|p\right| + \left|r\right|\right)} - \sqrt{4 \cdot {q}^{2} + {p}^{2}}\right) \]
      3. distribute-lft-outN/A

        \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(\left(p \cdot r\right) \cdot \sqrt{\frac{1}{4 \cdot {q}^{2} + {p}^{2}}} + \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{4 \cdot {q}^{2} + {p}^{2}}\right)\right)} \]
      4. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(\left(p \cdot r\right) \cdot \sqrt{\frac{1}{4 \cdot {q}^{2} + {p}^{2}}} + \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{4 \cdot {q}^{2} + {p}^{2}}\right)\right)} \]
    5. Applied rewrites33.3%

      \[\leadsto \color{blue}{0.5 \cdot \mathsf{fma}\left({\left(\mathsf{fma}\left(q \cdot q, 4, p \cdot p\right)\right)}^{-0.5}, r \cdot p, \left(\left|r\right| + \left|p\right|\right) - \sqrt{\mathsf{fma}\left(q \cdot q, 4, p \cdot p\right)}\right)} \]
    6. Taylor expanded in p around 0

      \[\leadsto \frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - 2 \cdot q\right) + \color{blue}{p \cdot \left(\frac{-1}{8} \cdot \frac{p}{q} + \frac{1}{4} \cdot \frac{r}{q}\right)} \]
    7. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - 2 \cdot q\right) + p \cdot \left(\color{blue}{\frac{-1}{8}} \cdot \frac{p}{q} + \frac{1}{4} \cdot \frac{r}{q}\right) \]
      2. lower-fma.f64N/A

        \[\leadsto \mathsf{fma}\left(\frac{1}{2}, \left(\left|p\right| + \left|r\right|\right) - \color{blue}{2 \cdot q}, p \cdot \left(\frac{-1}{8} \cdot \frac{p}{q} + \frac{1}{4} \cdot \frac{r}{q}\right)\right) \]
      3. metadata-evalN/A

        \[\leadsto \mathsf{fma}\left(\frac{1}{2}, \left(\left|p\right| + \left|r\right|\right) - \color{blue}{2} \cdot q, p \cdot \left(\frac{-1}{8} \cdot \frac{p}{q} + \frac{1}{4} \cdot \frac{r}{q}\right)\right) \]
      4. lower--.f64N/A

        \[\leadsto \mathsf{fma}\left(\frac{1}{2}, \left(\left|p\right| + \left|r\right|\right) - 2 \cdot \color{blue}{q}, p \cdot \left(\frac{-1}{8} \cdot \frac{p}{q} + \frac{1}{4} \cdot \frac{r}{q}\right)\right) \]
      5. lower-+.f64N/A

        \[\leadsto \mathsf{fma}\left(\frac{1}{2}, \left(\left|p\right| + \left|r\right|\right) - 2 \cdot q, p \cdot \left(\frac{-1}{8} \cdot \frac{p}{q} + \frac{1}{4} \cdot \frac{r}{q}\right)\right) \]
      6. lift-fabs.f64N/A

        \[\leadsto \mathsf{fma}\left(\frac{1}{2}, \left(\left|p\right| + \left|r\right|\right) - 2 \cdot q, p \cdot \left(\frac{-1}{8} \cdot \frac{p}{q} + \frac{1}{4} \cdot \frac{r}{q}\right)\right) \]
      7. lift-fabs.f64N/A

        \[\leadsto \mathsf{fma}\left(\frac{1}{2}, \left(\left|p\right| + \left|r\right|\right) - 2 \cdot q, p \cdot \left(\frac{-1}{8} \cdot \frac{p}{q} + \frac{1}{4} \cdot \frac{r}{q}\right)\right) \]
      8. lower-*.f64N/A

        \[\leadsto \mathsf{fma}\left(\frac{1}{2}, \left(\left|p\right| + \left|r\right|\right) - 2 \cdot q, p \cdot \left(\frac{-1}{8} \cdot \frac{p}{q} + \frac{1}{4} \cdot \frac{r}{q}\right)\right) \]
      9. lower-*.f64N/A

        \[\leadsto \mathsf{fma}\left(\frac{1}{2}, \left(\left|p\right| + \left|r\right|\right) - 2 \cdot q, p \cdot \left(\frac{-1}{8} \cdot \frac{p}{q} + \frac{1}{4} \cdot \frac{r}{q}\right)\right) \]
      10. lower-fma.f64N/A

        \[\leadsto \mathsf{fma}\left(\frac{1}{2}, \left(\left|p\right| + \left|r\right|\right) - 2 \cdot q, p \cdot \mathsf{fma}\left(\frac{-1}{8}, \frac{p}{q}, \frac{1}{4} \cdot \frac{r}{q}\right)\right) \]
      11. lower-/.f64N/A

        \[\leadsto \mathsf{fma}\left(\frac{1}{2}, \left(\left|p\right| + \left|r\right|\right) - 2 \cdot q, p \cdot \mathsf{fma}\left(\frac{-1}{8}, \frac{p}{q}, \frac{1}{4} \cdot \frac{r}{q}\right)\right) \]
      12. lower-*.f64N/A

        \[\leadsto \mathsf{fma}\left(\frac{1}{2}, \left(\left|p\right| + \left|r\right|\right) - 2 \cdot q, p \cdot \mathsf{fma}\left(\frac{-1}{8}, \frac{p}{q}, \frac{1}{4} \cdot \frac{r}{q}\right)\right) \]
      13. lower-/.f6429.2

        \[\leadsto \mathsf{fma}\left(0.5, \left(\left|p\right| + \left|r\right|\right) - 2 \cdot q, p \cdot \mathsf{fma}\left(-0.125, \frac{p}{q}, 0.25 \cdot \frac{r}{q}\right)\right) \]
    8. Applied rewrites29.2%

      \[\leadsto \mathsf{fma}\left(0.5, \color{blue}{\left(\left|p\right| + \left|r\right|\right) - 2 \cdot q}, p \cdot \mathsf{fma}\left(-0.125, \frac{p}{q}, 0.25 \cdot \frac{r}{q}\right)\right) \]

    if 35 < r < 3.5999999999999997e250

    1. Initial program 16.9%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in r around inf

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(r \cdot \left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right)\right)} \]
    4. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
      2. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
    5. Applied rewrites29.7%

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{\left|r\right| + \left|p\right|}{r} - \mathsf{fma}\left(\frac{p}{r}, -1, 1\right)\right) \cdot r\right)} \]
    6. Taylor expanded in r around 0

      \[\leadsto \frac{1}{2} \cdot \frac{-2 \cdot {q}^{2} + r \cdot \left(\left(\left|p\right| + \left(\left|r\right| + -1 \cdot r\right)\right) - -1 \cdot p\right)}{\color{blue}{r}} \]
    7. Step-by-step derivation
      1. lower-/.f64N/A

        \[\leadsto \frac{1}{2} \cdot \frac{-2 \cdot {q}^{2} + r \cdot \left(\left(\left|p\right| + \left(\left|r\right| + -1 \cdot r\right)\right) - -1 \cdot p\right)}{r} \]
    8. Applied rewrites70.9%

      \[\leadsto \frac{1}{2} \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{\color{blue}{r}} \]
    9. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \color{blue}{\frac{1}{2}} \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{r} \]
      2. metadata-eval70.9

        \[\leadsto \color{blue}{0.5} \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{r} \]
    10. Applied rewrites70.9%

      \[\leadsto \color{blue}{0.5 \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{r}} \]

    if 3.5999999999999997e250 < r < 1.17999999999999997e277

    1. Initial program 3.9%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in r around inf

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(r \cdot \left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right)\right)} \]
    4. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
      2. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
    5. Applied rewrites1.6%

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{\left|r\right| + \left|p\right|}{r} - \mathsf{fma}\left(\frac{p}{r}, -1, 1\right)\right) \cdot r\right)} \]
    6. Taylor expanded in p around inf

      \[\leadsto \frac{1}{2} \cdot \left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{p}{r}\right) \cdot r\right) \]
    7. Step-by-step derivation
      1. lift-/.f643.5

        \[\leadsto \frac{1}{2} \cdot \left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{p}{r}\right) \cdot r\right) \]
    8. Applied rewrites3.5%

      \[\leadsto \frac{1}{2} \cdot \left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{p}{r}\right) \cdot r\right) \]
    9. Taylor expanded in r around 0

      \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}}\right) \cdot r\right) \]
    10. Step-by-step derivation
      1. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}}\right) \cdot r\right) \]
      2. pow2N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \frac{q \cdot q}{{r}^{2}}\right) \cdot r\right) \]
      3. pow2N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \frac{q \cdot q}{r \cdot r}\right) \cdot r\right) \]
      4. times-fracN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]
      5. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]
      6. lower-/.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]
      7. lower-/.f6470.6

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]
    11. Applied rewrites70.6%

      \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]

    if 1.17999999999999997e277 < r

    1. Initial program 0.8%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in p around -inf

      \[\leadsto \color{blue}{-1 \cdot \left(p \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)\right)} \]
    4. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto -1 \cdot \left(p \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{\color{blue}{2}}\right)\right) \]
      2. associate-*r*N/A

        \[\leadsto \left(-1 \cdot p\right) \cdot \color{blue}{\left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)} \]
      3. mul-1-negN/A

        \[\leadsto \left(\mathsf{neg}\left(p\right)\right) \cdot \left(\color{blue}{\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p}} - \frac{1}{2}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \left(\mathsf{neg}\left(p\right)\right) \cdot \color{blue}{\left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)} \]
      5. lower-neg.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\color{blue}{\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p}} - \frac{1}{2}\right) \]
      6. lower--.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \color{blue}{\frac{1}{2}}\right) \]
    5. Applied rewrites100.0%

      \[\leadsto \color{blue}{\left(-p\right) \cdot \left(\frac{\left|p\right| + \left(\left|r\right| - r\right)}{p} \cdot -0.5 - 0.5\right)} \]
    6. Taylor expanded in r around inf

      \[\leadsto \left(-p\right) \cdot \left(\frac{1}{2} \cdot \color{blue}{\frac{r}{p}}\right) \]
    7. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{1}{2} \cdot \frac{r}{p}\right) \]
      2. *-commutativeN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{\color{blue}{2}}\right) \]
      3. unpow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{1}}{p} \cdot \frac{1}{2}\right) \]
      4. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{\left(\frac{2}{2}\right)}}{p} \cdot \frac{1}{2}\right) \]
      5. sqrt-pow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{{r}^{2}}}{p} \cdot \frac{1}{2}\right) \]
      6. unpow2N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{r \cdot r}}{p} \cdot \frac{1}{2}\right) \]
      7. rem-sqrt-square-revN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\left|r\right|}{p} \cdot \frac{1}{2}\right) \]
      8. lower-*.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\left|r\right|}{p} \cdot \frac{1}{\color{blue}{2}}\right) \]
      9. rem-sqrt-square-revN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{r \cdot r}}{p} \cdot \frac{1}{2}\right) \]
      10. unpow2N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{{r}^{2}}}{p} \cdot \frac{1}{2}\right) \]
      11. sqrt-pow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{\left(\frac{2}{2}\right)}}{p} \cdot \frac{1}{2}\right) \]
      12. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{1}}{p} \cdot \frac{1}{2}\right) \]
      13. unpow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{2}\right) \]
      14. lower-/.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{2}\right) \]
      15. metadata-eval0.8

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot 0.5\right) \]
    8. Applied rewrites0.8%

      \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \color{blue}{0.5}\right) \]
    9. Taylor expanded in p around 0

      \[\leadsto \frac{1}{2} \cdot p + \color{blue}{\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - r\right)} \]
    10. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot p + \frac{1}{2} \cdot \left(\left(\color{blue}{\left|p\right|} + \left|r\right|\right) - r\right) \]
      2. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot p + \frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - r\right) \]
      3. distribute-lft-outN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \color{blue}{\left(\left(\left|p\right| + \left|r\right|\right) - r\right)}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \color{blue}{\left(\left(\left|p\right| + \left|r\right|\right) - r\right)}\right) \]
      5. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\color{blue}{\left(\left|p\right| + \left|r\right|\right)} - r\right)\right) \]
      6. lower-+.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|p\right| + \left|r\right|\right) - \color{blue}{r}\right)\right) \]
      7. associate-+r-N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left|p\right| + \left(\left|r\right| - \color{blue}{r}\right)\right)\right) \]
      8. +-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      9. lower-+.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      10. lower--.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      11. lift-fabs.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      12. lift-fabs.f64100.0

        \[\leadsto 0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
    11. Applied rewrites100.0%

      \[\leadsto 0.5 \cdot \color{blue}{\left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)} \]
  3. Recombined 5 regimes into one program.
  4. Final simplification36.2%

    \[\leadsto \begin{array}{l} \mathbf{if}\;r \leq -9.8 \cdot 10^{-76}:\\ \;\;\;\;\mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right)\\ \mathbf{elif}\;r \leq 35:\\ \;\;\;\;\mathsf{fma}\left(0.5, \left(\left|p\right| + \left|r\right|\right) - 2 \cdot q, p \cdot \mathsf{fma}\left(-0.125, \frac{p}{q}, 0.25 \cdot \frac{r}{q}\right)\right)\\ \mathbf{elif}\;r \leq 3.6 \cdot 10^{+250}:\\ \;\;\;\;0.5 \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) + p, r, -2 \cdot \left(q \cdot q\right)\right)}{r}\\ \mathbf{elif}\;r \leq 1.18 \cdot 10^{+277}:\\ \;\;\;\;\frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)\\ \end{array} \]
  5. Add Preprocessing

Alternative 5: 55.8% accurate, 3.2× speedup?

\[\begin{array}{l} q_m = \left|q\right| \\ [p, r, q_m] = \mathsf{sort}([p, r, q_m])\\ \\ \begin{array}{l} \mathbf{if}\;r \leq -9.8 \cdot 10^{-76}:\\ \;\;\;\;\mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right)\\ \mathbf{elif}\;r \leq 1850000:\\ \;\;\;\;-q\_m\\ \mathbf{elif}\;r \leq 3.6 \cdot 10^{+250}:\\ \;\;\;\;0.5 \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) + p, r, -2 \cdot \left(q\_m \cdot q\_m\right)\right)}{r}\\ \mathbf{elif}\;r \leq 1.18 \cdot 10^{+277}:\\ \;\;\;\;\frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q\_m}{r} \cdot \frac{q\_m}{r}\right)\right) \cdot r\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)\\ \end{array} \end{array} \]
q_m = (fabs.f64 q)
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
(FPCore (p r q_m)
 :precision binary64
 (if (<= r -9.8e-76)
   (fma (+ (+ p (fabs p)) (fabs r)) 0.5 (* -0.5 r))
   (if (<= r 1850000.0)
     (- q_m)
     (if (<= r 3.6e+250)
       (*
        0.5
        (/
         (fma (+ (+ (fma -1.0 r (fabs r)) (fabs p)) p) r (* -2.0 (* q_m q_m)))
         r))
       (if (<= r 1.18e+277)
         (* (/ 1.0 2.0) (* (* -2.0 (* (/ q_m r) (/ q_m r))) r))
         (* 0.5 (+ p (+ (- (fabs r) r) (fabs p)))))))))
q_m = fabs(q);
assert(p < r && r < q_m);
double code(double p, double r, double q_m) {
	double tmp;
	if (r <= -9.8e-76) {
		tmp = fma(((p + fabs(p)) + fabs(r)), 0.5, (-0.5 * r));
	} else if (r <= 1850000.0) {
		tmp = -q_m;
	} else if (r <= 3.6e+250) {
		tmp = 0.5 * (fma(((fma(-1.0, r, fabs(r)) + fabs(p)) + p), r, (-2.0 * (q_m * q_m))) / r);
	} else if (r <= 1.18e+277) {
		tmp = (1.0 / 2.0) * ((-2.0 * ((q_m / r) * (q_m / r))) * r);
	} else {
		tmp = 0.5 * (p + ((fabs(r) - r) + fabs(p)));
	}
	return tmp;
}
q_m = abs(q)
p, r, q_m = sort([p, r, q_m])
function code(p, r, q_m)
	tmp = 0.0
	if (r <= -9.8e-76)
		tmp = fma(Float64(Float64(p + abs(p)) + abs(r)), 0.5, Float64(-0.5 * r));
	elseif (r <= 1850000.0)
		tmp = Float64(-q_m);
	elseif (r <= 3.6e+250)
		tmp = Float64(0.5 * Float64(fma(Float64(Float64(fma(-1.0, r, abs(r)) + abs(p)) + p), r, Float64(-2.0 * Float64(q_m * q_m))) / r));
	elseif (r <= 1.18e+277)
		tmp = Float64(Float64(1.0 / 2.0) * Float64(Float64(-2.0 * Float64(Float64(q_m / r) * Float64(q_m / r))) * r));
	else
		tmp = Float64(0.5 * Float64(p + Float64(Float64(abs(r) - r) + abs(p))));
	end
	return tmp
end
q_m = N[Abs[q], $MachinePrecision]
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
code[p_, r_, q$95$m_] := If[LessEqual[r, -9.8e-76], N[(N[(N[(p + N[Abs[p], $MachinePrecision]), $MachinePrecision] + N[Abs[r], $MachinePrecision]), $MachinePrecision] * 0.5 + N[(-0.5 * r), $MachinePrecision]), $MachinePrecision], If[LessEqual[r, 1850000.0], (-q$95$m), If[LessEqual[r, 3.6e+250], N[(0.5 * N[(N[(N[(N[(N[(-1.0 * r + N[Abs[r], $MachinePrecision]), $MachinePrecision] + N[Abs[p], $MachinePrecision]), $MachinePrecision] + p), $MachinePrecision] * r + N[(-2.0 * N[(q$95$m * q$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / r), $MachinePrecision]), $MachinePrecision], If[LessEqual[r, 1.18e+277], N[(N[(1.0 / 2.0), $MachinePrecision] * N[(N[(-2.0 * N[(N[(q$95$m / r), $MachinePrecision] * N[(q$95$m / r), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * r), $MachinePrecision]), $MachinePrecision], N[(0.5 * N[(p + N[(N[(N[Abs[r], $MachinePrecision] - r), $MachinePrecision] + N[Abs[p], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
q_m = \left|q\right|
\\
[p, r, q_m] = \mathsf{sort}([p, r, q_m])\\
\\
\begin{array}{l}
\mathbf{if}\;r \leq -9.8 \cdot 10^{-76}:\\
\;\;\;\;\mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right)\\

\mathbf{elif}\;r \leq 1850000:\\
\;\;\;\;-q\_m\\

\mathbf{elif}\;r \leq 3.6 \cdot 10^{+250}:\\
\;\;\;\;0.5 \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) + p, r, -2 \cdot \left(q\_m \cdot q\_m\right)\right)}{r}\\

\mathbf{elif}\;r \leq 1.18 \cdot 10^{+277}:\\
\;\;\;\;\frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q\_m}{r} \cdot \frac{q\_m}{r}\right)\right) \cdot r\right)\\

\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 5 regimes
  2. if r < -9.79999999999999944e-76

    1. Initial program 15.7%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in r around inf

      \[\leadsto \color{blue}{r \cdot \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right)} \]
    4. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto r \cdot \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right) \]
      2. metadata-evalN/A

        \[\leadsto r \cdot \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{\color{blue}{2}}\right) \]
      3. *-commutativeN/A

        \[\leadsto \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right) \cdot \color{blue}{r} \]
      4. lower-*.f64N/A

        \[\leadsto \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right) \cdot \color{blue}{r} \]
    5. Applied rewrites5.0%

      \[\leadsto \color{blue}{\left(\frac{\left(\left|r\right| + \left|p\right|\right) - \left(-p\right)}{r} \cdot 0.5 - 0.5\right) \cdot r} \]
    6. Taylor expanded in r around 0

      \[\leadsto \frac{-1}{2} \cdot r + \color{blue}{\frac{1}{2} \cdot \left(p + \left(\left|p\right| + \left|r\right|\right)\right)} \]
    7. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{-1}{2} \cdot r + \frac{1}{2} \cdot \left(p + \left(\color{blue}{\left|p\right|} + \left|r\right|\right)\right) \]
      2. +-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left|p\right| + \left|r\right|\right)\right) + \frac{-1}{2} \cdot \color{blue}{r} \]
      3. *-commutativeN/A

        \[\leadsto \left(p + \left(\left|p\right| + \left|r\right|\right)\right) \cdot \frac{1}{2} + \frac{-1}{2} \cdot r \]
      4. lower-fma.f64N/A

        \[\leadsto \mathsf{fma}\left(p + \left(\left|p\right| + \left|r\right|\right), \frac{1}{\color{blue}{2}}, \frac{-1}{2} \cdot r\right) \]
      5. associate-+r+N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      6. lower-+.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      7. lower-+.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      8. lift-fabs.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      9. lift-fabs.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      10. metadata-evalN/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      11. lower-*.f6411.6

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right) \]
    8. Applied rewrites11.6%

      \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \color{blue}{0.5}, -0.5 \cdot r\right) \]

    if -9.79999999999999944e-76 < r < 1.85e6

    1. Initial program 43.0%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in q around inf

      \[\leadsto \color{blue}{-1 \cdot q} \]
    4. Step-by-step derivation
      1. mul-1-negN/A

        \[\leadsto \mathsf{neg}\left(q\right) \]
      2. lower-neg.f6430.2

        \[\leadsto -q \]
    5. Applied rewrites30.2%

      \[\leadsto \color{blue}{-q} \]

    if 1.85e6 < r < 3.5999999999999997e250

    1. Initial program 13.9%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in r around inf

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(r \cdot \left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right)\right)} \]
    4. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
      2. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
    5. Applied rewrites28.9%

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{\left|r\right| + \left|p\right|}{r} - \mathsf{fma}\left(\frac{p}{r}, -1, 1\right)\right) \cdot r\right)} \]
    6. Taylor expanded in r around 0

      \[\leadsto \frac{1}{2} \cdot \frac{-2 \cdot {q}^{2} + r \cdot \left(\left(\left|p\right| + \left(\left|r\right| + -1 \cdot r\right)\right) - -1 \cdot p\right)}{\color{blue}{r}} \]
    7. Step-by-step derivation
      1. lower-/.f64N/A

        \[\leadsto \frac{1}{2} \cdot \frac{-2 \cdot {q}^{2} + r \cdot \left(\left(\left|p\right| + \left(\left|r\right| + -1 \cdot r\right)\right) - -1 \cdot p\right)}{r} \]
    8. Applied rewrites71.5%

      \[\leadsto \frac{1}{2} \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{\color{blue}{r}} \]
    9. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \color{blue}{\frac{1}{2}} \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{r} \]
      2. metadata-eval71.5

        \[\leadsto \color{blue}{0.5} \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{r} \]
    10. Applied rewrites71.5%

      \[\leadsto \color{blue}{0.5 \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{r}} \]

    if 3.5999999999999997e250 < r < 1.17999999999999997e277

    1. Initial program 3.9%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in r around inf

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(r \cdot \left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right)\right)} \]
    4. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
      2. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
    5. Applied rewrites1.6%

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{\left|r\right| + \left|p\right|}{r} - \mathsf{fma}\left(\frac{p}{r}, -1, 1\right)\right) \cdot r\right)} \]
    6. Taylor expanded in p around inf

      \[\leadsto \frac{1}{2} \cdot \left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{p}{r}\right) \cdot r\right) \]
    7. Step-by-step derivation
      1. lift-/.f643.5

        \[\leadsto \frac{1}{2} \cdot \left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{p}{r}\right) \cdot r\right) \]
    8. Applied rewrites3.5%

      \[\leadsto \frac{1}{2} \cdot \left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{p}{r}\right) \cdot r\right) \]
    9. Taylor expanded in r around 0

      \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}}\right) \cdot r\right) \]
    10. Step-by-step derivation
      1. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}}\right) \cdot r\right) \]
      2. pow2N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \frac{q \cdot q}{{r}^{2}}\right) \cdot r\right) \]
      3. pow2N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \frac{q \cdot q}{r \cdot r}\right) \cdot r\right) \]
      4. times-fracN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]
      5. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]
      6. lower-/.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]
      7. lower-/.f6470.6

        \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]
    11. Applied rewrites70.6%

      \[\leadsto \frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right) \]

    if 1.17999999999999997e277 < r

    1. Initial program 0.8%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in p around -inf

      \[\leadsto \color{blue}{-1 \cdot \left(p \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)\right)} \]
    4. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto -1 \cdot \left(p \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{\color{blue}{2}}\right)\right) \]
      2. associate-*r*N/A

        \[\leadsto \left(-1 \cdot p\right) \cdot \color{blue}{\left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)} \]
      3. mul-1-negN/A

        \[\leadsto \left(\mathsf{neg}\left(p\right)\right) \cdot \left(\color{blue}{\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p}} - \frac{1}{2}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \left(\mathsf{neg}\left(p\right)\right) \cdot \color{blue}{\left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)} \]
      5. lower-neg.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\color{blue}{\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p}} - \frac{1}{2}\right) \]
      6. lower--.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \color{blue}{\frac{1}{2}}\right) \]
    5. Applied rewrites100.0%

      \[\leadsto \color{blue}{\left(-p\right) \cdot \left(\frac{\left|p\right| + \left(\left|r\right| - r\right)}{p} \cdot -0.5 - 0.5\right)} \]
    6. Taylor expanded in r around inf

      \[\leadsto \left(-p\right) \cdot \left(\frac{1}{2} \cdot \color{blue}{\frac{r}{p}}\right) \]
    7. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{1}{2} \cdot \frac{r}{p}\right) \]
      2. *-commutativeN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{\color{blue}{2}}\right) \]
      3. unpow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{1}}{p} \cdot \frac{1}{2}\right) \]
      4. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{\left(\frac{2}{2}\right)}}{p} \cdot \frac{1}{2}\right) \]
      5. sqrt-pow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{{r}^{2}}}{p} \cdot \frac{1}{2}\right) \]
      6. unpow2N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{r \cdot r}}{p} \cdot \frac{1}{2}\right) \]
      7. rem-sqrt-square-revN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\left|r\right|}{p} \cdot \frac{1}{2}\right) \]
      8. lower-*.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\left|r\right|}{p} \cdot \frac{1}{\color{blue}{2}}\right) \]
      9. rem-sqrt-square-revN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{r \cdot r}}{p} \cdot \frac{1}{2}\right) \]
      10. unpow2N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{{r}^{2}}}{p} \cdot \frac{1}{2}\right) \]
      11. sqrt-pow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{\left(\frac{2}{2}\right)}}{p} \cdot \frac{1}{2}\right) \]
      12. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{1}}{p} \cdot \frac{1}{2}\right) \]
      13. unpow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{2}\right) \]
      14. lower-/.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{2}\right) \]
      15. metadata-eval0.8

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot 0.5\right) \]
    8. Applied rewrites0.8%

      \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \color{blue}{0.5}\right) \]
    9. Taylor expanded in p around 0

      \[\leadsto \frac{1}{2} \cdot p + \color{blue}{\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - r\right)} \]
    10. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot p + \frac{1}{2} \cdot \left(\left(\color{blue}{\left|p\right|} + \left|r\right|\right) - r\right) \]
      2. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot p + \frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - r\right) \]
      3. distribute-lft-outN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \color{blue}{\left(\left(\left|p\right| + \left|r\right|\right) - r\right)}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \color{blue}{\left(\left(\left|p\right| + \left|r\right|\right) - r\right)}\right) \]
      5. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\color{blue}{\left(\left|p\right| + \left|r\right|\right)} - r\right)\right) \]
      6. lower-+.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|p\right| + \left|r\right|\right) - \color{blue}{r}\right)\right) \]
      7. associate-+r-N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left|p\right| + \left(\left|r\right| - \color{blue}{r}\right)\right)\right) \]
      8. +-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      9. lower-+.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      10. lower--.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      11. lift-fabs.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      12. lift-fabs.f64100.0

        \[\leadsto 0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
    11. Applied rewrites100.0%

      \[\leadsto 0.5 \cdot \color{blue}{\left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)} \]
  3. Recombined 5 regimes into one program.
  4. Final simplification36.4%

    \[\leadsto \begin{array}{l} \mathbf{if}\;r \leq -9.8 \cdot 10^{-76}:\\ \;\;\;\;\mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right)\\ \mathbf{elif}\;r \leq 1850000:\\ \;\;\;\;-q\\ \mathbf{elif}\;r \leq 3.6 \cdot 10^{+250}:\\ \;\;\;\;0.5 \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) + p, r, -2 \cdot \left(q \cdot q\right)\right)}{r}\\ \mathbf{elif}\;r \leq 1.18 \cdot 10^{+277}:\\ \;\;\;\;\frac{1}{2} \cdot \left(\left(-2 \cdot \left(\frac{q}{r} \cdot \frac{q}{r}\right)\right) \cdot r\right)\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)\\ \end{array} \]
  5. Add Preprocessing

Alternative 6: 56.5% accurate, 3.7× speedup?

\[\begin{array}{l} q_m = \left|q\right| \\ [p, r, q_m] = \mathsf{sort}([p, r, q_m])\\ \\ \begin{array}{l} \mathbf{if}\;r \leq -9.8 \cdot 10^{-76}:\\ \;\;\;\;\mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right)\\ \mathbf{elif}\;r \leq 1850000:\\ \;\;\;\;-q\_m\\ \mathbf{elif}\;r \leq 4.5 \cdot 10^{+285}:\\ \;\;\;\;0.5 \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) + p, r, -2 \cdot \left(q\_m \cdot q\_m\right)\right)}{r}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)\\ \end{array} \end{array} \]
q_m = (fabs.f64 q)
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
(FPCore (p r q_m)
 :precision binary64
 (if (<= r -9.8e-76)
   (fma (+ (+ p (fabs p)) (fabs r)) 0.5 (* -0.5 r))
   (if (<= r 1850000.0)
     (- q_m)
     (if (<= r 4.5e+285)
       (*
        0.5
        (/
         (fma (+ (+ (fma -1.0 r (fabs r)) (fabs p)) p) r (* -2.0 (* q_m q_m)))
         r))
       (* 0.5 (+ p (+ (- (fabs r) r) (fabs p))))))))
q_m = fabs(q);
assert(p < r && r < q_m);
double code(double p, double r, double q_m) {
	double tmp;
	if (r <= -9.8e-76) {
		tmp = fma(((p + fabs(p)) + fabs(r)), 0.5, (-0.5 * r));
	} else if (r <= 1850000.0) {
		tmp = -q_m;
	} else if (r <= 4.5e+285) {
		tmp = 0.5 * (fma(((fma(-1.0, r, fabs(r)) + fabs(p)) + p), r, (-2.0 * (q_m * q_m))) / r);
	} else {
		tmp = 0.5 * (p + ((fabs(r) - r) + fabs(p)));
	}
	return tmp;
}
q_m = abs(q)
p, r, q_m = sort([p, r, q_m])
function code(p, r, q_m)
	tmp = 0.0
	if (r <= -9.8e-76)
		tmp = fma(Float64(Float64(p + abs(p)) + abs(r)), 0.5, Float64(-0.5 * r));
	elseif (r <= 1850000.0)
		tmp = Float64(-q_m);
	elseif (r <= 4.5e+285)
		tmp = Float64(0.5 * Float64(fma(Float64(Float64(fma(-1.0, r, abs(r)) + abs(p)) + p), r, Float64(-2.0 * Float64(q_m * q_m))) / r));
	else
		tmp = Float64(0.5 * Float64(p + Float64(Float64(abs(r) - r) + abs(p))));
	end
	return tmp
end
q_m = N[Abs[q], $MachinePrecision]
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
code[p_, r_, q$95$m_] := If[LessEqual[r, -9.8e-76], N[(N[(N[(p + N[Abs[p], $MachinePrecision]), $MachinePrecision] + N[Abs[r], $MachinePrecision]), $MachinePrecision] * 0.5 + N[(-0.5 * r), $MachinePrecision]), $MachinePrecision], If[LessEqual[r, 1850000.0], (-q$95$m), If[LessEqual[r, 4.5e+285], N[(0.5 * N[(N[(N[(N[(N[(-1.0 * r + N[Abs[r], $MachinePrecision]), $MachinePrecision] + N[Abs[p], $MachinePrecision]), $MachinePrecision] + p), $MachinePrecision] * r + N[(-2.0 * N[(q$95$m * q$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / r), $MachinePrecision]), $MachinePrecision], N[(0.5 * N[(p + N[(N[(N[Abs[r], $MachinePrecision] - r), $MachinePrecision] + N[Abs[p], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
q_m = \left|q\right|
\\
[p, r, q_m] = \mathsf{sort}([p, r, q_m])\\
\\
\begin{array}{l}
\mathbf{if}\;r \leq -9.8 \cdot 10^{-76}:\\
\;\;\;\;\mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right)\\

\mathbf{elif}\;r \leq 1850000:\\
\;\;\;\;-q\_m\\

\mathbf{elif}\;r \leq 4.5 \cdot 10^{+285}:\\
\;\;\;\;0.5 \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) + p, r, -2 \cdot \left(q\_m \cdot q\_m\right)\right)}{r}\\

\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)\\


\end{array}
\end{array}
Derivation
  1. Split input into 4 regimes
  2. if r < -9.79999999999999944e-76

    1. Initial program 15.7%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in r around inf

      \[\leadsto \color{blue}{r \cdot \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right)} \]
    4. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto r \cdot \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right) \]
      2. metadata-evalN/A

        \[\leadsto r \cdot \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{\color{blue}{2}}\right) \]
      3. *-commutativeN/A

        \[\leadsto \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right) \cdot \color{blue}{r} \]
      4. lower-*.f64N/A

        \[\leadsto \left(\frac{1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - -1 \cdot p}{r} - \frac{1}{2}\right) \cdot \color{blue}{r} \]
    5. Applied rewrites5.0%

      \[\leadsto \color{blue}{\left(\frac{\left(\left|r\right| + \left|p\right|\right) - \left(-p\right)}{r} \cdot 0.5 - 0.5\right) \cdot r} \]
    6. Taylor expanded in r around 0

      \[\leadsto \frac{-1}{2} \cdot r + \color{blue}{\frac{1}{2} \cdot \left(p + \left(\left|p\right| + \left|r\right|\right)\right)} \]
    7. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{-1}{2} \cdot r + \frac{1}{2} \cdot \left(p + \left(\color{blue}{\left|p\right|} + \left|r\right|\right)\right) \]
      2. +-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left|p\right| + \left|r\right|\right)\right) + \frac{-1}{2} \cdot \color{blue}{r} \]
      3. *-commutativeN/A

        \[\leadsto \left(p + \left(\left|p\right| + \left|r\right|\right)\right) \cdot \frac{1}{2} + \frac{-1}{2} \cdot r \]
      4. lower-fma.f64N/A

        \[\leadsto \mathsf{fma}\left(p + \left(\left|p\right| + \left|r\right|\right), \frac{1}{\color{blue}{2}}, \frac{-1}{2} \cdot r\right) \]
      5. associate-+r+N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      6. lower-+.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      7. lower-+.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      8. lift-fabs.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      9. lift-fabs.f64N/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      10. metadata-evalN/A

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \frac{1}{2}, \frac{-1}{2} \cdot r\right) \]
      11. lower-*.f6411.6

        \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right) \]
    8. Applied rewrites11.6%

      \[\leadsto \mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, \color{blue}{0.5}, -0.5 \cdot r\right) \]

    if -9.79999999999999944e-76 < r < 1.85e6

    1. Initial program 43.0%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in q around inf

      \[\leadsto \color{blue}{-1 \cdot q} \]
    4. Step-by-step derivation
      1. mul-1-negN/A

        \[\leadsto \mathsf{neg}\left(q\right) \]
      2. lower-neg.f6430.2

        \[\leadsto -q \]
    5. Applied rewrites30.2%

      \[\leadsto \color{blue}{-q} \]

    if 1.85e6 < r < 4.5e285

    1. Initial program 12.2%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in r around inf

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(r \cdot \left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right)\right)} \]
    4. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
      2. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(\left(\left(-2 \cdot \frac{{q}^{2}}{{r}^{2}} + \left(\frac{\left|p\right|}{r} + \frac{\left|r\right|}{r}\right)\right) - \left(1 + -1 \cdot \frac{p}{r}\right)\right) \cdot \color{blue}{r}\right) \]
    5. Applied rewrites25.8%

      \[\leadsto \frac{1}{2} \cdot \color{blue}{\left(\mathsf{fma}\left(\frac{q \cdot q}{r \cdot r}, -2, \frac{\left|r\right| + \left|p\right|}{r} - \mathsf{fma}\left(\frac{p}{r}, -1, 1\right)\right) \cdot r\right)} \]
    6. Taylor expanded in r around 0

      \[\leadsto \frac{1}{2} \cdot \frac{-2 \cdot {q}^{2} + r \cdot \left(\left(\left|p\right| + \left(\left|r\right| + -1 \cdot r\right)\right) - -1 \cdot p\right)}{\color{blue}{r}} \]
    7. Step-by-step derivation
      1. lower-/.f64N/A

        \[\leadsto \frac{1}{2} \cdot \frac{-2 \cdot {q}^{2} + r \cdot \left(\left(\left|p\right| + \left(\left|r\right| + -1 \cdot r\right)\right) - -1 \cdot p\right)}{r} \]
    8. Applied rewrites63.3%

      \[\leadsto \frac{1}{2} \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{\color{blue}{r}} \]
    9. Step-by-step derivation
      1. lift-/.f64N/A

        \[\leadsto \color{blue}{\frac{1}{2}} \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{r} \]
      2. metadata-eval63.3

        \[\leadsto \color{blue}{0.5} \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{r} \]
    10. Applied rewrites63.3%

      \[\leadsto \color{blue}{0.5 \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) - \left(-p\right), r, -2 \cdot \left(q \cdot q\right)\right)}{r}} \]

    if 4.5e285 < r

    1. Initial program 0.7%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in p around -inf

      \[\leadsto \color{blue}{-1 \cdot \left(p \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)\right)} \]
    4. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto -1 \cdot \left(p \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{\color{blue}{2}}\right)\right) \]
      2. associate-*r*N/A

        \[\leadsto \left(-1 \cdot p\right) \cdot \color{blue}{\left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)} \]
      3. mul-1-negN/A

        \[\leadsto \left(\mathsf{neg}\left(p\right)\right) \cdot \left(\color{blue}{\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p}} - \frac{1}{2}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \left(\mathsf{neg}\left(p\right)\right) \cdot \color{blue}{\left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)} \]
      5. lower-neg.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\color{blue}{\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p}} - \frac{1}{2}\right) \]
      6. lower--.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \color{blue}{\frac{1}{2}}\right) \]
    5. Applied rewrites100.0%

      \[\leadsto \color{blue}{\left(-p\right) \cdot \left(\frac{\left|p\right| + \left(\left|r\right| - r\right)}{p} \cdot -0.5 - 0.5\right)} \]
    6. Taylor expanded in r around inf

      \[\leadsto \left(-p\right) \cdot \left(\frac{1}{2} \cdot \color{blue}{\frac{r}{p}}\right) \]
    7. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{1}{2} \cdot \frac{r}{p}\right) \]
      2. *-commutativeN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{\color{blue}{2}}\right) \]
      3. unpow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{1}}{p} \cdot \frac{1}{2}\right) \]
      4. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{\left(\frac{2}{2}\right)}}{p} \cdot \frac{1}{2}\right) \]
      5. sqrt-pow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{{r}^{2}}}{p} \cdot \frac{1}{2}\right) \]
      6. unpow2N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{r \cdot r}}{p} \cdot \frac{1}{2}\right) \]
      7. rem-sqrt-square-revN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\left|r\right|}{p} \cdot \frac{1}{2}\right) \]
      8. lower-*.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\left|r\right|}{p} \cdot \frac{1}{\color{blue}{2}}\right) \]
      9. rem-sqrt-square-revN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{r \cdot r}}{p} \cdot \frac{1}{2}\right) \]
      10. unpow2N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{{r}^{2}}}{p} \cdot \frac{1}{2}\right) \]
      11. sqrt-pow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{\left(\frac{2}{2}\right)}}{p} \cdot \frac{1}{2}\right) \]
      12. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{1}}{p} \cdot \frac{1}{2}\right) \]
      13. unpow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{2}\right) \]
      14. lower-/.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{2}\right) \]
      15. metadata-eval0.7

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot 0.5\right) \]
    8. Applied rewrites0.7%

      \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \color{blue}{0.5}\right) \]
    9. Taylor expanded in p around 0

      \[\leadsto \frac{1}{2} \cdot p + \color{blue}{\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - r\right)} \]
    10. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot p + \frac{1}{2} \cdot \left(\left(\color{blue}{\left|p\right|} + \left|r\right|\right) - r\right) \]
      2. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot p + \frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - r\right) \]
      3. distribute-lft-outN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \color{blue}{\left(\left(\left|p\right| + \left|r\right|\right) - r\right)}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \color{blue}{\left(\left(\left|p\right| + \left|r\right|\right) - r\right)}\right) \]
      5. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\color{blue}{\left(\left|p\right| + \left|r\right|\right)} - r\right)\right) \]
      6. lower-+.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|p\right| + \left|r\right|\right) - \color{blue}{r}\right)\right) \]
      7. associate-+r-N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left|p\right| + \left(\left|r\right| - \color{blue}{r}\right)\right)\right) \]
      8. +-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      9. lower-+.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      10. lower--.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      11. lift-fabs.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      12. lift-fabs.f64100.0

        \[\leadsto 0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
    11. Applied rewrites100.0%

      \[\leadsto 0.5 \cdot \color{blue}{\left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)} \]
  3. Recombined 4 regimes into one program.
  4. Final simplification34.2%

    \[\leadsto \begin{array}{l} \mathbf{if}\;r \leq -9.8 \cdot 10^{-76}:\\ \;\;\;\;\mathsf{fma}\left(\left(p + \left|p\right|\right) + \left|r\right|, 0.5, -0.5 \cdot r\right)\\ \mathbf{elif}\;r \leq 1850000:\\ \;\;\;\;-q\\ \mathbf{elif}\;r \leq 4.5 \cdot 10^{+285}:\\ \;\;\;\;0.5 \cdot \frac{\mathsf{fma}\left(\left(\mathsf{fma}\left(-1, r, \left|r\right|\right) + \left|p\right|\right) + p, r, -2 \cdot \left(q \cdot q\right)\right)}{r}\\ \mathbf{else}:\\ \;\;\;\;0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)\\ \end{array} \]
  5. Add Preprocessing

Alternative 7: 58.0% accurate, 10.0× speedup?

\[\begin{array}{l} q_m = \left|q\right| \\ [p, r, q_m] = \mathsf{sort}([p, r, q_m])\\ \\ \begin{array}{l} \mathbf{if}\;q\_m \leq 3.6 \cdot 10^{-24}:\\ \;\;\;\;0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)\\ \mathbf{else}:\\ \;\;\;\;-q\_m\\ \end{array} \end{array} \]
q_m = (fabs.f64 q)
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
(FPCore (p r q_m)
 :precision binary64
 (if (<= q_m 3.6e-24) (* 0.5 (+ p (+ (- (fabs r) r) (fabs p)))) (- q_m)))
q_m = fabs(q);
assert(p < r && r < q_m);
double code(double p, double r, double q_m) {
	double tmp;
	if (q_m <= 3.6e-24) {
		tmp = 0.5 * (p + ((fabs(r) - r) + fabs(p)));
	} else {
		tmp = -q_m;
	}
	return tmp;
}
q_m =     private
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
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(p, r, q_m)
use fmin_fmax_functions
    real(8), intent (in) :: p
    real(8), intent (in) :: r
    real(8), intent (in) :: q_m
    real(8) :: tmp
    if (q_m <= 3.6d-24) then
        tmp = 0.5d0 * (p + ((abs(r) - r) + abs(p)))
    else
        tmp = -q_m
    end if
    code = tmp
end function
q_m = Math.abs(q);
assert p < r && r < q_m;
public static double code(double p, double r, double q_m) {
	double tmp;
	if (q_m <= 3.6e-24) {
		tmp = 0.5 * (p + ((Math.abs(r) - r) + Math.abs(p)));
	} else {
		tmp = -q_m;
	}
	return tmp;
}
q_m = math.fabs(q)
[p, r, q_m] = sort([p, r, q_m])
def code(p, r, q_m):
	tmp = 0
	if q_m <= 3.6e-24:
		tmp = 0.5 * (p + ((math.fabs(r) - r) + math.fabs(p)))
	else:
		tmp = -q_m
	return tmp
q_m = abs(q)
p, r, q_m = sort([p, r, q_m])
function code(p, r, q_m)
	tmp = 0.0
	if (q_m <= 3.6e-24)
		tmp = Float64(0.5 * Float64(p + Float64(Float64(abs(r) - r) + abs(p))));
	else
		tmp = Float64(-q_m);
	end
	return tmp
end
q_m = abs(q);
p, r, q_m = num2cell(sort([p, r, q_m])){:}
function tmp_2 = code(p, r, q_m)
	tmp = 0.0;
	if (q_m <= 3.6e-24)
		tmp = 0.5 * (p + ((abs(r) - r) + abs(p)));
	else
		tmp = -q_m;
	end
	tmp_2 = tmp;
end
q_m = N[Abs[q], $MachinePrecision]
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
code[p_, r_, q$95$m_] := If[LessEqual[q$95$m, 3.6e-24], N[(0.5 * N[(p + N[(N[(N[Abs[r], $MachinePrecision] - r), $MachinePrecision] + N[Abs[p], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], (-q$95$m)]
\begin{array}{l}
q_m = \left|q\right|
\\
[p, r, q_m] = \mathsf{sort}([p, r, q_m])\\
\\
\begin{array}{l}
\mathbf{if}\;q\_m \leq 3.6 \cdot 10^{-24}:\\
\;\;\;\;0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)\\

\mathbf{else}:\\
\;\;\;\;-q\_m\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if q < 3.6000000000000001e-24

    1. Initial program 26.1%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in p around -inf

      \[\leadsto \color{blue}{-1 \cdot \left(p \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)\right)} \]
    4. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto -1 \cdot \left(p \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{\color{blue}{2}}\right)\right) \]
      2. associate-*r*N/A

        \[\leadsto \left(-1 \cdot p\right) \cdot \color{blue}{\left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)} \]
      3. mul-1-negN/A

        \[\leadsto \left(\mathsf{neg}\left(p\right)\right) \cdot \left(\color{blue}{\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p}} - \frac{1}{2}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \left(\mathsf{neg}\left(p\right)\right) \cdot \color{blue}{\left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \frac{1}{2}\right)} \]
      5. lower-neg.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\color{blue}{\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p}} - \frac{1}{2}\right) \]
      6. lower--.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{-1}{2} \cdot \frac{\left(\left|p\right| + \left|r\right|\right) - r}{p} - \color{blue}{\frac{1}{2}}\right) \]
    5. Applied rewrites27.8%

      \[\leadsto \color{blue}{\left(-p\right) \cdot \left(\frac{\left|p\right| + \left(\left|r\right| - r\right)}{p} \cdot -0.5 - 0.5\right)} \]
    6. Taylor expanded in r around inf

      \[\leadsto \left(-p\right) \cdot \left(\frac{1}{2} \cdot \color{blue}{\frac{r}{p}}\right) \]
    7. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{1}{2} \cdot \frac{r}{p}\right) \]
      2. *-commutativeN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{\color{blue}{2}}\right) \]
      3. unpow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{1}}{p} \cdot \frac{1}{2}\right) \]
      4. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{\left(\frac{2}{2}\right)}}{p} \cdot \frac{1}{2}\right) \]
      5. sqrt-pow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{{r}^{2}}}{p} \cdot \frac{1}{2}\right) \]
      6. unpow2N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{r \cdot r}}{p} \cdot \frac{1}{2}\right) \]
      7. rem-sqrt-square-revN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\left|r\right|}{p} \cdot \frac{1}{2}\right) \]
      8. lower-*.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\left|r\right|}{p} \cdot \frac{1}{\color{blue}{2}}\right) \]
      9. rem-sqrt-square-revN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{r \cdot r}}{p} \cdot \frac{1}{2}\right) \]
      10. unpow2N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{\sqrt{{r}^{2}}}{p} \cdot \frac{1}{2}\right) \]
      11. sqrt-pow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{\left(\frac{2}{2}\right)}}{p} \cdot \frac{1}{2}\right) \]
      12. metadata-evalN/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{{r}^{1}}{p} \cdot \frac{1}{2}\right) \]
      13. unpow1N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{2}\right) \]
      14. lower-/.f64N/A

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \frac{1}{2}\right) \]
      15. metadata-eval6.7

        \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot 0.5\right) \]
    8. Applied rewrites6.7%

      \[\leadsto \left(-p\right) \cdot \left(\frac{r}{p} \cdot \color{blue}{0.5}\right) \]
    9. Taylor expanded in p around 0

      \[\leadsto \frac{1}{2} \cdot p + \color{blue}{\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - r\right)} \]
    10. Step-by-step derivation
      1. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot p + \frac{1}{2} \cdot \left(\left(\color{blue}{\left|p\right|} + \left|r\right|\right) - r\right) \]
      2. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot p + \frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - r\right) \]
      3. distribute-lft-outN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \color{blue}{\left(\left(\left|p\right| + \left|r\right|\right) - r\right)}\right) \]
      4. lower-*.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \color{blue}{\left(\left(\left|p\right| + \left|r\right|\right) - r\right)}\right) \]
      5. metadata-evalN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\color{blue}{\left(\left|p\right| + \left|r\right|\right)} - r\right)\right) \]
      6. lower-+.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|p\right| + \left|r\right|\right) - \color{blue}{r}\right)\right) \]
      7. associate-+r-N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left|p\right| + \left(\left|r\right| - \color{blue}{r}\right)\right)\right) \]
      8. +-commutativeN/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      9. lower-+.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      10. lower--.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      11. lift-fabs.f64N/A

        \[\leadsto \frac{1}{2} \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
      12. lift-fabs.f6427.9

        \[\leadsto 0.5 \cdot \left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right) \]
    11. Applied rewrites27.9%

      \[\leadsto 0.5 \cdot \color{blue}{\left(p + \left(\left(\left|r\right| - r\right) + \left|p\right|\right)\right)} \]

    if 3.6000000000000001e-24 < q

    1. Initial program 24.5%

      \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
    2. Add Preprocessing
    3. Taylor expanded in q around inf

      \[\leadsto \color{blue}{-1 \cdot q} \]
    4. Step-by-step derivation
      1. mul-1-negN/A

        \[\leadsto \mathsf{neg}\left(q\right) \]
      2. lower-neg.f6452.3

        \[\leadsto -q \]
    5. Applied rewrites52.3%

      \[\leadsto \color{blue}{-q} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 8: 34.8% accurate, 83.3× speedup?

\[\begin{array}{l} q_m = \left|q\right| \\ [p, r, q_m] = \mathsf{sort}([p, r, q_m])\\ \\ -q\_m \end{array} \]
q_m = (fabs.f64 q)
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
(FPCore (p r q_m) :precision binary64 (- q_m))
q_m = fabs(q);
assert(p < r && r < q_m);
double code(double p, double r, double q_m) {
	return -q_m;
}
q_m =     private
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
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(p, r, q_m)
use fmin_fmax_functions
    real(8), intent (in) :: p
    real(8), intent (in) :: r
    real(8), intent (in) :: q_m
    code = -q_m
end function
q_m = Math.abs(q);
assert p < r && r < q_m;
public static double code(double p, double r, double q_m) {
	return -q_m;
}
q_m = math.fabs(q)
[p, r, q_m] = sort([p, r, q_m])
def code(p, r, q_m):
	return -q_m
q_m = abs(q)
p, r, q_m = sort([p, r, q_m])
function code(p, r, q_m)
	return Float64(-q_m)
end
q_m = abs(q);
p, r, q_m = num2cell(sort([p, r, q_m])){:}
function tmp = code(p, r, q_m)
	tmp = -q_m;
end
q_m = N[Abs[q], $MachinePrecision]
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
code[p_, r_, q$95$m_] := (-q$95$m)
\begin{array}{l}
q_m = \left|q\right|
\\
[p, r, q_m] = \mathsf{sort}([p, r, q_m])\\
\\
-q\_m
\end{array}
Derivation
  1. Initial program 25.6%

    \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
  2. Add Preprocessing
  3. Taylor expanded in q around inf

    \[\leadsto \color{blue}{-1 \cdot q} \]
  4. Step-by-step derivation
    1. mul-1-negN/A

      \[\leadsto \mathsf{neg}\left(q\right) \]
    2. lower-neg.f6420.4

      \[\leadsto -q \]
  5. Applied rewrites20.4%

    \[\leadsto \color{blue}{-q} \]
  6. Add Preprocessing

Alternative 9: 3.3% accurate, 250.0× speedup?

\[\begin{array}{l} q_m = \left|q\right| \\ [p, r, q_m] = \mathsf{sort}([p, r, q_m])\\ \\ q\_m \end{array} \]
q_m = (fabs.f64 q)
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
(FPCore (p r q_m) :precision binary64 q_m)
q_m = fabs(q);
assert(p < r && r < q_m);
double code(double p, double r, double q_m) {
	return q_m;
}
q_m =     private
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
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(p, r, q_m)
use fmin_fmax_functions
    real(8), intent (in) :: p
    real(8), intent (in) :: r
    real(8), intent (in) :: q_m
    code = q_m
end function
q_m = Math.abs(q);
assert p < r && r < q_m;
public static double code(double p, double r, double q_m) {
	return q_m;
}
q_m = math.fabs(q)
[p, r, q_m] = sort([p, r, q_m])
def code(p, r, q_m):
	return q_m
q_m = abs(q)
p, r, q_m = sort([p, r, q_m])
function code(p, r, q_m)
	return q_m
end
q_m = abs(q);
p, r, q_m = num2cell(sort([p, r, q_m])){:}
function tmp = code(p, r, q_m)
	tmp = q_m;
end
q_m = N[Abs[q], $MachinePrecision]
NOTE: p, r, and q_m should be sorted in increasing order before calling this function.
code[p_, r_, q$95$m_] := q$95$m
\begin{array}{l}
q_m = \left|q\right|
\\
[p, r, q_m] = \mathsf{sort}([p, r, q_m])\\
\\
q\_m
\end{array}
Derivation
  1. Initial program 25.6%

    \[\frac{1}{2} \cdot \left(\left(\left|p\right| + \left|r\right|\right) - \sqrt{{\left(p - r\right)}^{2} + 4 \cdot {q}^{2}}\right) \]
  2. Add Preprocessing
  3. Taylor expanded in q around -inf

    \[\leadsto \color{blue}{q} \]
  4. Step-by-step derivation
    1. Applied rewrites16.0%

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

    Reproduce

    ?
    herbie shell --seed 2025074 
    (FPCore (p r q)
      :name "1/2(abs(p)+abs(r) - sqrt((p-r)^2 + 4q^2))"
      :precision binary64
      (* (/ 1.0 2.0) (- (+ (fabs p) (fabs r)) (sqrt (+ (pow (- p r) 2.0) (* 4.0 (pow q 2.0)))))))