max(sqrt(gamma * (v_1 / v_0) * R_0 * R_1) - R_0, 0.0) / gamma

Percentage Accurate: 99.6% → 99.6%
Time: 7.4s
Alternatives: 9
Speedup: 1.0×

Specification

?
\[\left(\left(\left(\left(0.9 \leq \gamma \land \gamma \leq 1\right) \land \left(10^{-18} \leq v\_1 \land v\_1 \leq 10\right)\right) \land \left(10^{-18} \leq v\_0 \land v\_0 \leq 10\right)\right) \land \left(10^{-10} \leq R\_0 \land R\_0 \leq 10000000000\right)\right) \land \left(10^{-10} \leq R\_1 \land R\_1 \leq 10000000000\right)\]
\[\begin{array}{l} \\ \frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \end{array} \]
(FPCore (gamma v_1 v_0 R_0 R_1)
 :precision binary64
 (/ (fmax (- (sqrt (* (* (* gamma (/ v_1 v_0)) R_0) R_1)) R_0) 0.0) gamma))
double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
	return fmax((sqrt((((gamma * (v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0) / gamma;
}
real(8) function code(gamma, v_1, v_0, r_0, r_1)
    real(8), intent (in) :: gamma
    real(8), intent (in) :: v_1
    real(8), intent (in) :: v_0
    real(8), intent (in) :: r_0
    real(8), intent (in) :: r_1
    code = merge(0.0d0, merge((sqrt((((gamma * (v_1 / v_0)) * r_0) * r_1)) - r_0), max((sqrt((((gamma * (v_1 / v_0)) * r_0) * r_1)) - r_0), 0.0d0), 0.0d0 /= 0.0d0), (sqrt((((gamma * (v_1 / v_0)) * r_0) * r_1)) - r_0) /= (sqrt((((gamma * (v_1 / v_0)) * r_0) * r_1)) - r_0)) / gamma
end function
public static double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
	return fmax((Math.sqrt((((gamma * (v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0) / gamma;
}
def code(gamma, v_1, v_0, R_0, R_1):
	return fmax((math.sqrt((((gamma * (v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0) / gamma
function code(gamma, v_1, v_0, R_0, R_1)
	return Float64(((Float64(sqrt(Float64(Float64(Float64(gamma * Float64(v_1 / v_0)) * R_0) * R_1)) - R_0) != Float64(sqrt(Float64(Float64(Float64(gamma * Float64(v_1 / v_0)) * R_0) * R_1)) - R_0)) ? 0.0 : ((0.0 != 0.0) ? Float64(sqrt(Float64(Float64(Float64(gamma * Float64(v_1 / v_0)) * R_0) * R_1)) - R_0) : max(Float64(sqrt(Float64(Float64(Float64(gamma * Float64(v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0))) / gamma)
end
function tmp = code(gamma, v_1, v_0, R_0, R_1)
	tmp = max((sqrt((((gamma * (v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0) / gamma;
end
code[gamma_, v$95$1_, v$95$0_, R$95$0_, R$95$1_] := N[(N[Max[N[(N[Sqrt[N[(N[(N[(gamma * N[(v$95$1 / v$95$0), $MachinePrecision]), $MachinePrecision] * R$95$0), $MachinePrecision] * R$95$1), $MachinePrecision]], $MachinePrecision] - R$95$0), $MachinePrecision], 0.0], $MachinePrecision] / gamma), $MachinePrecision]
\begin{array}{l}

\\
\frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma}
\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: 99.6% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \end{array} \]
(FPCore (gamma v_1 v_0 R_0 R_1)
 :precision binary64
 (/ (fmax (- (sqrt (* (* (* gamma (/ v_1 v_0)) R_0) R_1)) R_0) 0.0) gamma))
double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
	return fmax((sqrt((((gamma * (v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0) / gamma;
}
real(8) function code(gamma, v_1, v_0, r_0, r_1)
    real(8), intent (in) :: gamma
    real(8), intent (in) :: v_1
    real(8), intent (in) :: v_0
    real(8), intent (in) :: r_0
    real(8), intent (in) :: r_1
    code = merge(0.0d0, merge((sqrt((((gamma * (v_1 / v_0)) * r_0) * r_1)) - r_0), max((sqrt((((gamma * (v_1 / v_0)) * r_0) * r_1)) - r_0), 0.0d0), 0.0d0 /= 0.0d0), (sqrt((((gamma * (v_1 / v_0)) * r_0) * r_1)) - r_0) /= (sqrt((((gamma * (v_1 / v_0)) * r_0) * r_1)) - r_0)) / gamma
end function
public static double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
	return fmax((Math.sqrt((((gamma * (v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0) / gamma;
}
def code(gamma, v_1, v_0, R_0, R_1):
	return fmax((math.sqrt((((gamma * (v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0) / gamma
function code(gamma, v_1, v_0, R_0, R_1)
	return Float64(((Float64(sqrt(Float64(Float64(Float64(gamma * Float64(v_1 / v_0)) * R_0) * R_1)) - R_0) != Float64(sqrt(Float64(Float64(Float64(gamma * Float64(v_1 / v_0)) * R_0) * R_1)) - R_0)) ? 0.0 : ((0.0 != 0.0) ? Float64(sqrt(Float64(Float64(Float64(gamma * Float64(v_1 / v_0)) * R_0) * R_1)) - R_0) : max(Float64(sqrt(Float64(Float64(Float64(gamma * Float64(v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0))) / gamma)
end
function tmp = code(gamma, v_1, v_0, R_0, R_1)
	tmp = max((sqrt((((gamma * (v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0) / gamma;
end
code[gamma_, v$95$1_, v$95$0_, R$95$0_, R$95$1_] := N[(N[Max[N[(N[Sqrt[N[(N[(N[(gamma * N[(v$95$1 / v$95$0), $MachinePrecision]), $MachinePrecision] * R$95$0), $MachinePrecision] * R$95$1), $MachinePrecision]], $MachinePrecision] - R$95$0), $MachinePrecision], 0.0], $MachinePrecision] / gamma), $MachinePrecision]
\begin{array}{l}

\\
\frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma}
\end{array}

Alternative 1: 99.6% accurate, 0.9× speedup?

\[\begin{array}{l} \\ \frac{\mathsf{max}\left(\mathsf{fma}\left(\sqrt{\left(\frac{\frac{R\_1}{v\_0}}{R\_0} \cdot \gamma\right) \cdot v\_1}, R\_0, -R\_0\right), 0\right)}{\gamma} \end{array} \]
(FPCore (gamma v_1 v_0 R_0 R_1)
 :precision binary64
 (/
  (fmax (fma (sqrt (* (* (/ (/ R_1 v_0) R_0) gamma) v_1)) R_0 (- R_0)) 0.0)
  gamma))
double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
	return fmax(fma(sqrt(((((R_1 / v_0) / R_0) * gamma) * v_1)), R_0, -R_0), 0.0) / gamma;
}
function code(gamma, v_1, v_0, R_0, R_1)
	return Float64(((fma(sqrt(Float64(Float64(Float64(Float64(R_1 / v_0) / R_0) * gamma) * v_1)), R_0, Float64(-R_0)) != fma(sqrt(Float64(Float64(Float64(Float64(R_1 / v_0) / R_0) * gamma) * v_1)), R_0, Float64(-R_0))) ? 0.0 : ((0.0 != 0.0) ? fma(sqrt(Float64(Float64(Float64(Float64(R_1 / v_0) / R_0) * gamma) * v_1)), R_0, Float64(-R_0)) : max(fma(sqrt(Float64(Float64(Float64(Float64(R_1 / v_0) / R_0) * gamma) * v_1)), R_0, Float64(-R_0)), 0.0))) / gamma)
end
code[gamma_, v$95$1_, v$95$0_, R$95$0_, R$95$1_] := N[(N[Max[N[(N[Sqrt[N[(N[(N[(N[(R$95$1 / v$95$0), $MachinePrecision] / R$95$0), $MachinePrecision] * gamma), $MachinePrecision] * v$95$1), $MachinePrecision]], $MachinePrecision] * R$95$0 + (-R$95$0)), $MachinePrecision], 0.0], $MachinePrecision] / gamma), $MachinePrecision]
\begin{array}{l}

\\
\frac{\mathsf{max}\left(\mathsf{fma}\left(\sqrt{\left(\frac{\frac{R\_1}{v\_0}}{R\_0} \cdot \gamma\right) \cdot v\_1}, R\_0, -R\_0\right), 0\right)}{\gamma}
\end{array}
Derivation
  1. Initial program 99.6%

    \[\frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
  2. Add Preprocessing
  3. Taylor expanded in R_0 around inf

    \[\leadsto \frac{\mathsf{max}\left(\color{blue}{R\_0 \cdot \left(\sqrt{\frac{R\_1 \cdot \left(\gamma \cdot v\_1\right)}{R\_0 \cdot v\_0}} - 1\right)}, 0\right)}{\gamma} \]
  4. Step-by-step derivation
    1. sub-negN/A

      \[\leadsto \frac{\mathsf{max}\left(R\_0 \cdot \color{blue}{\left(\sqrt{\frac{R\_1 \cdot \left(\gamma \cdot v\_1\right)}{R\_0 \cdot v\_0}} + \left(\mathsf{neg}\left(1\right)\right)\right)}, 0\right)}{\gamma} \]
    2. metadata-evalN/A

      \[\leadsto \frac{\mathsf{max}\left(R\_0 \cdot \left(\sqrt{\frac{R\_1 \cdot \left(\gamma \cdot v\_1\right)}{R\_0 \cdot v\_0}} + \color{blue}{-1}\right), 0\right)}{\gamma} \]
    3. distribute-rgt-inN/A

      \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\sqrt{\frac{R\_1 \cdot \left(\gamma \cdot v\_1\right)}{R\_0 \cdot v\_0}} \cdot R\_0 + -1 \cdot R\_0}, 0\right)}{\gamma} \]
    4. lower-fma.f64N/A

      \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\mathsf{fma}\left(\sqrt{\frac{R\_1 \cdot \left(\gamma \cdot v\_1\right)}{R\_0 \cdot v\_0}}, R\_0, -1 \cdot R\_0\right)}, 0\right)}{\gamma} \]
  5. Applied rewrites99.7%

    \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\mathsf{fma}\left(\sqrt{\left(\frac{\frac{R\_1}{v\_0}}{R\_0} \cdot \gamma\right) \cdot v\_1}, R\_0, -R\_0\right)}, 0\right)}{\gamma} \]
  6. Add Preprocessing

Alternative 2: 70.7% accurate, 0.5× speedup?

\[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \leq 0:\\ \;\;\;\;\frac{\mathsf{max}\left(-\sqrt{\frac{\left(\left(v\_1 \cdot \gamma\right) \cdot R\_1\right) \cdot R\_0}{v\_0}}, 0\right)}{\gamma}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{max}\left(\sqrt{\left(v\_1 \cdot \left(\frac{\gamma}{v\_0} \cdot R\_1\right)\right) \cdot R\_0}, 0\right)}{\gamma}\\ \end{array} \end{array} \]
(FPCore (gamma v_1 v_0 R_0 R_1)
 :precision binary64
 (if (<=
      (/ (fmax (- (sqrt (* (* (* gamma (/ v_1 v_0)) R_0) R_1)) R_0) 0.0) gamma)
      0.0)
   (/ (fmax (- (sqrt (/ (* (* (* v_1 gamma) R_1) R_0) v_0))) 0.0) gamma)
   (/ (fmax (sqrt (* (* v_1 (* (/ gamma v_0) R_1)) R_0)) 0.0) gamma)))
double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
	double tmp;
	if ((fmax((sqrt((((gamma * (v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0) / gamma) <= 0.0) {
		tmp = fmax(-sqrt(((((v_1 * gamma) * R_1) * R_0) / v_0)), 0.0) / gamma;
	} else {
		tmp = fmax(sqrt(((v_1 * ((gamma / v_0) * R_1)) * R_0)), 0.0) / gamma;
	}
	return tmp;
}
real(8) function code(gamma, v_1, v_0, r_0, r_1)
    real(8), intent (in) :: gamma
    real(8), intent (in) :: v_1
    real(8), intent (in) :: v_0
    real(8), intent (in) :: r_0
    real(8), intent (in) :: r_1
    real(8) :: tmp
    if ((merge(0.0d0, merge((sqrt((((gamma * (v_1 / v_0)) * r_0) * r_1)) - r_0), max((sqrt((((gamma * (v_1 / v_0)) * r_0) * r_1)) - r_0), 0.0d0), 0.0d0 /= 0.0d0), (sqrt((((gamma * (v_1 / v_0)) * r_0) * r_1)) - r_0) /= (sqrt((((gamma * (v_1 / v_0)) * r_0) * r_1)) - r_0)) / gamma) <= 0.0d0) then
        tmp = merge(0.0d0, merge(-sqrt(((((v_1 * gamma) * r_1) * r_0) / v_0)), max(-sqrt(((((v_1 * gamma) * r_1) * r_0) / v_0)), 0.0d0), 0.0d0 /= 0.0d0), -sqrt(((((v_1 * gamma) * r_1) * r_0) / v_0)) /= -sqrt(((((v_1 * gamma) * r_1) * r_0) / v_0))) / gamma
    else
        tmp = merge(0.0d0, merge(sqrt(((v_1 * ((gamma / v_0) * r_1)) * r_0)), max(sqrt(((v_1 * ((gamma / v_0) * r_1)) * r_0)), 0.0d0), 0.0d0 /= 0.0d0), sqrt(((v_1 * ((gamma / v_0) * r_1)) * r_0)) /= sqrt(((v_1 * ((gamma / v_0) * r_1)) * r_0))) / gamma
    end if
    code = tmp
end function
public static double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
	double tmp;
	if ((fmax((Math.sqrt((((gamma * (v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0) / gamma) <= 0.0) {
		tmp = fmax(-Math.sqrt(((((v_1 * gamma) * R_1) * R_0) / v_0)), 0.0) / gamma;
	} else {
		tmp = fmax(Math.sqrt(((v_1 * ((gamma / v_0) * R_1)) * R_0)), 0.0) / gamma;
	}
	return tmp;
}
def code(gamma, v_1, v_0, R_0, R_1):
	tmp = 0
	if (fmax((math.sqrt((((gamma * (v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0) / gamma) <= 0.0:
		tmp = fmax(-math.sqrt(((((v_1 * gamma) * R_1) * R_0) / v_0)), 0.0) / gamma
	else:
		tmp = fmax(math.sqrt(((v_1 * ((gamma / v_0) * R_1)) * R_0)), 0.0) / gamma
	return tmp
function code(gamma, v_1, v_0, R_0, R_1)
	tmp = 0.0
	if (Float64(((Float64(sqrt(Float64(Float64(Float64(gamma * Float64(v_1 / v_0)) * R_0) * R_1)) - R_0) != Float64(sqrt(Float64(Float64(Float64(gamma * Float64(v_1 / v_0)) * R_0) * R_1)) - R_0)) ? 0.0 : ((0.0 != 0.0) ? Float64(sqrt(Float64(Float64(Float64(gamma * Float64(v_1 / v_0)) * R_0) * R_1)) - R_0) : max(Float64(sqrt(Float64(Float64(Float64(gamma * Float64(v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0))) / gamma) <= 0.0)
		tmp = Float64(((Float64(-sqrt(Float64(Float64(Float64(Float64(v_1 * gamma) * R_1) * R_0) / v_0))) != Float64(-sqrt(Float64(Float64(Float64(Float64(v_1 * gamma) * R_1) * R_0) / v_0)))) ? 0.0 : ((0.0 != 0.0) ? Float64(-sqrt(Float64(Float64(Float64(Float64(v_1 * gamma) * R_1) * R_0) / v_0))) : max(Float64(-sqrt(Float64(Float64(Float64(Float64(v_1 * gamma) * R_1) * R_0) / v_0))), 0.0))) / gamma);
	else
		tmp = Float64(((sqrt(Float64(Float64(v_1 * Float64(Float64(gamma / v_0) * R_1)) * R_0)) != sqrt(Float64(Float64(v_1 * Float64(Float64(gamma / v_0) * R_1)) * R_0))) ? 0.0 : ((0.0 != 0.0) ? sqrt(Float64(Float64(v_1 * Float64(Float64(gamma / v_0) * R_1)) * R_0)) : max(sqrt(Float64(Float64(v_1 * Float64(Float64(gamma / v_0) * R_1)) * R_0)), 0.0))) / gamma);
	end
	return tmp
end
function tmp_2 = code(gamma, v_1, v_0, R_0, R_1)
	tmp = 0.0;
	if ((max((sqrt((((gamma * (v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0) / gamma) <= 0.0)
		tmp = max(-sqrt(((((v_1 * gamma) * R_1) * R_0) / v_0)), 0.0) / gamma;
	else
		tmp = max(sqrt(((v_1 * ((gamma / v_0) * R_1)) * R_0)), 0.0) / gamma;
	end
	tmp_2 = tmp;
end
code[gamma_, v$95$1_, v$95$0_, R$95$0_, R$95$1_] := If[LessEqual[N[(N[Max[N[(N[Sqrt[N[(N[(N[(gamma * N[(v$95$1 / v$95$0), $MachinePrecision]), $MachinePrecision] * R$95$0), $MachinePrecision] * R$95$1), $MachinePrecision]], $MachinePrecision] - R$95$0), $MachinePrecision], 0.0], $MachinePrecision] / gamma), $MachinePrecision], 0.0], N[(N[Max[(-N[Sqrt[N[(N[(N[(N[(v$95$1 * gamma), $MachinePrecision] * R$95$1), $MachinePrecision] * R$95$0), $MachinePrecision] / v$95$0), $MachinePrecision]], $MachinePrecision]), 0.0], $MachinePrecision] / gamma), $MachinePrecision], N[(N[Max[N[Sqrt[N[(N[(v$95$1 * N[(N[(gamma / v$95$0), $MachinePrecision] * R$95$1), $MachinePrecision]), $MachinePrecision] * R$95$0), $MachinePrecision]], $MachinePrecision], 0.0], $MachinePrecision] / gamma), $MachinePrecision]]
\begin{array}{l}

\\
\begin{array}{l}
\mathbf{if}\;\frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \leq 0:\\
\;\;\;\;\frac{\mathsf{max}\left(-\sqrt{\frac{\left(\left(v\_1 \cdot \gamma\right) \cdot R\_1\right) \cdot R\_0}{v\_0}}, 0\right)}{\gamma}\\

\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{max}\left(\sqrt{\left(v\_1 \cdot \left(\frac{\gamma}{v\_0} \cdot R\_1\right)\right) \cdot R\_0}, 0\right)}{\gamma}\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (/.f64 (fmax.f64 (-.f64 (sqrt.f64 (*.f64 (*.f64 (*.f64 gamma (/.f64 v_1 v_0)) R_0) R_1)) R_0) #s(literal 0 binary64)) gamma) < 0.0

    1. Initial program 100.0%

      \[\frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
    2. Add Preprocessing
    3. Taylor expanded in gamma around -inf

      \[\leadsto \frac{\mathsf{max}\left(\color{blue}{-1 \cdot \left(\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}} \cdot {\left(\sqrt{-1}\right)}^{2}\right)}, 0\right)}{\gamma} \]
    4. Step-by-step derivation
      1. mul-1-negN/A

        \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\mathsf{neg}\left(\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}} \cdot {\left(\sqrt{-1}\right)}^{2}\right)}, 0\right)}{\gamma} \]
      2. *-commutativeN/A

        \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{{\left(\sqrt{-1}\right)}^{2} \cdot \sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}\right), 0\right)}{\gamma} \]
      3. unpow2N/A

        \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{\left(\sqrt{-1} \cdot \sqrt{-1}\right)} \cdot \sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}\right), 0\right)}{\gamma} \]
      4. rem-square-sqrtN/A

        \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{-1} \cdot \sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}\right), 0\right)}{\gamma} \]
      5. mul-1-negN/A

        \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}\right)\right)}\right), 0\right)}{\gamma} \]
      6. remove-double-negN/A

        \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}, 0\right)}{\gamma} \]
      7. lower-sqrt.f64N/A

        \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}, 0\right)}{\gamma} \]
      8. lower-/.f64N/A

        \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}, 0\right)}{\gamma} \]
      9. *-commutativeN/A

        \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right) \cdot R\_0}}{v\_0}}, 0\right)}{\gamma} \]
      10. lower-*.f64N/A

        \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right) \cdot R\_0}}{v\_0}}, 0\right)}{\gamma} \]
      11. *-commutativeN/A

        \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(\left(\gamma \cdot v\_1\right) \cdot R\_1\right)} \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
      12. lower-*.f64N/A

        \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(\left(\gamma \cdot v\_1\right) \cdot R\_1\right)} \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
      13. *-commutativeN/A

        \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\left(\color{blue}{\left(v\_1 \cdot \gamma\right)} \cdot R\_1\right) \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
      14. lower-*.f643.1

        \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\left(\color{blue}{\left(v\_1 \cdot \gamma\right)} \cdot R\_1\right) \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
    5. Applied rewrites3.1%

      \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\sqrt{\frac{\left(\left(v\_1 \cdot \gamma\right) \cdot R\_1\right) \cdot R\_0}{v\_0}}}, 0\right)}{\gamma} \]
    6. Taylor expanded in v_0 around -inf

      \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}} \cdot \color{blue}{{\left(\sqrt{-1}\right)}^{2}}, 0\right)}{\gamma} \]
    7. Step-by-step derivation
      1. Applied rewrites100.0%

        \[\leadsto \frac{\mathsf{max}\left(-\sqrt{\frac{\left(\left(v\_1 \cdot \gamma\right) \cdot R\_1\right) \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]

      if 0.0 < (/.f64 (fmax.f64 (-.f64 (sqrt.f64 (*.f64 (*.f64 (*.f64 gamma (/.f64 v_1 v_0)) R_0) R_1)) R_0) #s(literal 0 binary64)) gamma)

      1. Initial program 99.3%

        \[\frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
      2. Add Preprocessing
      3. Taylor expanded in gamma around -inf

        \[\leadsto \frac{\mathsf{max}\left(\color{blue}{-1 \cdot \left(\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}} \cdot {\left(\sqrt{-1}\right)}^{2}\right)}, 0\right)}{\gamma} \]
      4. Step-by-step derivation
        1. mul-1-negN/A

          \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\mathsf{neg}\left(\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}} \cdot {\left(\sqrt{-1}\right)}^{2}\right)}, 0\right)}{\gamma} \]
        2. *-commutativeN/A

          \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{{\left(\sqrt{-1}\right)}^{2} \cdot \sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}\right), 0\right)}{\gamma} \]
        3. unpow2N/A

          \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{\left(\sqrt{-1} \cdot \sqrt{-1}\right)} \cdot \sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}\right), 0\right)}{\gamma} \]
        4. rem-square-sqrtN/A

          \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{-1} \cdot \sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}\right), 0\right)}{\gamma} \]
        5. mul-1-negN/A

          \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}\right)\right)}\right), 0\right)}{\gamma} \]
        6. remove-double-negN/A

          \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}, 0\right)}{\gamma} \]
        7. lower-sqrt.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}, 0\right)}{\gamma} \]
        8. lower-/.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}, 0\right)}{\gamma} \]
        9. *-commutativeN/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right) \cdot R\_0}}{v\_0}}, 0\right)}{\gamma} \]
        10. lower-*.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right) \cdot R\_0}}{v\_0}}, 0\right)}{\gamma} \]
        11. *-commutativeN/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(\left(\gamma \cdot v\_1\right) \cdot R\_1\right)} \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
        12. lower-*.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(\left(\gamma \cdot v\_1\right) \cdot R\_1\right)} \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
        13. *-commutativeN/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\left(\color{blue}{\left(v\_1 \cdot \gamma\right)} \cdot R\_1\right) \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
        14. lower-*.f6440.8

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\left(\color{blue}{\left(v\_1 \cdot \gamma\right)} \cdot R\_1\right) \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
      5. Applied rewrites40.8%

        \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\sqrt{\frac{\left(\left(v\_1 \cdot \gamma\right) \cdot R\_1\right) \cdot R\_0}{v\_0}}}, 0\right)}{\gamma} \]
      6. Step-by-step derivation
        1. Applied rewrites40.8%

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\left(v\_1 \cdot \left(\frac{\gamma}{v\_0} \cdot R\_1\right)\right) \cdot R\_0}, 0\right)}{\gamma} \]
      7. Recombined 2 regimes into one program.
      8. Add Preprocessing

      Alternative 3: 99.6% accurate, 1.0× speedup?

      \[\begin{array}{l} \\ \frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \end{array} \]
      (FPCore (gamma v_1 v_0 R_0 R_1)
       :precision binary64
       (/ (fmax (- (sqrt (* (* (* gamma (/ v_1 v_0)) R_0) R_1)) R_0) 0.0) gamma))
      double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
      	return fmax((sqrt((((gamma * (v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0) / gamma;
      }
      
      real(8) function code(gamma, v_1, v_0, r_0, r_1)
          real(8), intent (in) :: gamma
          real(8), intent (in) :: v_1
          real(8), intent (in) :: v_0
          real(8), intent (in) :: r_0
          real(8), intent (in) :: r_1
          code = merge(0.0d0, merge((sqrt((((gamma * (v_1 / v_0)) * r_0) * r_1)) - r_0), max((sqrt((((gamma * (v_1 / v_0)) * r_0) * r_1)) - r_0), 0.0d0), 0.0d0 /= 0.0d0), (sqrt((((gamma * (v_1 / v_0)) * r_0) * r_1)) - r_0) /= (sqrt((((gamma * (v_1 / v_0)) * r_0) * r_1)) - r_0)) / gamma
      end function
      
      public static double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
      	return fmax((Math.sqrt((((gamma * (v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0) / gamma;
      }
      
      def code(gamma, v_1, v_0, R_0, R_1):
      	return fmax((math.sqrt((((gamma * (v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0) / gamma
      
      function code(gamma, v_1, v_0, R_0, R_1)
      	return Float64(((Float64(sqrt(Float64(Float64(Float64(gamma * Float64(v_1 / v_0)) * R_0) * R_1)) - R_0) != Float64(sqrt(Float64(Float64(Float64(gamma * Float64(v_1 / v_0)) * R_0) * R_1)) - R_0)) ? 0.0 : ((0.0 != 0.0) ? Float64(sqrt(Float64(Float64(Float64(gamma * Float64(v_1 / v_0)) * R_0) * R_1)) - R_0) : max(Float64(sqrt(Float64(Float64(Float64(gamma * Float64(v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0))) / gamma)
      end
      
      function tmp = code(gamma, v_1, v_0, R_0, R_1)
      	tmp = max((sqrt((((gamma * (v_1 / v_0)) * R_0) * R_1)) - R_0), 0.0) / gamma;
      end
      
      code[gamma_, v$95$1_, v$95$0_, R$95$0_, R$95$1_] := N[(N[Max[N[(N[Sqrt[N[(N[(N[(gamma * N[(v$95$1 / v$95$0), $MachinePrecision]), $MachinePrecision] * R$95$0), $MachinePrecision] * R$95$1), $MachinePrecision]], $MachinePrecision] - R$95$0), $MachinePrecision], 0.0], $MachinePrecision] / gamma), $MachinePrecision]
      
      \begin{array}{l}
      
      \\
      \frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma}
      \end{array}
      
      Derivation
      1. Initial program 99.6%

        \[\frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
      2. Add Preprocessing
      3. Add Preprocessing

      Alternative 4: 99.7% accurate, 1.0× speedup?

      \[\begin{array}{l} \\ \frac{\mathsf{max}\left(\sqrt{\left(\left(R\_0 \cdot \frac{v\_1}{v\_0}\right) \cdot \gamma\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \end{array} \]
      (FPCore (gamma v_1 v_0 R_0 R_1)
       :precision binary64
       (/ (fmax (- (sqrt (* (* (* R_0 (/ v_1 v_0)) gamma) R_1)) R_0) 0.0) gamma))
      double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
      	return fmax((sqrt((((R_0 * (v_1 / v_0)) * gamma) * R_1)) - R_0), 0.0) / gamma;
      }
      
      real(8) function code(gamma, v_1, v_0, r_0, r_1)
          real(8), intent (in) :: gamma
          real(8), intent (in) :: v_1
          real(8), intent (in) :: v_0
          real(8), intent (in) :: r_0
          real(8), intent (in) :: r_1
          code = merge(0.0d0, merge((sqrt((((r_0 * (v_1 / v_0)) * gamma) * r_1)) - r_0), max((sqrt((((r_0 * (v_1 / v_0)) * gamma) * r_1)) - r_0), 0.0d0), 0.0d0 /= 0.0d0), (sqrt((((r_0 * (v_1 / v_0)) * gamma) * r_1)) - r_0) /= (sqrt((((r_0 * (v_1 / v_0)) * gamma) * r_1)) - r_0)) / gamma
      end function
      
      public static double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
      	return fmax((Math.sqrt((((R_0 * (v_1 / v_0)) * gamma) * R_1)) - R_0), 0.0) / gamma;
      }
      
      def code(gamma, v_1, v_0, R_0, R_1):
      	return fmax((math.sqrt((((R_0 * (v_1 / v_0)) * gamma) * R_1)) - R_0), 0.0) / gamma
      
      function code(gamma, v_1, v_0, R_0, R_1)
      	return Float64(((Float64(sqrt(Float64(Float64(Float64(R_0 * Float64(v_1 / v_0)) * gamma) * R_1)) - R_0) != Float64(sqrt(Float64(Float64(Float64(R_0 * Float64(v_1 / v_0)) * gamma) * R_1)) - R_0)) ? 0.0 : ((0.0 != 0.0) ? Float64(sqrt(Float64(Float64(Float64(R_0 * Float64(v_1 / v_0)) * gamma) * R_1)) - R_0) : max(Float64(sqrt(Float64(Float64(Float64(R_0 * Float64(v_1 / v_0)) * gamma) * R_1)) - R_0), 0.0))) / gamma)
      end
      
      function tmp = code(gamma, v_1, v_0, R_0, R_1)
      	tmp = max((sqrt((((R_0 * (v_1 / v_0)) * gamma) * R_1)) - R_0), 0.0) / gamma;
      end
      
      code[gamma_, v$95$1_, v$95$0_, R$95$0_, R$95$1_] := N[(N[Max[N[(N[Sqrt[N[(N[(N[(R$95$0 * N[(v$95$1 / v$95$0), $MachinePrecision]), $MachinePrecision] * gamma), $MachinePrecision] * R$95$1), $MachinePrecision]], $MachinePrecision] - R$95$0), $MachinePrecision], 0.0], $MachinePrecision] / gamma), $MachinePrecision]
      
      \begin{array}{l}
      
      \\
      \frac{\mathsf{max}\left(\sqrt{\left(\left(R\_0 \cdot \frac{v\_1}{v\_0}\right) \cdot \gamma\right) \cdot R\_1} - R\_0, 0\right)}{\gamma}
      \end{array}
      
      Derivation
      1. Initial program 99.6%

        \[\frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
      2. Add Preprocessing
      3. Step-by-step derivation
        1. lift-*.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right)} \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
        2. lift-*.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\left(\color{blue}{\left(\gamma \cdot \frac{v\_1}{v\_0}\right)} \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
        3. associate-*l*N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\gamma \cdot \left(\frac{v\_1}{v\_0} \cdot R\_0\right)\right)} \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
        4. *-commutativeN/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\left(\frac{v\_1}{v\_0} \cdot R\_0\right) \cdot \gamma\right)} \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
        5. lower-*.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\left(\frac{v\_1}{v\_0} \cdot R\_0\right) \cdot \gamma\right)} \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
        6. *-commutativeN/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\left(\color{blue}{\left(R\_0 \cdot \frac{v\_1}{v\_0}\right)} \cdot \gamma\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
        7. lower-*.f6499.6

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\left(\color{blue}{\left(R\_0 \cdot \frac{v\_1}{v\_0}\right)} \cdot \gamma\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
      4. Applied rewrites99.6%

        \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\left(R\_0 \cdot \frac{v\_1}{v\_0}\right) \cdot \gamma\right)} \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
      5. Add Preprocessing

      Alternative 5: 99.6% accurate, 1.0× speedup?

      \[\begin{array}{l} \\ \frac{\mathsf{max}\left(\sqrt{\left(\left(R\_0 \cdot \frac{v\_1}{v\_0}\right) \cdot R\_1\right) \cdot \gamma} - R\_0, 0\right)}{\gamma} \end{array} \]
      (FPCore (gamma v_1 v_0 R_0 R_1)
       :precision binary64
       (/ (fmax (- (sqrt (* (* (* R_0 (/ v_1 v_0)) R_1) gamma)) R_0) 0.0) gamma))
      double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
      	return fmax((sqrt((((R_0 * (v_1 / v_0)) * R_1) * gamma)) - R_0), 0.0) / gamma;
      }
      
      real(8) function code(gamma, v_1, v_0, r_0, r_1)
          real(8), intent (in) :: gamma
          real(8), intent (in) :: v_1
          real(8), intent (in) :: v_0
          real(8), intent (in) :: r_0
          real(8), intent (in) :: r_1
          code = merge(0.0d0, merge((sqrt((((r_0 * (v_1 / v_0)) * r_1) * gamma)) - r_0), max((sqrt((((r_0 * (v_1 / v_0)) * r_1) * gamma)) - r_0), 0.0d0), 0.0d0 /= 0.0d0), (sqrt((((r_0 * (v_1 / v_0)) * r_1) * gamma)) - r_0) /= (sqrt((((r_0 * (v_1 / v_0)) * r_1) * gamma)) - r_0)) / gamma
      end function
      
      public static double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
      	return fmax((Math.sqrt((((R_0 * (v_1 / v_0)) * R_1) * gamma)) - R_0), 0.0) / gamma;
      }
      
      def code(gamma, v_1, v_0, R_0, R_1):
      	return fmax((math.sqrt((((R_0 * (v_1 / v_0)) * R_1) * gamma)) - R_0), 0.0) / gamma
      
      function code(gamma, v_1, v_0, R_0, R_1)
      	return Float64(((Float64(sqrt(Float64(Float64(Float64(R_0 * Float64(v_1 / v_0)) * R_1) * gamma)) - R_0) != Float64(sqrt(Float64(Float64(Float64(R_0 * Float64(v_1 / v_0)) * R_1) * gamma)) - R_0)) ? 0.0 : ((0.0 != 0.0) ? Float64(sqrt(Float64(Float64(Float64(R_0 * Float64(v_1 / v_0)) * R_1) * gamma)) - R_0) : max(Float64(sqrt(Float64(Float64(Float64(R_0 * Float64(v_1 / v_0)) * R_1) * gamma)) - R_0), 0.0))) / gamma)
      end
      
      function tmp = code(gamma, v_1, v_0, R_0, R_1)
      	tmp = max((sqrt((((R_0 * (v_1 / v_0)) * R_1) * gamma)) - R_0), 0.0) / gamma;
      end
      
      code[gamma_, v$95$1_, v$95$0_, R$95$0_, R$95$1_] := N[(N[Max[N[(N[Sqrt[N[(N[(N[(R$95$0 * N[(v$95$1 / v$95$0), $MachinePrecision]), $MachinePrecision] * R$95$1), $MachinePrecision] * gamma), $MachinePrecision]], $MachinePrecision] - R$95$0), $MachinePrecision], 0.0], $MachinePrecision] / gamma), $MachinePrecision]
      
      \begin{array}{l}
      
      \\
      \frac{\mathsf{max}\left(\sqrt{\left(\left(R\_0 \cdot \frac{v\_1}{v\_0}\right) \cdot R\_1\right) \cdot \gamma} - R\_0, 0\right)}{\gamma}
      \end{array}
      
      Derivation
      1. Initial program 99.6%

        \[\frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
      2. Add Preprocessing
      3. Step-by-step derivation
        1. lift-*.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1}} - R\_0, 0\right)}{\gamma} \]
        2. lift-*.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right)} \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
        3. associate-*l*N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot \left(R\_0 \cdot R\_1\right)}} - R\_0, 0\right)}{\gamma} \]
        4. lift-*.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\gamma \cdot \frac{v\_1}{v\_0}\right)} \cdot \left(R\_0 \cdot R\_1\right)} - R\_0, 0\right)}{\gamma} \]
        5. associate-*l*N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\gamma \cdot \left(\frac{v\_1}{v\_0} \cdot \left(R\_0 \cdot R\_1\right)\right)}} - R\_0, 0\right)}{\gamma} \]
        6. *-commutativeN/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\frac{v\_1}{v\_0} \cdot \left(R\_0 \cdot R\_1\right)\right) \cdot \gamma}} - R\_0, 0\right)}{\gamma} \]
        7. lower-*.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\frac{v\_1}{v\_0} \cdot \left(R\_0 \cdot R\_1\right)\right) \cdot \gamma}} - R\_0, 0\right)}{\gamma} \]
        8. associate-*r*N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\left(\frac{v\_1}{v\_0} \cdot R\_0\right) \cdot R\_1\right)} \cdot \gamma} - R\_0, 0\right)}{\gamma} \]
        9. lower-*.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\left(\frac{v\_1}{v\_0} \cdot R\_0\right) \cdot R\_1\right)} \cdot \gamma} - R\_0, 0\right)}{\gamma} \]
        10. *-commutativeN/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\left(\color{blue}{\left(R\_0 \cdot \frac{v\_1}{v\_0}\right)} \cdot R\_1\right) \cdot \gamma} - R\_0, 0\right)}{\gamma} \]
        11. lower-*.f6499.6

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\left(\color{blue}{\left(R\_0 \cdot \frac{v\_1}{v\_0}\right)} \cdot R\_1\right) \cdot \gamma} - R\_0, 0\right)}{\gamma} \]
      4. Applied rewrites99.6%

        \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\left(R\_0 \cdot \frac{v\_1}{v\_0}\right) \cdot R\_1\right) \cdot \gamma}} - R\_0, 0\right)}{\gamma} \]
      5. Add Preprocessing

      Alternative 6: 99.6% accurate, 1.0× speedup?

      \[\begin{array}{l} \\ \frac{\mathsf{max}\left(\sqrt{\left(R\_1 \cdot \left(\frac{v\_1}{v\_0} \cdot \gamma\right)\right) \cdot R\_0} - R\_0, 0\right)}{\gamma} \end{array} \]
      (FPCore (gamma v_1 v_0 R_0 R_1)
       :precision binary64
       (/ (fmax (- (sqrt (* (* R_1 (* (/ v_1 v_0) gamma)) R_0)) R_0) 0.0) gamma))
      double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
      	return fmax((sqrt(((R_1 * ((v_1 / v_0) * gamma)) * R_0)) - R_0), 0.0) / gamma;
      }
      
      real(8) function code(gamma, v_1, v_0, r_0, r_1)
          real(8), intent (in) :: gamma
          real(8), intent (in) :: v_1
          real(8), intent (in) :: v_0
          real(8), intent (in) :: r_0
          real(8), intent (in) :: r_1
          code = merge(0.0d0, merge((sqrt(((r_1 * ((v_1 / v_0) * gamma)) * r_0)) - r_0), max((sqrt(((r_1 * ((v_1 / v_0) * gamma)) * r_0)) - r_0), 0.0d0), 0.0d0 /= 0.0d0), (sqrt(((r_1 * ((v_1 / v_0) * gamma)) * r_0)) - r_0) /= (sqrt(((r_1 * ((v_1 / v_0) * gamma)) * r_0)) - r_0)) / gamma
      end function
      
      public static double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
      	return fmax((Math.sqrt(((R_1 * ((v_1 / v_0) * gamma)) * R_0)) - R_0), 0.0) / gamma;
      }
      
      def code(gamma, v_1, v_0, R_0, R_1):
      	return fmax((math.sqrt(((R_1 * ((v_1 / v_0) * gamma)) * R_0)) - R_0), 0.0) / gamma
      
      function code(gamma, v_1, v_0, R_0, R_1)
      	return Float64(((Float64(sqrt(Float64(Float64(R_1 * Float64(Float64(v_1 / v_0) * gamma)) * R_0)) - R_0) != Float64(sqrt(Float64(Float64(R_1 * Float64(Float64(v_1 / v_0) * gamma)) * R_0)) - R_0)) ? 0.0 : ((0.0 != 0.0) ? Float64(sqrt(Float64(Float64(R_1 * Float64(Float64(v_1 / v_0) * gamma)) * R_0)) - R_0) : max(Float64(sqrt(Float64(Float64(R_1 * Float64(Float64(v_1 / v_0) * gamma)) * R_0)) - R_0), 0.0))) / gamma)
      end
      
      function tmp = code(gamma, v_1, v_0, R_0, R_1)
      	tmp = max((sqrt(((R_1 * ((v_1 / v_0) * gamma)) * R_0)) - R_0), 0.0) / gamma;
      end
      
      code[gamma_, v$95$1_, v$95$0_, R$95$0_, R$95$1_] := N[(N[Max[N[(N[Sqrt[N[(N[(R$95$1 * N[(N[(v$95$1 / v$95$0), $MachinePrecision] * gamma), $MachinePrecision]), $MachinePrecision] * R$95$0), $MachinePrecision]], $MachinePrecision] - R$95$0), $MachinePrecision], 0.0], $MachinePrecision] / gamma), $MachinePrecision]
      
      \begin{array}{l}
      
      \\
      \frac{\mathsf{max}\left(\sqrt{\left(R\_1 \cdot \left(\frac{v\_1}{v\_0} \cdot \gamma\right)\right) \cdot R\_0} - R\_0, 0\right)}{\gamma}
      \end{array}
      
      Derivation
      1. Initial program 99.6%

        \[\frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
      2. Add Preprocessing
      3. Step-by-step derivation
        1. lift-*.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1}} - R\_0, 0\right)}{\gamma} \]
        2. lift-*.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right)} \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
        3. associate-*l*N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot \left(R\_0 \cdot R\_1\right)}} - R\_0, 0\right)}{\gamma} \]
        4. *-commutativeN/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot \color{blue}{\left(R\_1 \cdot R\_0\right)}} - R\_0, 0\right)}{\gamma} \]
        5. associate-*r*N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_1\right) \cdot R\_0}} - R\_0, 0\right)}{\gamma} \]
        6. lower-*.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_1\right) \cdot R\_0}} - R\_0, 0\right)}{\gamma} \]
        7. *-commutativeN/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(R\_1 \cdot \left(\gamma \cdot \frac{v\_1}{v\_0}\right)\right)} \cdot R\_0} - R\_0, 0\right)}{\gamma} \]
        8. lower-*.f6499.6

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(R\_1 \cdot \left(\gamma \cdot \frac{v\_1}{v\_0}\right)\right)} \cdot R\_0} - R\_0, 0\right)}{\gamma} \]
        9. lift-*.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\left(R\_1 \cdot \color{blue}{\left(\gamma \cdot \frac{v\_1}{v\_0}\right)}\right) \cdot R\_0} - R\_0, 0\right)}{\gamma} \]
        10. *-commutativeN/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\left(R\_1 \cdot \color{blue}{\left(\frac{v\_1}{v\_0} \cdot \gamma\right)}\right) \cdot R\_0} - R\_0, 0\right)}{\gamma} \]
        11. lower-*.f6499.6

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\left(R\_1 \cdot \color{blue}{\left(\frac{v\_1}{v\_0} \cdot \gamma\right)}\right) \cdot R\_0} - R\_0, 0\right)}{\gamma} \]
      4. Applied rewrites99.6%

        \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\left(R\_1 \cdot \left(\frac{v\_1}{v\_0} \cdot \gamma\right)\right) \cdot R\_0}} - R\_0, 0\right)}{\gamma} \]
      5. Add Preprocessing

      Alternative 7: 22.2% accurate, 1.0× speedup?

      \[\begin{array}{l} \\ \frac{\mathsf{max}\left(\sqrt{\left(v\_1 \cdot \left(\frac{\gamma}{v\_0} \cdot R\_1\right)\right) \cdot R\_0}, 0\right)}{\gamma} \end{array} \]
      (FPCore (gamma v_1 v_0 R_0 R_1)
       :precision binary64
       (/ (fmax (sqrt (* (* v_1 (* (/ gamma v_0) R_1)) R_0)) 0.0) gamma))
      double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
      	return fmax(sqrt(((v_1 * ((gamma / v_0) * R_1)) * R_0)), 0.0) / gamma;
      }
      
      real(8) function code(gamma, v_1, v_0, r_0, r_1)
          real(8), intent (in) :: gamma
          real(8), intent (in) :: v_1
          real(8), intent (in) :: v_0
          real(8), intent (in) :: r_0
          real(8), intent (in) :: r_1
          code = merge(0.0d0, merge(sqrt(((v_1 * ((gamma / v_0) * r_1)) * r_0)), max(sqrt(((v_1 * ((gamma / v_0) * r_1)) * r_0)), 0.0d0), 0.0d0 /= 0.0d0), sqrt(((v_1 * ((gamma / v_0) * r_1)) * r_0)) /= sqrt(((v_1 * ((gamma / v_0) * r_1)) * r_0))) / gamma
      end function
      
      public static double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
      	return fmax(Math.sqrt(((v_1 * ((gamma / v_0) * R_1)) * R_0)), 0.0) / gamma;
      }
      
      def code(gamma, v_1, v_0, R_0, R_1):
      	return fmax(math.sqrt(((v_1 * ((gamma / v_0) * R_1)) * R_0)), 0.0) / gamma
      
      function code(gamma, v_1, v_0, R_0, R_1)
      	return Float64(((sqrt(Float64(Float64(v_1 * Float64(Float64(gamma / v_0) * R_1)) * R_0)) != sqrt(Float64(Float64(v_1 * Float64(Float64(gamma / v_0) * R_1)) * R_0))) ? 0.0 : ((0.0 != 0.0) ? sqrt(Float64(Float64(v_1 * Float64(Float64(gamma / v_0) * R_1)) * R_0)) : max(sqrt(Float64(Float64(v_1 * Float64(Float64(gamma / v_0) * R_1)) * R_0)), 0.0))) / gamma)
      end
      
      function tmp = code(gamma, v_1, v_0, R_0, R_1)
      	tmp = max(sqrt(((v_1 * ((gamma / v_0) * R_1)) * R_0)), 0.0) / gamma;
      end
      
      code[gamma_, v$95$1_, v$95$0_, R$95$0_, R$95$1_] := N[(N[Max[N[Sqrt[N[(N[(v$95$1 * N[(N[(gamma / v$95$0), $MachinePrecision] * R$95$1), $MachinePrecision]), $MachinePrecision] * R$95$0), $MachinePrecision]], $MachinePrecision], 0.0], $MachinePrecision] / gamma), $MachinePrecision]
      
      \begin{array}{l}
      
      \\
      \frac{\mathsf{max}\left(\sqrt{\left(v\_1 \cdot \left(\frac{\gamma}{v\_0} \cdot R\_1\right)\right) \cdot R\_0}, 0\right)}{\gamma}
      \end{array}
      
      Derivation
      1. Initial program 99.6%

        \[\frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
      2. Add Preprocessing
      3. Taylor expanded in gamma around -inf

        \[\leadsto \frac{\mathsf{max}\left(\color{blue}{-1 \cdot \left(\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}} \cdot {\left(\sqrt{-1}\right)}^{2}\right)}, 0\right)}{\gamma} \]
      4. Step-by-step derivation
        1. mul-1-negN/A

          \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\mathsf{neg}\left(\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}} \cdot {\left(\sqrt{-1}\right)}^{2}\right)}, 0\right)}{\gamma} \]
        2. *-commutativeN/A

          \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{{\left(\sqrt{-1}\right)}^{2} \cdot \sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}\right), 0\right)}{\gamma} \]
        3. unpow2N/A

          \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{\left(\sqrt{-1} \cdot \sqrt{-1}\right)} \cdot \sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}\right), 0\right)}{\gamma} \]
        4. rem-square-sqrtN/A

          \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{-1} \cdot \sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}\right), 0\right)}{\gamma} \]
        5. mul-1-negN/A

          \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}\right)\right)}\right), 0\right)}{\gamma} \]
        6. remove-double-negN/A

          \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}, 0\right)}{\gamma} \]
        7. lower-sqrt.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}, 0\right)}{\gamma} \]
        8. lower-/.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}, 0\right)}{\gamma} \]
        9. *-commutativeN/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right) \cdot R\_0}}{v\_0}}, 0\right)}{\gamma} \]
        10. lower-*.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right) \cdot R\_0}}{v\_0}}, 0\right)}{\gamma} \]
        11. *-commutativeN/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(\left(\gamma \cdot v\_1\right) \cdot R\_1\right)} \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
        12. lower-*.f64N/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(\left(\gamma \cdot v\_1\right) \cdot R\_1\right)} \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
        13. *-commutativeN/A

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\left(\color{blue}{\left(v\_1 \cdot \gamma\right)} \cdot R\_1\right) \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
        14. lower-*.f6424.2

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\left(\color{blue}{\left(v\_1 \cdot \gamma\right)} \cdot R\_1\right) \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
      5. Applied rewrites24.2%

        \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\sqrt{\frac{\left(\left(v\_1 \cdot \gamma\right) \cdot R\_1\right) \cdot R\_0}{v\_0}}}, 0\right)}{\gamma} \]
      6. Step-by-step derivation
        1. Applied rewrites24.2%

          \[\leadsto \frac{\mathsf{max}\left(\sqrt{\left(v\_1 \cdot \left(\frac{\gamma}{v\_0} \cdot R\_1\right)\right) \cdot R\_0}, 0\right)}{\gamma} \]
        2. Add Preprocessing

        Alternative 8: 22.2% accurate, 1.0× speedup?

        \[\begin{array}{l} \\ \frac{\mathsf{max}\left(\sqrt{\gamma \cdot \left(\frac{v\_1}{v\_0} \cdot \left(R\_1 \cdot R\_0\right)\right)}, 0\right)}{\gamma} \end{array} \]
        (FPCore (gamma v_1 v_0 R_0 R_1)
         :precision binary64
         (/ (fmax (sqrt (* gamma (* (/ v_1 v_0) (* R_1 R_0)))) 0.0) gamma))
        double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
        	return fmax(sqrt((gamma * ((v_1 / v_0) * (R_1 * R_0)))), 0.0) / gamma;
        }
        
        real(8) function code(gamma, v_1, v_0, r_0, r_1)
            real(8), intent (in) :: gamma
            real(8), intent (in) :: v_1
            real(8), intent (in) :: v_0
            real(8), intent (in) :: r_0
            real(8), intent (in) :: r_1
            code = merge(0.0d0, merge(sqrt((gamma * ((v_1 / v_0) * (r_1 * r_0)))), max(sqrt((gamma * ((v_1 / v_0) * (r_1 * r_0)))), 0.0d0), 0.0d0 /= 0.0d0), sqrt((gamma * ((v_1 / v_0) * (r_1 * r_0)))) /= sqrt((gamma * ((v_1 / v_0) * (r_1 * r_0))))) / gamma
        end function
        
        public static double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
        	return fmax(Math.sqrt((gamma * ((v_1 / v_0) * (R_1 * R_0)))), 0.0) / gamma;
        }
        
        def code(gamma, v_1, v_0, R_0, R_1):
        	return fmax(math.sqrt((gamma * ((v_1 / v_0) * (R_1 * R_0)))), 0.0) / gamma
        
        function code(gamma, v_1, v_0, R_0, R_1)
        	return Float64(((sqrt(Float64(gamma * Float64(Float64(v_1 / v_0) * Float64(R_1 * R_0)))) != sqrt(Float64(gamma * Float64(Float64(v_1 / v_0) * Float64(R_1 * R_0))))) ? 0.0 : ((0.0 != 0.0) ? sqrt(Float64(gamma * Float64(Float64(v_1 / v_0) * Float64(R_1 * R_0)))) : max(sqrt(Float64(gamma * Float64(Float64(v_1 / v_0) * Float64(R_1 * R_0)))), 0.0))) / gamma)
        end
        
        function tmp = code(gamma, v_1, v_0, R_0, R_1)
        	tmp = max(sqrt((gamma * ((v_1 / v_0) * (R_1 * R_0)))), 0.0) / gamma;
        end
        
        code[gamma_, v$95$1_, v$95$0_, R$95$0_, R$95$1_] := N[(N[Max[N[Sqrt[N[(gamma * N[(N[(v$95$1 / v$95$0), $MachinePrecision] * N[(R$95$1 * R$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], 0.0], $MachinePrecision] / gamma), $MachinePrecision]
        
        \begin{array}{l}
        
        \\
        \frac{\mathsf{max}\left(\sqrt{\gamma \cdot \left(\frac{v\_1}{v\_0} \cdot \left(R\_1 \cdot R\_0\right)\right)}, 0\right)}{\gamma}
        \end{array}
        
        Derivation
        1. Initial program 99.6%

          \[\frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
        2. Add Preprocessing
        3. Taylor expanded in gamma around -inf

          \[\leadsto \frac{\mathsf{max}\left(\color{blue}{-1 \cdot \left(\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}} \cdot {\left(\sqrt{-1}\right)}^{2}\right)}, 0\right)}{\gamma} \]
        4. Step-by-step derivation
          1. mul-1-negN/A

            \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\mathsf{neg}\left(\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}} \cdot {\left(\sqrt{-1}\right)}^{2}\right)}, 0\right)}{\gamma} \]
          2. *-commutativeN/A

            \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{{\left(\sqrt{-1}\right)}^{2} \cdot \sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}\right), 0\right)}{\gamma} \]
          3. unpow2N/A

            \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{\left(\sqrt{-1} \cdot \sqrt{-1}\right)} \cdot \sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}\right), 0\right)}{\gamma} \]
          4. rem-square-sqrtN/A

            \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{-1} \cdot \sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}\right), 0\right)}{\gamma} \]
          5. mul-1-negN/A

            \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}\right)\right)}\right), 0\right)}{\gamma} \]
          6. remove-double-negN/A

            \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}, 0\right)}{\gamma} \]
          7. lower-sqrt.f64N/A

            \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}, 0\right)}{\gamma} \]
          8. lower-/.f64N/A

            \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}, 0\right)}{\gamma} \]
          9. *-commutativeN/A

            \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right) \cdot R\_0}}{v\_0}}, 0\right)}{\gamma} \]
          10. lower-*.f64N/A

            \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right) \cdot R\_0}}{v\_0}}, 0\right)}{\gamma} \]
          11. *-commutativeN/A

            \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(\left(\gamma \cdot v\_1\right) \cdot R\_1\right)} \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
          12. lower-*.f64N/A

            \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(\left(\gamma \cdot v\_1\right) \cdot R\_1\right)} \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
          13. *-commutativeN/A

            \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\left(\color{blue}{\left(v\_1 \cdot \gamma\right)} \cdot R\_1\right) \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
          14. lower-*.f6424.2

            \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\left(\color{blue}{\left(v\_1 \cdot \gamma\right)} \cdot R\_1\right) \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
        5. Applied rewrites24.2%

          \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\sqrt{\frac{\left(\left(v\_1 \cdot \gamma\right) \cdot R\_1\right) \cdot R\_0}{v\_0}}}, 0\right)}{\gamma} \]
        6. Step-by-step derivation
          1. Applied rewrites24.2%

            \[\leadsto \frac{\mathsf{max}\left(\sqrt{\gamma \cdot \left(\frac{v\_1}{v\_0} \cdot \left(R\_1 \cdot R\_0\right)\right)}, 0\right)}{\gamma} \]
          2. Add Preprocessing

          Alternative 9: 22.2% accurate, 1.0× speedup?

          \[\begin{array}{l} \\ \frac{\mathsf{max}\left(\sqrt{R\_0 \cdot \frac{\left(v\_1 \cdot \gamma\right) \cdot R\_1}{v\_0}}, 0\right)}{\gamma} \end{array} \]
          (FPCore (gamma v_1 v_0 R_0 R_1)
           :precision binary64
           (/ (fmax (sqrt (* R_0 (/ (* (* v_1 gamma) R_1) v_0))) 0.0) gamma))
          double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
          	return fmax(sqrt((R_0 * (((v_1 * gamma) * R_1) / v_0))), 0.0) / gamma;
          }
          
          real(8) function code(gamma, v_1, v_0, r_0, r_1)
              real(8), intent (in) :: gamma
              real(8), intent (in) :: v_1
              real(8), intent (in) :: v_0
              real(8), intent (in) :: r_0
              real(8), intent (in) :: r_1
              code = merge(0.0d0, merge(sqrt((r_0 * (((v_1 * gamma) * r_1) / v_0))), max(sqrt((r_0 * (((v_1 * gamma) * r_1) / v_0))), 0.0d0), 0.0d0 /= 0.0d0), sqrt((r_0 * (((v_1 * gamma) * r_1) / v_0))) /= sqrt((r_0 * (((v_1 * gamma) * r_1) / v_0)))) / gamma
          end function
          
          public static double code(double gamma, double v_1, double v_0, double R_0, double R_1) {
          	return fmax(Math.sqrt((R_0 * (((v_1 * gamma) * R_1) / v_0))), 0.0) / gamma;
          }
          
          def code(gamma, v_1, v_0, R_0, R_1):
          	return fmax(math.sqrt((R_0 * (((v_1 * gamma) * R_1) / v_0))), 0.0) / gamma
          
          function code(gamma, v_1, v_0, R_0, R_1)
          	return Float64(((sqrt(Float64(R_0 * Float64(Float64(Float64(v_1 * gamma) * R_1) / v_0))) != sqrt(Float64(R_0 * Float64(Float64(Float64(v_1 * gamma) * R_1) / v_0)))) ? 0.0 : ((0.0 != 0.0) ? sqrt(Float64(R_0 * Float64(Float64(Float64(v_1 * gamma) * R_1) / v_0))) : max(sqrt(Float64(R_0 * Float64(Float64(Float64(v_1 * gamma) * R_1) / v_0))), 0.0))) / gamma)
          end
          
          function tmp = code(gamma, v_1, v_0, R_0, R_1)
          	tmp = max(sqrt((R_0 * (((v_1 * gamma) * R_1) / v_0))), 0.0) / gamma;
          end
          
          code[gamma_, v$95$1_, v$95$0_, R$95$0_, R$95$1_] := N[(N[Max[N[Sqrt[N[(R$95$0 * N[(N[(N[(v$95$1 * gamma), $MachinePrecision] * R$95$1), $MachinePrecision] / v$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], 0.0], $MachinePrecision] / gamma), $MachinePrecision]
          
          \begin{array}{l}
          
          \\
          \frac{\mathsf{max}\left(\sqrt{R\_0 \cdot \frac{\left(v\_1 \cdot \gamma\right) \cdot R\_1}{v\_0}}, 0\right)}{\gamma}
          \end{array}
          
          Derivation
          1. Initial program 99.6%

            \[\frac{\mathsf{max}\left(\sqrt{\left(\left(\gamma \cdot \frac{v\_1}{v\_0}\right) \cdot R\_0\right) \cdot R\_1} - R\_0, 0\right)}{\gamma} \]
          2. Add Preprocessing
          3. Taylor expanded in gamma around -inf

            \[\leadsto \frac{\mathsf{max}\left(\color{blue}{-1 \cdot \left(\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}} \cdot {\left(\sqrt{-1}\right)}^{2}\right)}, 0\right)}{\gamma} \]
          4. Step-by-step derivation
            1. mul-1-negN/A

              \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\mathsf{neg}\left(\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}} \cdot {\left(\sqrt{-1}\right)}^{2}\right)}, 0\right)}{\gamma} \]
            2. *-commutativeN/A

              \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{{\left(\sqrt{-1}\right)}^{2} \cdot \sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}\right), 0\right)}{\gamma} \]
            3. unpow2N/A

              \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{\left(\sqrt{-1} \cdot \sqrt{-1}\right)} \cdot \sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}\right), 0\right)}{\gamma} \]
            4. rem-square-sqrtN/A

              \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{-1} \cdot \sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}\right), 0\right)}{\gamma} \]
            5. mul-1-negN/A

              \[\leadsto \frac{\mathsf{max}\left(\mathsf{neg}\left(\color{blue}{\left(\mathsf{neg}\left(\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}\right)\right)}\right), 0\right)}{\gamma} \]
            6. remove-double-negN/A

              \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}, 0\right)}{\gamma} \]
            7. lower-sqrt.f64N/A

              \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\sqrt{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}, 0\right)}{\gamma} \]
            8. lower-/.f64N/A

              \[\leadsto \frac{\mathsf{max}\left(\sqrt{\color{blue}{\frac{R\_0 \cdot \left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right)}{v\_0}}}, 0\right)}{\gamma} \]
            9. *-commutativeN/A

              \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right) \cdot R\_0}}{v\_0}}, 0\right)}{\gamma} \]
            10. lower-*.f64N/A

              \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(R\_1 \cdot \left(\gamma \cdot v\_1\right)\right) \cdot R\_0}}{v\_0}}, 0\right)}{\gamma} \]
            11. *-commutativeN/A

              \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(\left(\gamma \cdot v\_1\right) \cdot R\_1\right)} \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
            12. lower-*.f64N/A

              \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\color{blue}{\left(\left(\gamma \cdot v\_1\right) \cdot R\_1\right)} \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
            13. *-commutativeN/A

              \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\left(\color{blue}{\left(v\_1 \cdot \gamma\right)} \cdot R\_1\right) \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
            14. lower-*.f6424.2

              \[\leadsto \frac{\mathsf{max}\left(\sqrt{\frac{\left(\color{blue}{\left(v\_1 \cdot \gamma\right)} \cdot R\_1\right) \cdot R\_0}{v\_0}}, 0\right)}{\gamma} \]
          5. Applied rewrites24.2%

            \[\leadsto \frac{\mathsf{max}\left(\color{blue}{\sqrt{\frac{\left(\left(v\_1 \cdot \gamma\right) \cdot R\_1\right) \cdot R\_0}{v\_0}}}, 0\right)}{\gamma} \]
          6. Step-by-step derivation
            1. Applied rewrites24.2%

              \[\leadsto \frac{\mathsf{max}\left(\sqrt{R\_0 \cdot \frac{\left(v\_1 \cdot \gamma\right) \cdot R\_1}{v\_0}}, 0\right)}{\gamma} \]
            2. Add Preprocessing

            Reproduce

            ?
            herbie shell --seed 1 
            (FPCore (gamma v_1 v_0 R_0 R_1)
              :name "max(sqrt(gamma * (v_1 / v_0) * R_0 * R_1) - R_0, 0.0) / gamma"
              :precision binary64
              :pre (and (and (and (and (and (<= 0.9 gamma) (<= gamma 1.0)) (and (<= 1e-18 v_1) (<= v_1 10.0))) (and (<= 1e-18 v_0) (<= v_0 10.0))) (and (<= 1e-10 R_0) (<= R_0 10000000000.0))) (and (<= 1e-10 R_1) (<= R_1 10000000000.0)))
              (/ (fmax (- (sqrt (* (* (* gamma (/ v_1 v_0)) R_0) R_1)) R_0) 0.0) gamma))