rsin B (should all be same)

Percentage Accurate: 75.8% → 99.5%
Time: 12.1s
Alternatives: 13
Speedup: 1.0×

Specification

?
\[\begin{array}{l} \\ r \cdot \frac{\sin b}{\cos \left(a + b\right)} \end{array} \]
(FPCore (r a b) :precision binary64 (* r (/ (sin b) (cos (+ a b)))))
double code(double r, double a, double b) {
	return r * (sin(b) / cos((a + b)));
}
real(8) function code(r, a, b)
    real(8), intent (in) :: r
    real(8), intent (in) :: a
    real(8), intent (in) :: b
    code = r * (sin(b) / cos((a + b)))
end function
public static double code(double r, double a, double b) {
	return r * (Math.sin(b) / Math.cos((a + b)));
}
def code(r, a, b):
	return r * (math.sin(b) / math.cos((a + b)))
function code(r, a, b)
	return Float64(r * Float64(sin(b) / cos(Float64(a + b))))
end
function tmp = code(r, a, b)
	tmp = r * (sin(b) / cos((a + b)));
end
code[r_, a_, b_] := N[(r * N[(N[Sin[b], $MachinePrecision] / N[Cos[N[(a + b), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
r \cdot \frac{\sin b}{\cos \left(a + b\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 13 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: 75.8% accurate, 1.0× speedup?

\[\begin{array}{l} \\ r \cdot \frac{\sin b}{\cos \left(a + b\right)} \end{array} \]
(FPCore (r a b) :precision binary64 (* r (/ (sin b) (cos (+ a b)))))
double code(double r, double a, double b) {
	return r * (sin(b) / cos((a + b)));
}
real(8) function code(r, a, b)
    real(8), intent (in) :: r
    real(8), intent (in) :: a
    real(8), intent (in) :: b
    code = r * (sin(b) / cos((a + b)))
end function
public static double code(double r, double a, double b) {
	return r * (Math.sin(b) / Math.cos((a + b)));
}
def code(r, a, b):
	return r * (math.sin(b) / math.cos((a + b)))
function code(r, a, b)
	return Float64(r * Float64(sin(b) / cos(Float64(a + b))))
end
function tmp = code(r, a, b)
	tmp = r * (sin(b) / cos((a + b)));
end
code[r_, a_, b_] := N[(r * N[(N[Sin[b], $MachinePrecision] / N[Cos[N[(a + b), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
r \cdot \frac{\sin b}{\cos \left(a + b\right)}
\end{array}

Alternative 1: 99.5% accurate, 0.4× speedup?

\[\begin{array}{l} \\ \frac{\sin b}{\mathsf{fma}\left(\sin b, -\sin a, \cos a \cdot \cos b\right)} \cdot r \end{array} \]
(FPCore (r a b)
 :precision binary64
 (* (/ (sin b) (fma (sin b) (- (sin a)) (* (cos a) (cos b)))) r))
double code(double r, double a, double b) {
	return (sin(b) / fma(sin(b), -sin(a), (cos(a) * cos(b)))) * r;
}
function code(r, a, b)
	return Float64(Float64(sin(b) / fma(sin(b), Float64(-sin(a)), Float64(cos(a) * cos(b)))) * r)
end
code[r_, a_, b_] := N[(N[(N[Sin[b], $MachinePrecision] / N[(N[Sin[b], $MachinePrecision] * (-N[Sin[a], $MachinePrecision]) + N[(N[Cos[a], $MachinePrecision] * N[Cos[b], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * r), $MachinePrecision]
\begin{array}{l}

\\
\frac{\sin b}{\mathsf{fma}\left(\sin b, -\sin a, \cos a \cdot \cos b\right)} \cdot r
\end{array}
Derivation
  1. Initial program 76.5%

    \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-cos.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos \left(a + b\right)}} \]
    2. lift-+.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\cos \color{blue}{\left(a + b\right)}} \]
    3. cos-sumN/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos a \cdot \cos b - \sin a \cdot \sin b}} \]
    4. sub-negN/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos a \cdot \cos b + \left(\mathsf{neg}\left(\sin a \cdot \sin b\right)\right)}} \]
    5. +-commutativeN/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\left(\mathsf{neg}\left(\sin a \cdot \sin b\right)\right) + \cos a \cdot \cos b}} \]
    6. lift-sin.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\left(\mathsf{neg}\left(\sin a \cdot \color{blue}{\sin b}\right)\right) + \cos a \cdot \cos b} \]
    7. *-commutativeN/A

      \[\leadsto r \cdot \frac{\sin b}{\left(\mathsf{neg}\left(\color{blue}{\sin b \cdot \sin a}\right)\right) + \cos a \cdot \cos b} \]
    8. distribute-rgt-neg-inN/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\sin b \cdot \left(\mathsf{neg}\left(\sin a\right)\right)} + \cos a \cdot \cos b} \]
    9. lower-fma.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\mathsf{fma}\left(\sin b, \mathsf{neg}\left(\sin a\right), \cos a \cdot \cos b\right)}} \]
    10. lower-neg.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\sin b, \color{blue}{-\sin a}, \cos a \cdot \cos b\right)} \]
    11. lower-sin.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\sin b, -\color{blue}{\sin a}, \cos a \cdot \cos b\right)} \]
    12. *-commutativeN/A

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\sin b, -\sin a, \color{blue}{\cos b \cdot \cos a}\right)} \]
    13. lower-*.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\sin b, -\sin a, \color{blue}{\cos b \cdot \cos a}\right)} \]
    14. lower-cos.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\sin b, -\sin a, \color{blue}{\cos b} \cdot \cos a\right)} \]
    15. lower-cos.f6499.5

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\sin b, -\sin a, \cos b \cdot \color{blue}{\cos a}\right)} \]
  4. Applied rewrites99.5%

    \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\mathsf{fma}\left(\sin b, -\sin a, \cos b \cdot \cos a\right)}} \]
  5. Final simplification99.5%

    \[\leadsto \frac{\sin b}{\mathsf{fma}\left(\sin b, -\sin a, \cos a \cdot \cos b\right)} \cdot r \]
  6. Add Preprocessing

Alternative 2: 99.5% accurate, 0.4× speedup?

\[\begin{array}{l} \\ \frac{\sin b}{\mathsf{fma}\left(\cos b, \cos a, \left(-\sin b\right) \cdot \sin a\right)} \cdot r \end{array} \]
(FPCore (r a b)
 :precision binary64
 (* (/ (sin b) (fma (cos b) (cos a) (* (- (sin b)) (sin a)))) r))
double code(double r, double a, double b) {
	return (sin(b) / fma(cos(b), cos(a), (-sin(b) * sin(a)))) * r;
}
function code(r, a, b)
	return Float64(Float64(sin(b) / fma(cos(b), cos(a), Float64(Float64(-sin(b)) * sin(a)))) * r)
end
code[r_, a_, b_] := N[(N[(N[Sin[b], $MachinePrecision] / N[(N[Cos[b], $MachinePrecision] * N[Cos[a], $MachinePrecision] + N[((-N[Sin[b], $MachinePrecision]) * N[Sin[a], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * r), $MachinePrecision]
\begin{array}{l}

\\
\frac{\sin b}{\mathsf{fma}\left(\cos b, \cos a, \left(-\sin b\right) \cdot \sin a\right)} \cdot r
\end{array}
Derivation
  1. Initial program 76.5%

    \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-cos.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos \left(a + b\right)}} \]
    2. lift-+.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\cos \color{blue}{\left(a + b\right)}} \]
    3. cos-sumN/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos a \cdot \cos b - \sin a \cdot \sin b}} \]
    4. sub-negN/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos a \cdot \cos b + \left(\mathsf{neg}\left(\sin a \cdot \sin b\right)\right)}} \]
    5. *-commutativeN/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos b \cdot \cos a} + \left(\mathsf{neg}\left(\sin a \cdot \sin b\right)\right)} \]
    6. lower-fma.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\mathsf{fma}\left(\cos b, \cos a, \mathsf{neg}\left(\sin a \cdot \sin b\right)\right)}} \]
    7. lower-cos.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\color{blue}{\cos b}, \cos a, \mathsf{neg}\left(\sin a \cdot \sin b\right)\right)} \]
    8. lower-cos.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\cos b, \color{blue}{\cos a}, \mathsf{neg}\left(\sin a \cdot \sin b\right)\right)} \]
    9. lift-sin.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\cos b, \cos a, \mathsf{neg}\left(\sin a \cdot \color{blue}{\sin b}\right)\right)} \]
    10. *-commutativeN/A

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\cos b, \cos a, \mathsf{neg}\left(\color{blue}{\sin b \cdot \sin a}\right)\right)} \]
    11. distribute-lft-neg-inN/A

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\cos b, \cos a, \color{blue}{\left(\mathsf{neg}\left(\sin b\right)\right) \cdot \sin a}\right)} \]
    12. lower-*.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\cos b, \cos a, \color{blue}{\left(\mathsf{neg}\left(\sin b\right)\right) \cdot \sin a}\right)} \]
    13. lower-neg.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\cos b, \cos a, \color{blue}{\left(-\sin b\right)} \cdot \sin a\right)} \]
    14. lower-sin.f6499.5

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\cos b, \cos a, \left(-\sin b\right) \cdot \color{blue}{\sin a}\right)} \]
  4. Applied rewrites99.5%

    \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\mathsf{fma}\left(\cos b, \cos a, \left(-\sin b\right) \cdot \sin a\right)}} \]
  5. Final simplification99.5%

    \[\leadsto \frac{\sin b}{\mathsf{fma}\left(\cos b, \cos a, \left(-\sin b\right) \cdot \sin a\right)} \cdot r \]
  6. Add Preprocessing

Alternative 3: 99.5% accurate, 0.4× speedup?

\[\begin{array}{l} \\ \frac{\sin b}{\cos a \cdot \cos b - \sin a \cdot \sin b} \cdot r \end{array} \]
(FPCore (r a b)
 :precision binary64
 (* (/ (sin b) (- (* (cos a) (cos b)) (* (sin a) (sin b)))) r))
double code(double r, double a, double b) {
	return (sin(b) / ((cos(a) * cos(b)) - (sin(a) * sin(b)))) * r;
}
real(8) function code(r, a, b)
    real(8), intent (in) :: r
    real(8), intent (in) :: a
    real(8), intent (in) :: b
    code = (sin(b) / ((cos(a) * cos(b)) - (sin(a) * sin(b)))) * r
end function
public static double code(double r, double a, double b) {
	return (Math.sin(b) / ((Math.cos(a) * Math.cos(b)) - (Math.sin(a) * Math.sin(b)))) * r;
}
def code(r, a, b):
	return (math.sin(b) / ((math.cos(a) * math.cos(b)) - (math.sin(a) * math.sin(b)))) * r
function code(r, a, b)
	return Float64(Float64(sin(b) / Float64(Float64(cos(a) * cos(b)) - Float64(sin(a) * sin(b)))) * r)
end
function tmp = code(r, a, b)
	tmp = (sin(b) / ((cos(a) * cos(b)) - (sin(a) * sin(b)))) * r;
end
code[r_, a_, b_] := N[(N[(N[Sin[b], $MachinePrecision] / N[(N[(N[Cos[a], $MachinePrecision] * N[Cos[b], $MachinePrecision]), $MachinePrecision] - N[(N[Sin[a], $MachinePrecision] * N[Sin[b], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * r), $MachinePrecision]
\begin{array}{l}

\\
\frac{\sin b}{\cos a \cdot \cos b - \sin a \cdot \sin b} \cdot r
\end{array}
Derivation
  1. Initial program 76.5%

    \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-cos.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos \left(a + b\right)}} \]
    2. lift-+.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\cos \color{blue}{\left(a + b\right)}} \]
    3. cos-sumN/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos a \cdot \cos b - \sin a \cdot \sin b}} \]
    4. lower--.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos a \cdot \cos b - \sin a \cdot \sin b}} \]
    5. *-commutativeN/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos b \cdot \cos a} - \sin a \cdot \sin b} \]
    6. lower-*.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos b \cdot \cos a} - \sin a \cdot \sin b} \]
    7. lower-cos.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos b} \cdot \cos a - \sin a \cdot \sin b} \]
    8. lower-cos.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\cos b \cdot \color{blue}{\cos a} - \sin a \cdot \sin b} \]
    9. lift-sin.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\cos b \cdot \cos a - \sin a \cdot \color{blue}{\sin b}} \]
    10. lower-*.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\cos b \cdot \cos a - \color{blue}{\sin a \cdot \sin b}} \]
    11. lower-sin.f6499.4

      \[\leadsto r \cdot \frac{\sin b}{\cos b \cdot \cos a - \color{blue}{\sin a} \cdot \sin b} \]
  4. Applied rewrites99.4%

    \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos b \cdot \cos a - \sin a \cdot \sin b}} \]
  5. Final simplification99.4%

    \[\leadsto \frac{\sin b}{\cos a \cdot \cos b - \sin a \cdot \sin b} \cdot r \]
  6. Add Preprocessing

Alternative 4: 99.5% accurate, 0.4× speedup?

\[\begin{array}{l} \\ \frac{\sin b \cdot r}{\mathsf{fma}\left(\cos a, \cos b, \left(-\sin b\right) \cdot \sin a\right)} \end{array} \]
(FPCore (r a b)
 :precision binary64
 (/ (* (sin b) r) (fma (cos a) (cos b) (* (- (sin b)) (sin a)))))
double code(double r, double a, double b) {
	return (sin(b) * r) / fma(cos(a), cos(b), (-sin(b) * sin(a)));
}
function code(r, a, b)
	return Float64(Float64(sin(b) * r) / fma(cos(a), cos(b), Float64(Float64(-sin(b)) * sin(a))))
end
code[r_, a_, b_] := N[(N[(N[Sin[b], $MachinePrecision] * r), $MachinePrecision] / N[(N[Cos[a], $MachinePrecision] * N[Cos[b], $MachinePrecision] + N[((-N[Sin[b], $MachinePrecision]) * N[Sin[a], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\frac{\sin b \cdot r}{\mathsf{fma}\left(\cos a, \cos b, \left(-\sin b\right) \cdot \sin a\right)}
\end{array}
Derivation
  1. Initial program 76.5%

    \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-cos.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos \left(a + b\right)}} \]
    2. lift-+.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\cos \color{blue}{\left(a + b\right)}} \]
    3. cos-sumN/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos a \cdot \cos b - \sin a \cdot \sin b}} \]
    4. sub-negN/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos a \cdot \cos b + \left(\mathsf{neg}\left(\sin a \cdot \sin b\right)\right)}} \]
    5. +-commutativeN/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\left(\mathsf{neg}\left(\sin a \cdot \sin b\right)\right) + \cos a \cdot \cos b}} \]
    6. lift-sin.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\left(\mathsf{neg}\left(\sin a \cdot \color{blue}{\sin b}\right)\right) + \cos a \cdot \cos b} \]
    7. *-commutativeN/A

      \[\leadsto r \cdot \frac{\sin b}{\left(\mathsf{neg}\left(\color{blue}{\sin b \cdot \sin a}\right)\right) + \cos a \cdot \cos b} \]
    8. distribute-rgt-neg-inN/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\sin b \cdot \left(\mathsf{neg}\left(\sin a\right)\right)} + \cos a \cdot \cos b} \]
    9. lower-fma.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\mathsf{fma}\left(\sin b, \mathsf{neg}\left(\sin a\right), \cos a \cdot \cos b\right)}} \]
    10. lower-neg.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\sin b, \color{blue}{-\sin a}, \cos a \cdot \cos b\right)} \]
    11. lower-sin.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\sin b, -\color{blue}{\sin a}, \cos a \cdot \cos b\right)} \]
    12. *-commutativeN/A

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\sin b, -\sin a, \color{blue}{\cos b \cdot \cos a}\right)} \]
    13. lower-*.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\sin b, -\sin a, \color{blue}{\cos b \cdot \cos a}\right)} \]
    14. lower-cos.f64N/A

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\sin b, -\sin a, \color{blue}{\cos b} \cdot \cos a\right)} \]
    15. lower-cos.f6499.5

      \[\leadsto r \cdot \frac{\sin b}{\mathsf{fma}\left(\sin b, -\sin a, \cos b \cdot \color{blue}{\cos a}\right)} \]
  4. Applied rewrites99.5%

    \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\mathsf{fma}\left(\sin b, -\sin a, \cos b \cdot \cos a\right)}} \]
  5. Taylor expanded in a around inf

    \[\leadsto \color{blue}{\frac{r \cdot \sin b}{-1 \cdot \left(\sin a \cdot \sin b\right) + \cos a \cdot \cos b}} \]
  6. Step-by-step derivation
    1. lower-/.f64N/A

      \[\leadsto \color{blue}{\frac{r \cdot \sin b}{-1 \cdot \left(\sin a \cdot \sin b\right) + \cos a \cdot \cos b}} \]
    2. *-commutativeN/A

      \[\leadsto \frac{\color{blue}{\sin b \cdot r}}{-1 \cdot \left(\sin a \cdot \sin b\right) + \cos a \cdot \cos b} \]
    3. lower-*.f64N/A

      \[\leadsto \frac{\color{blue}{\sin b \cdot r}}{-1 \cdot \left(\sin a \cdot \sin b\right) + \cos a \cdot \cos b} \]
    4. lower-sin.f64N/A

      \[\leadsto \frac{\color{blue}{\sin b} \cdot r}{-1 \cdot \left(\sin a \cdot \sin b\right) + \cos a \cdot \cos b} \]
    5. +-commutativeN/A

      \[\leadsto \frac{\sin b \cdot r}{\color{blue}{\cos a \cdot \cos b + -1 \cdot \left(\sin a \cdot \sin b\right)}} \]
    6. lower-fma.f64N/A

      \[\leadsto \frac{\sin b \cdot r}{\color{blue}{\mathsf{fma}\left(\cos a, \cos b, -1 \cdot \left(\sin a \cdot \sin b\right)\right)}} \]
    7. lower-cos.f64N/A

      \[\leadsto \frac{\sin b \cdot r}{\mathsf{fma}\left(\color{blue}{\cos a}, \cos b, -1 \cdot \left(\sin a \cdot \sin b\right)\right)} \]
    8. lower-cos.f64N/A

      \[\leadsto \frac{\sin b \cdot r}{\mathsf{fma}\left(\cos a, \color{blue}{\cos b}, -1 \cdot \left(\sin a \cdot \sin b\right)\right)} \]
    9. mul-1-negN/A

      \[\leadsto \frac{\sin b \cdot r}{\mathsf{fma}\left(\cos a, \cos b, \color{blue}{\mathsf{neg}\left(\sin a \cdot \sin b\right)}\right)} \]
    10. distribute-rgt-neg-inN/A

      \[\leadsto \frac{\sin b \cdot r}{\mathsf{fma}\left(\cos a, \cos b, \color{blue}{\sin a \cdot \left(\mathsf{neg}\left(\sin b\right)\right)}\right)} \]
    11. mul-1-negN/A

      \[\leadsto \frac{\sin b \cdot r}{\mathsf{fma}\left(\cos a, \cos b, \sin a \cdot \color{blue}{\left(-1 \cdot \sin b\right)}\right)} \]
    12. lower-*.f64N/A

      \[\leadsto \frac{\sin b \cdot r}{\mathsf{fma}\left(\cos a, \cos b, \color{blue}{\sin a \cdot \left(-1 \cdot \sin b\right)}\right)} \]
    13. lower-sin.f64N/A

      \[\leadsto \frac{\sin b \cdot r}{\mathsf{fma}\left(\cos a, \cos b, \color{blue}{\sin a} \cdot \left(-1 \cdot \sin b\right)\right)} \]
    14. mul-1-negN/A

      \[\leadsto \frac{\sin b \cdot r}{\mathsf{fma}\left(\cos a, \cos b, \sin a \cdot \color{blue}{\left(\mathsf{neg}\left(\sin b\right)\right)}\right)} \]
    15. lower-neg.f64N/A

      \[\leadsto \frac{\sin b \cdot r}{\mathsf{fma}\left(\cos a, \cos b, \sin a \cdot \color{blue}{\left(-\sin b\right)}\right)} \]
    16. lower-sin.f6499.4

      \[\leadsto \frac{\sin b \cdot r}{\mathsf{fma}\left(\cos a, \cos b, \sin a \cdot \left(-\color{blue}{\sin b}\right)\right)} \]
  7. Applied rewrites99.4%

    \[\leadsto \color{blue}{\frac{\sin b \cdot r}{\mathsf{fma}\left(\cos a, \cos b, \sin a \cdot \left(-\sin b\right)\right)}} \]
  8. Final simplification99.4%

    \[\leadsto \frac{\sin b \cdot r}{\mathsf{fma}\left(\cos a, \cos b, \left(-\sin b\right) \cdot \sin a\right)} \]
  9. Add Preprocessing

Alternative 5: 75.5% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;b \leq -430:\\ \;\;\;\;\frac{\sin b \cdot r}{\cos b}\\ \mathbf{elif}\;b \leq 0.41:\\ \;\;\;\;\frac{\left(\mathsf{fma}\left(b \cdot b, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sin b}{\cos b} \cdot r\\ \end{array} \end{array} \]
(FPCore (r a b)
 :precision binary64
 (if (<= b -430.0)
   (/ (* (sin b) r) (cos b))
   (if (<= b 0.41)
     (/ (* (* (fma (* b b) -0.16666666666666666 1.0) r) b) (cos (+ a b)))
     (* (/ (sin b) (cos b)) r))))
double code(double r, double a, double b) {
	double tmp;
	if (b <= -430.0) {
		tmp = (sin(b) * r) / cos(b);
	} else if (b <= 0.41) {
		tmp = ((fma((b * b), -0.16666666666666666, 1.0) * r) * b) / cos((a + b));
	} else {
		tmp = (sin(b) / cos(b)) * r;
	}
	return tmp;
}
function code(r, a, b)
	tmp = 0.0
	if (b <= -430.0)
		tmp = Float64(Float64(sin(b) * r) / cos(b));
	elseif (b <= 0.41)
		tmp = Float64(Float64(Float64(fma(Float64(b * b), -0.16666666666666666, 1.0) * r) * b) / cos(Float64(a + b)));
	else
		tmp = Float64(Float64(sin(b) / cos(b)) * r);
	end
	return tmp
end
code[r_, a_, b_] := If[LessEqual[b, -430.0], N[(N[(N[Sin[b], $MachinePrecision] * r), $MachinePrecision] / N[Cos[b], $MachinePrecision]), $MachinePrecision], If[LessEqual[b, 0.41], N[(N[(N[(N[(N[(b * b), $MachinePrecision] * -0.16666666666666666 + 1.0), $MachinePrecision] * r), $MachinePrecision] * b), $MachinePrecision] / N[Cos[N[(a + b), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(N[(N[Sin[b], $MachinePrecision] / N[Cos[b], $MachinePrecision]), $MachinePrecision] * r), $MachinePrecision]]]
\begin{array}{l}

\\
\begin{array}{l}
\mathbf{if}\;b \leq -430:\\
\;\;\;\;\frac{\sin b \cdot r}{\cos b}\\

\mathbf{elif}\;b \leq 0.41:\\
\;\;\;\;\frac{\left(\mathsf{fma}\left(b \cdot b, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)}\\

\mathbf{else}:\\
\;\;\;\;\frac{\sin b}{\cos b} \cdot r\\


\end{array}
\end{array}
Derivation
  1. Split input into 3 regimes
  2. if b < -430

    1. Initial program 51.1%

      \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \color{blue}{r \cdot \frac{\sin b}{\cos \left(a + b\right)}} \]
      2. lift-/.f64N/A

        \[\leadsto r \cdot \color{blue}{\frac{\sin b}{\cos \left(a + b\right)}} \]
      3. associate-*r/N/A

        \[\leadsto \color{blue}{\frac{r \cdot \sin b}{\cos \left(a + b\right)}} \]
      4. lower-/.f64N/A

        \[\leadsto \color{blue}{\frac{r \cdot \sin b}{\cos \left(a + b\right)}} \]
      5. *-commutativeN/A

        \[\leadsto \frac{\color{blue}{\sin b \cdot r}}{\cos \left(a + b\right)} \]
      6. lower-*.f6451.2

        \[\leadsto \frac{\color{blue}{\sin b \cdot r}}{\cos \left(a + b\right)} \]
    4. Applied rewrites51.2%

      \[\leadsto \color{blue}{\frac{\sin b \cdot r}{\cos \left(a + b\right)}} \]
    5. Taylor expanded in a around 0

      \[\leadsto \frac{\sin b \cdot r}{\color{blue}{\cos b}} \]
    6. Step-by-step derivation
      1. lower-cos.f6451.9

        \[\leadsto \frac{\sin b \cdot r}{\color{blue}{\cos b}} \]
    7. Applied rewrites51.9%

      \[\leadsto \frac{\sin b \cdot r}{\color{blue}{\cos b}} \]

    if -430 < b < 0.409999999999999976

    1. Initial program 96.4%

      \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \color{blue}{r \cdot \frac{\sin b}{\cos \left(a + b\right)}} \]
      2. lift-/.f64N/A

        \[\leadsto r \cdot \color{blue}{\frac{\sin b}{\cos \left(a + b\right)}} \]
      3. associate-*r/N/A

        \[\leadsto \color{blue}{\frac{r \cdot \sin b}{\cos \left(a + b\right)}} \]
      4. lower-/.f64N/A

        \[\leadsto \color{blue}{\frac{r \cdot \sin b}{\cos \left(a + b\right)}} \]
      5. *-commutativeN/A

        \[\leadsto \frac{\color{blue}{\sin b \cdot r}}{\cos \left(a + b\right)} \]
      6. lower-*.f6496.4

        \[\leadsto \frac{\color{blue}{\sin b \cdot r}}{\cos \left(a + b\right)} \]
    4. Applied rewrites96.4%

      \[\leadsto \color{blue}{\frac{\sin b \cdot r}{\cos \left(a + b\right)}} \]
    5. Taylor expanded in b around 0

      \[\leadsto \frac{\color{blue}{b \cdot \left(r + \frac{-1}{6} \cdot \left({b}^{2} \cdot r\right)\right)}}{\cos \left(a + b\right)} \]
    6. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{\color{blue}{\left(r + \frac{-1}{6} \cdot \left({b}^{2} \cdot r\right)\right) \cdot b}}{\cos \left(a + b\right)} \]
      2. *-commutativeN/A

        \[\leadsto \frac{\left(r + \color{blue}{\left({b}^{2} \cdot r\right) \cdot \frac{-1}{6}}\right) \cdot b}{\cos \left(a + b\right)} \]
      3. associate-*r*N/A

        \[\leadsto \frac{\left(r + \color{blue}{{b}^{2} \cdot \left(r \cdot \frac{-1}{6}\right)}\right) \cdot b}{\cos \left(a + b\right)} \]
      4. *-commutativeN/A

        \[\leadsto \frac{\left(r + {b}^{2} \cdot \color{blue}{\left(\frac{-1}{6} \cdot r\right)}\right) \cdot b}{\cos \left(a + b\right)} \]
      5. lower-*.f64N/A

        \[\leadsto \frac{\color{blue}{\left(r + {b}^{2} \cdot \left(\frac{-1}{6} \cdot r\right)\right) \cdot b}}{\cos \left(a + b\right)} \]
      6. associate-*r*N/A

        \[\leadsto \frac{\left(r + \color{blue}{\left({b}^{2} \cdot \frac{-1}{6}\right) \cdot r}\right) \cdot b}{\cos \left(a + b\right)} \]
      7. *-commutativeN/A

        \[\leadsto \frac{\left(r + \color{blue}{\left(\frac{-1}{6} \cdot {b}^{2}\right)} \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      8. distribute-rgt1-inN/A

        \[\leadsto \frac{\color{blue}{\left(\left(\frac{-1}{6} \cdot {b}^{2} + 1\right) \cdot r\right)} \cdot b}{\cos \left(a + b\right)} \]
      9. +-commutativeN/A

        \[\leadsto \frac{\left(\color{blue}{\left(1 + \frac{-1}{6} \cdot {b}^{2}\right)} \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      10. lower-*.f64N/A

        \[\leadsto \frac{\color{blue}{\left(\left(1 + \frac{-1}{6} \cdot {b}^{2}\right) \cdot r\right)} \cdot b}{\cos \left(a + b\right)} \]
      11. +-commutativeN/A

        \[\leadsto \frac{\left(\color{blue}{\left(\frac{-1}{6} \cdot {b}^{2} + 1\right)} \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      12. *-commutativeN/A

        \[\leadsto \frac{\left(\left(\color{blue}{{b}^{2} \cdot \frac{-1}{6}} + 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      13. lower-fma.f64N/A

        \[\leadsto \frac{\left(\color{blue}{\mathsf{fma}\left({b}^{2}, \frac{-1}{6}, 1\right)} \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      14. unpow2N/A

        \[\leadsto \frac{\left(\mathsf{fma}\left(\color{blue}{b \cdot b}, \frac{-1}{6}, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      15. lower-*.f6496.5

        \[\leadsto \frac{\left(\mathsf{fma}\left(\color{blue}{b \cdot b}, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
    7. Applied rewrites96.5%

      \[\leadsto \frac{\color{blue}{\left(\mathsf{fma}\left(b \cdot b, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}}{\cos \left(a + b\right)} \]

    if 0.409999999999999976 < b

    1. Initial program 65.5%

      \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
    2. Add Preprocessing
    3. Taylor expanded in a around 0

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos b}} \]
    4. Step-by-step derivation
      1. lower-cos.f6464.4

        \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos b}} \]
    5. Applied rewrites64.4%

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos b}} \]
  3. Recombined 3 regimes into one program.
  4. Final simplification76.5%

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \leq -430:\\ \;\;\;\;\frac{\sin b \cdot r}{\cos b}\\ \mathbf{elif}\;b \leq 0.41:\\ \;\;\;\;\frac{\left(\mathsf{fma}\left(b \cdot b, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sin b}{\cos b} \cdot r\\ \end{array} \]
  5. Add Preprocessing

Alternative 6: 75.5% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;b \leq -430:\\ \;\;\;\;\frac{r}{\cos b} \cdot \sin b\\ \mathbf{elif}\;b \leq 0.41:\\ \;\;\;\;\frac{\left(\mathsf{fma}\left(b \cdot b, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sin b}{\cos b} \cdot r\\ \end{array} \end{array} \]
(FPCore (r a b)
 :precision binary64
 (if (<= b -430.0)
   (* (/ r (cos b)) (sin b))
   (if (<= b 0.41)
     (/ (* (* (fma (* b b) -0.16666666666666666 1.0) r) b) (cos (+ a b)))
     (* (/ (sin b) (cos b)) r))))
double code(double r, double a, double b) {
	double tmp;
	if (b <= -430.0) {
		tmp = (r / cos(b)) * sin(b);
	} else if (b <= 0.41) {
		tmp = ((fma((b * b), -0.16666666666666666, 1.0) * r) * b) / cos((a + b));
	} else {
		tmp = (sin(b) / cos(b)) * r;
	}
	return tmp;
}
function code(r, a, b)
	tmp = 0.0
	if (b <= -430.0)
		tmp = Float64(Float64(r / cos(b)) * sin(b));
	elseif (b <= 0.41)
		tmp = Float64(Float64(Float64(fma(Float64(b * b), -0.16666666666666666, 1.0) * r) * b) / cos(Float64(a + b)));
	else
		tmp = Float64(Float64(sin(b) / cos(b)) * r);
	end
	return tmp
end
code[r_, a_, b_] := If[LessEqual[b, -430.0], N[(N[(r / N[Cos[b], $MachinePrecision]), $MachinePrecision] * N[Sin[b], $MachinePrecision]), $MachinePrecision], If[LessEqual[b, 0.41], N[(N[(N[(N[(N[(b * b), $MachinePrecision] * -0.16666666666666666 + 1.0), $MachinePrecision] * r), $MachinePrecision] * b), $MachinePrecision] / N[Cos[N[(a + b), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(N[(N[Sin[b], $MachinePrecision] / N[Cos[b], $MachinePrecision]), $MachinePrecision] * r), $MachinePrecision]]]
\begin{array}{l}

\\
\begin{array}{l}
\mathbf{if}\;b \leq -430:\\
\;\;\;\;\frac{r}{\cos b} \cdot \sin b\\

\mathbf{elif}\;b \leq 0.41:\\
\;\;\;\;\frac{\left(\mathsf{fma}\left(b \cdot b, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)}\\

\mathbf{else}:\\
\;\;\;\;\frac{\sin b}{\cos b} \cdot r\\


\end{array}
\end{array}
Derivation
  1. Split input into 3 regimes
  2. if b < -430

    1. Initial program 51.1%

      \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
    2. Add Preprocessing
    3. Taylor expanded in a around 0

      \[\leadsto \color{blue}{\frac{r \cdot \sin b}{\cos b}} \]
    4. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{\color{blue}{\sin b \cdot r}}{\cos b} \]
      2. associate-/l*N/A

        \[\leadsto \color{blue}{\sin b \cdot \frac{r}{\cos b}} \]
      3. *-commutativeN/A

        \[\leadsto \color{blue}{\frac{r}{\cos b} \cdot \sin b} \]
      4. lower-*.f64N/A

        \[\leadsto \color{blue}{\frac{r}{\cos b} \cdot \sin b} \]
      5. lower-/.f64N/A

        \[\leadsto \color{blue}{\frac{r}{\cos b}} \cdot \sin b \]
      6. lower-cos.f64N/A

        \[\leadsto \frac{r}{\color{blue}{\cos b}} \cdot \sin b \]
      7. lower-sin.f6451.9

        \[\leadsto \frac{r}{\cos b} \cdot \color{blue}{\sin b} \]
    5. Applied rewrites51.9%

      \[\leadsto \color{blue}{\frac{r}{\cos b} \cdot \sin b} \]

    if -430 < b < 0.409999999999999976

    1. Initial program 96.4%

      \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \color{blue}{r \cdot \frac{\sin b}{\cos \left(a + b\right)}} \]
      2. lift-/.f64N/A

        \[\leadsto r \cdot \color{blue}{\frac{\sin b}{\cos \left(a + b\right)}} \]
      3. associate-*r/N/A

        \[\leadsto \color{blue}{\frac{r \cdot \sin b}{\cos \left(a + b\right)}} \]
      4. lower-/.f64N/A

        \[\leadsto \color{blue}{\frac{r \cdot \sin b}{\cos \left(a + b\right)}} \]
      5. *-commutativeN/A

        \[\leadsto \frac{\color{blue}{\sin b \cdot r}}{\cos \left(a + b\right)} \]
      6. lower-*.f6496.4

        \[\leadsto \frac{\color{blue}{\sin b \cdot r}}{\cos \left(a + b\right)} \]
    4. Applied rewrites96.4%

      \[\leadsto \color{blue}{\frac{\sin b \cdot r}{\cos \left(a + b\right)}} \]
    5. Taylor expanded in b around 0

      \[\leadsto \frac{\color{blue}{b \cdot \left(r + \frac{-1}{6} \cdot \left({b}^{2} \cdot r\right)\right)}}{\cos \left(a + b\right)} \]
    6. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{\color{blue}{\left(r + \frac{-1}{6} \cdot \left({b}^{2} \cdot r\right)\right) \cdot b}}{\cos \left(a + b\right)} \]
      2. *-commutativeN/A

        \[\leadsto \frac{\left(r + \color{blue}{\left({b}^{2} \cdot r\right) \cdot \frac{-1}{6}}\right) \cdot b}{\cos \left(a + b\right)} \]
      3. associate-*r*N/A

        \[\leadsto \frac{\left(r + \color{blue}{{b}^{2} \cdot \left(r \cdot \frac{-1}{6}\right)}\right) \cdot b}{\cos \left(a + b\right)} \]
      4. *-commutativeN/A

        \[\leadsto \frac{\left(r + {b}^{2} \cdot \color{blue}{\left(\frac{-1}{6} \cdot r\right)}\right) \cdot b}{\cos \left(a + b\right)} \]
      5. lower-*.f64N/A

        \[\leadsto \frac{\color{blue}{\left(r + {b}^{2} \cdot \left(\frac{-1}{6} \cdot r\right)\right) \cdot b}}{\cos \left(a + b\right)} \]
      6. associate-*r*N/A

        \[\leadsto \frac{\left(r + \color{blue}{\left({b}^{2} \cdot \frac{-1}{6}\right) \cdot r}\right) \cdot b}{\cos \left(a + b\right)} \]
      7. *-commutativeN/A

        \[\leadsto \frac{\left(r + \color{blue}{\left(\frac{-1}{6} \cdot {b}^{2}\right)} \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      8. distribute-rgt1-inN/A

        \[\leadsto \frac{\color{blue}{\left(\left(\frac{-1}{6} \cdot {b}^{2} + 1\right) \cdot r\right)} \cdot b}{\cos \left(a + b\right)} \]
      9. +-commutativeN/A

        \[\leadsto \frac{\left(\color{blue}{\left(1 + \frac{-1}{6} \cdot {b}^{2}\right)} \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      10. lower-*.f64N/A

        \[\leadsto \frac{\color{blue}{\left(\left(1 + \frac{-1}{6} \cdot {b}^{2}\right) \cdot r\right)} \cdot b}{\cos \left(a + b\right)} \]
      11. +-commutativeN/A

        \[\leadsto \frac{\left(\color{blue}{\left(\frac{-1}{6} \cdot {b}^{2} + 1\right)} \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      12. *-commutativeN/A

        \[\leadsto \frac{\left(\left(\color{blue}{{b}^{2} \cdot \frac{-1}{6}} + 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      13. lower-fma.f64N/A

        \[\leadsto \frac{\left(\color{blue}{\mathsf{fma}\left({b}^{2}, \frac{-1}{6}, 1\right)} \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      14. unpow2N/A

        \[\leadsto \frac{\left(\mathsf{fma}\left(\color{blue}{b \cdot b}, \frac{-1}{6}, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      15. lower-*.f6496.5

        \[\leadsto \frac{\left(\mathsf{fma}\left(\color{blue}{b \cdot b}, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
    7. Applied rewrites96.5%

      \[\leadsto \frac{\color{blue}{\left(\mathsf{fma}\left(b \cdot b, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}}{\cos \left(a + b\right)} \]

    if 0.409999999999999976 < b

    1. Initial program 65.5%

      \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
    2. Add Preprocessing
    3. Taylor expanded in a around 0

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos b}} \]
    4. Step-by-step derivation
      1. lower-cos.f6464.4

        \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos b}} \]
    5. Applied rewrites64.4%

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos b}} \]
  3. Recombined 3 regimes into one program.
  4. Final simplification76.5%

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \leq -430:\\ \;\;\;\;\frac{r}{\cos b} \cdot \sin b\\ \mathbf{elif}\;b \leq 0.41:\\ \;\;\;\;\frac{\left(\mathsf{fma}\left(b \cdot b, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sin b}{\cos b} \cdot r\\ \end{array} \]
  5. Add Preprocessing

Alternative 7: 75.5% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_0 := \frac{r}{\cos b} \cdot \sin b\\ \mathbf{if}\;b \leq -430:\\ \;\;\;\;t\_0\\ \mathbf{elif}\;b \leq 0.41:\\ \;\;\;\;\frac{\left(\mathsf{fma}\left(b \cdot b, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)}\\ \mathbf{else}:\\ \;\;\;\;t\_0\\ \end{array} \end{array} \]
(FPCore (r a b)
 :precision binary64
 (let* ((t_0 (* (/ r (cos b)) (sin b))))
   (if (<= b -430.0)
     t_0
     (if (<= b 0.41)
       (/ (* (* (fma (* b b) -0.16666666666666666 1.0) r) b) (cos (+ a b)))
       t_0))))
double code(double r, double a, double b) {
	double t_0 = (r / cos(b)) * sin(b);
	double tmp;
	if (b <= -430.0) {
		tmp = t_0;
	} else if (b <= 0.41) {
		tmp = ((fma((b * b), -0.16666666666666666, 1.0) * r) * b) / cos((a + b));
	} else {
		tmp = t_0;
	}
	return tmp;
}
function code(r, a, b)
	t_0 = Float64(Float64(r / cos(b)) * sin(b))
	tmp = 0.0
	if (b <= -430.0)
		tmp = t_0;
	elseif (b <= 0.41)
		tmp = Float64(Float64(Float64(fma(Float64(b * b), -0.16666666666666666, 1.0) * r) * b) / cos(Float64(a + b)));
	else
		tmp = t_0;
	end
	return tmp
end
code[r_, a_, b_] := Block[{t$95$0 = N[(N[(r / N[Cos[b], $MachinePrecision]), $MachinePrecision] * N[Sin[b], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[b, -430.0], t$95$0, If[LessEqual[b, 0.41], N[(N[(N[(N[(N[(b * b), $MachinePrecision] * -0.16666666666666666 + 1.0), $MachinePrecision] * r), $MachinePrecision] * b), $MachinePrecision] / N[Cos[N[(a + b), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}

\\
\begin{array}{l}
t_0 := \frac{r}{\cos b} \cdot \sin b\\
\mathbf{if}\;b \leq -430:\\
\;\;\;\;t\_0\\

\mathbf{elif}\;b \leq 0.41:\\
\;\;\;\;\frac{\left(\mathsf{fma}\left(b \cdot b, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)}\\

\mathbf{else}:\\
\;\;\;\;t\_0\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if b < -430 or 0.409999999999999976 < b

    1. Initial program 57.2%

      \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
    2. Add Preprocessing
    3. Taylor expanded in a around 0

      \[\leadsto \color{blue}{\frac{r \cdot \sin b}{\cos b}} \]
    4. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{\color{blue}{\sin b \cdot r}}{\cos b} \]
      2. associate-/l*N/A

        \[\leadsto \color{blue}{\sin b \cdot \frac{r}{\cos b}} \]
      3. *-commutativeN/A

        \[\leadsto \color{blue}{\frac{r}{\cos b} \cdot \sin b} \]
      4. lower-*.f64N/A

        \[\leadsto \color{blue}{\frac{r}{\cos b} \cdot \sin b} \]
      5. lower-/.f64N/A

        \[\leadsto \color{blue}{\frac{r}{\cos b}} \cdot \sin b \]
      6. lower-cos.f64N/A

        \[\leadsto \frac{r}{\color{blue}{\cos b}} \cdot \sin b \]
      7. lower-sin.f6457.2

        \[\leadsto \frac{r}{\cos b} \cdot \color{blue}{\sin b} \]
    5. Applied rewrites57.2%

      \[\leadsto \color{blue}{\frac{r}{\cos b} \cdot \sin b} \]

    if -430 < b < 0.409999999999999976

    1. Initial program 96.4%

      \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \color{blue}{r \cdot \frac{\sin b}{\cos \left(a + b\right)}} \]
      2. lift-/.f64N/A

        \[\leadsto r \cdot \color{blue}{\frac{\sin b}{\cos \left(a + b\right)}} \]
      3. associate-*r/N/A

        \[\leadsto \color{blue}{\frac{r \cdot \sin b}{\cos \left(a + b\right)}} \]
      4. lower-/.f64N/A

        \[\leadsto \color{blue}{\frac{r \cdot \sin b}{\cos \left(a + b\right)}} \]
      5. *-commutativeN/A

        \[\leadsto \frac{\color{blue}{\sin b \cdot r}}{\cos \left(a + b\right)} \]
      6. lower-*.f6496.4

        \[\leadsto \frac{\color{blue}{\sin b \cdot r}}{\cos \left(a + b\right)} \]
    4. Applied rewrites96.4%

      \[\leadsto \color{blue}{\frac{\sin b \cdot r}{\cos \left(a + b\right)}} \]
    5. Taylor expanded in b around 0

      \[\leadsto \frac{\color{blue}{b \cdot \left(r + \frac{-1}{6} \cdot \left({b}^{2} \cdot r\right)\right)}}{\cos \left(a + b\right)} \]
    6. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{\color{blue}{\left(r + \frac{-1}{6} \cdot \left({b}^{2} \cdot r\right)\right) \cdot b}}{\cos \left(a + b\right)} \]
      2. *-commutativeN/A

        \[\leadsto \frac{\left(r + \color{blue}{\left({b}^{2} \cdot r\right) \cdot \frac{-1}{6}}\right) \cdot b}{\cos \left(a + b\right)} \]
      3. associate-*r*N/A

        \[\leadsto \frac{\left(r + \color{blue}{{b}^{2} \cdot \left(r \cdot \frac{-1}{6}\right)}\right) \cdot b}{\cos \left(a + b\right)} \]
      4. *-commutativeN/A

        \[\leadsto \frac{\left(r + {b}^{2} \cdot \color{blue}{\left(\frac{-1}{6} \cdot r\right)}\right) \cdot b}{\cos \left(a + b\right)} \]
      5. lower-*.f64N/A

        \[\leadsto \frac{\color{blue}{\left(r + {b}^{2} \cdot \left(\frac{-1}{6} \cdot r\right)\right) \cdot b}}{\cos \left(a + b\right)} \]
      6. associate-*r*N/A

        \[\leadsto \frac{\left(r + \color{blue}{\left({b}^{2} \cdot \frac{-1}{6}\right) \cdot r}\right) \cdot b}{\cos \left(a + b\right)} \]
      7. *-commutativeN/A

        \[\leadsto \frac{\left(r + \color{blue}{\left(\frac{-1}{6} \cdot {b}^{2}\right)} \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      8. distribute-rgt1-inN/A

        \[\leadsto \frac{\color{blue}{\left(\left(\frac{-1}{6} \cdot {b}^{2} + 1\right) \cdot r\right)} \cdot b}{\cos \left(a + b\right)} \]
      9. +-commutativeN/A

        \[\leadsto \frac{\left(\color{blue}{\left(1 + \frac{-1}{6} \cdot {b}^{2}\right)} \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      10. lower-*.f64N/A

        \[\leadsto \frac{\color{blue}{\left(\left(1 + \frac{-1}{6} \cdot {b}^{2}\right) \cdot r\right)} \cdot b}{\cos \left(a + b\right)} \]
      11. +-commutativeN/A

        \[\leadsto \frac{\left(\color{blue}{\left(\frac{-1}{6} \cdot {b}^{2} + 1\right)} \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      12. *-commutativeN/A

        \[\leadsto \frac{\left(\left(\color{blue}{{b}^{2} \cdot \frac{-1}{6}} + 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      13. lower-fma.f64N/A

        \[\leadsto \frac{\left(\color{blue}{\mathsf{fma}\left({b}^{2}, \frac{-1}{6}, 1\right)} \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      14. unpow2N/A

        \[\leadsto \frac{\left(\mathsf{fma}\left(\color{blue}{b \cdot b}, \frac{-1}{6}, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
      15. lower-*.f6496.5

        \[\leadsto \frac{\left(\mathsf{fma}\left(\color{blue}{b \cdot b}, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
    7. Applied rewrites96.5%

      \[\leadsto \frac{\color{blue}{\left(\mathsf{fma}\left(b \cdot b, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}}{\cos \left(a + b\right)} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 8: 75.8% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \frac{\sin b}{\cos \left(a + b\right)} \cdot r \end{array} \]
(FPCore (r a b) :precision binary64 (* (/ (sin b) (cos (+ a b))) r))
double code(double r, double a, double b) {
	return (sin(b) / cos((a + b))) * r;
}
real(8) function code(r, a, b)
    real(8), intent (in) :: r
    real(8), intent (in) :: a
    real(8), intent (in) :: b
    code = (sin(b) / cos((a + b))) * r
end function
public static double code(double r, double a, double b) {
	return (Math.sin(b) / Math.cos((a + b))) * r;
}
def code(r, a, b):
	return (math.sin(b) / math.cos((a + b))) * r
function code(r, a, b)
	return Float64(Float64(sin(b) / cos(Float64(a + b))) * r)
end
function tmp = code(r, a, b)
	tmp = (sin(b) / cos((a + b))) * r;
end
code[r_, a_, b_] := N[(N[(N[Sin[b], $MachinePrecision] / N[Cos[N[(a + b), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * r), $MachinePrecision]
\begin{array}{l}

\\
\frac{\sin b}{\cos \left(a + b\right)} \cdot r
\end{array}
Derivation
  1. Initial program 76.5%

    \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
  2. Add Preprocessing
  3. Final simplification76.5%

    \[\leadsto \frac{\sin b}{\cos \left(a + b\right)} \cdot r \]
  4. Add Preprocessing

Alternative 9: 50.2% accurate, 1.6× speedup?

\[\begin{array}{l} \\ \frac{\left(\mathsf{fma}\left(b \cdot b, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)} \end{array} \]
(FPCore (r a b)
 :precision binary64
 (/ (* (* (fma (* b b) -0.16666666666666666 1.0) r) b) (cos (+ a b))))
double code(double r, double a, double b) {
	return ((fma((b * b), -0.16666666666666666, 1.0) * r) * b) / cos((a + b));
}
function code(r, a, b)
	return Float64(Float64(Float64(fma(Float64(b * b), -0.16666666666666666, 1.0) * r) * b) / cos(Float64(a + b)))
end
code[r_, a_, b_] := N[(N[(N[(N[(N[(b * b), $MachinePrecision] * -0.16666666666666666 + 1.0), $MachinePrecision] * r), $MachinePrecision] * b), $MachinePrecision] / N[Cos[N[(a + b), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\frac{\left(\mathsf{fma}\left(b \cdot b, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)}
\end{array}
Derivation
  1. Initial program 76.5%

    \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-*.f64N/A

      \[\leadsto \color{blue}{r \cdot \frac{\sin b}{\cos \left(a + b\right)}} \]
    2. lift-/.f64N/A

      \[\leadsto r \cdot \color{blue}{\frac{\sin b}{\cos \left(a + b\right)}} \]
    3. associate-*r/N/A

      \[\leadsto \color{blue}{\frac{r \cdot \sin b}{\cos \left(a + b\right)}} \]
    4. lower-/.f64N/A

      \[\leadsto \color{blue}{\frac{r \cdot \sin b}{\cos \left(a + b\right)}} \]
    5. *-commutativeN/A

      \[\leadsto \frac{\color{blue}{\sin b \cdot r}}{\cos \left(a + b\right)} \]
    6. lower-*.f6476.5

      \[\leadsto \frac{\color{blue}{\sin b \cdot r}}{\cos \left(a + b\right)} \]
  4. Applied rewrites76.5%

    \[\leadsto \color{blue}{\frac{\sin b \cdot r}{\cos \left(a + b\right)}} \]
  5. Taylor expanded in b around 0

    \[\leadsto \frac{\color{blue}{b \cdot \left(r + \frac{-1}{6} \cdot \left({b}^{2} \cdot r\right)\right)}}{\cos \left(a + b\right)} \]
  6. Step-by-step derivation
    1. *-commutativeN/A

      \[\leadsto \frac{\color{blue}{\left(r + \frac{-1}{6} \cdot \left({b}^{2} \cdot r\right)\right) \cdot b}}{\cos \left(a + b\right)} \]
    2. *-commutativeN/A

      \[\leadsto \frac{\left(r + \color{blue}{\left({b}^{2} \cdot r\right) \cdot \frac{-1}{6}}\right) \cdot b}{\cos \left(a + b\right)} \]
    3. associate-*r*N/A

      \[\leadsto \frac{\left(r + \color{blue}{{b}^{2} \cdot \left(r \cdot \frac{-1}{6}\right)}\right) \cdot b}{\cos \left(a + b\right)} \]
    4. *-commutativeN/A

      \[\leadsto \frac{\left(r + {b}^{2} \cdot \color{blue}{\left(\frac{-1}{6} \cdot r\right)}\right) \cdot b}{\cos \left(a + b\right)} \]
    5. lower-*.f64N/A

      \[\leadsto \frac{\color{blue}{\left(r + {b}^{2} \cdot \left(\frac{-1}{6} \cdot r\right)\right) \cdot b}}{\cos \left(a + b\right)} \]
    6. associate-*r*N/A

      \[\leadsto \frac{\left(r + \color{blue}{\left({b}^{2} \cdot \frac{-1}{6}\right) \cdot r}\right) \cdot b}{\cos \left(a + b\right)} \]
    7. *-commutativeN/A

      \[\leadsto \frac{\left(r + \color{blue}{\left(\frac{-1}{6} \cdot {b}^{2}\right)} \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
    8. distribute-rgt1-inN/A

      \[\leadsto \frac{\color{blue}{\left(\left(\frac{-1}{6} \cdot {b}^{2} + 1\right) \cdot r\right)} \cdot b}{\cos \left(a + b\right)} \]
    9. +-commutativeN/A

      \[\leadsto \frac{\left(\color{blue}{\left(1 + \frac{-1}{6} \cdot {b}^{2}\right)} \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
    10. lower-*.f64N/A

      \[\leadsto \frac{\color{blue}{\left(\left(1 + \frac{-1}{6} \cdot {b}^{2}\right) \cdot r\right)} \cdot b}{\cos \left(a + b\right)} \]
    11. +-commutativeN/A

      \[\leadsto \frac{\left(\color{blue}{\left(\frac{-1}{6} \cdot {b}^{2} + 1\right)} \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
    12. *-commutativeN/A

      \[\leadsto \frac{\left(\left(\color{blue}{{b}^{2} \cdot \frac{-1}{6}} + 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
    13. lower-fma.f64N/A

      \[\leadsto \frac{\left(\color{blue}{\mathsf{fma}\left({b}^{2}, \frac{-1}{6}, 1\right)} \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
    14. unpow2N/A

      \[\leadsto \frac{\left(\mathsf{fma}\left(\color{blue}{b \cdot b}, \frac{-1}{6}, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
    15. lower-*.f6449.2

      \[\leadsto \frac{\left(\mathsf{fma}\left(\color{blue}{b \cdot b}, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}{\cos \left(a + b\right)} \]
  7. Applied rewrites49.2%

    \[\leadsto \frac{\color{blue}{\left(\mathsf{fma}\left(b \cdot b, -0.16666666666666666, 1\right) \cdot r\right) \cdot b}}{\cos \left(a + b\right)} \]
  8. Add Preprocessing

Alternative 10: 50.2% accurate, 1.6× speedup?

\[\begin{array}{l} \\ \frac{\mathsf{fma}\left(-0.16666666666666666 \cdot \left(b \cdot b\right), b, b\right)}{\cos \left(a + b\right)} \cdot r \end{array} \]
(FPCore (r a b)
 :precision binary64
 (* (/ (fma (* -0.16666666666666666 (* b b)) b b) (cos (+ a b))) r))
double code(double r, double a, double b) {
	return (fma((-0.16666666666666666 * (b * b)), b, b) / cos((a + b))) * r;
}
function code(r, a, b)
	return Float64(Float64(fma(Float64(-0.16666666666666666 * Float64(b * b)), b, b) / cos(Float64(a + b))) * r)
end
code[r_, a_, b_] := N[(N[(N[(N[(-0.16666666666666666 * N[(b * b), $MachinePrecision]), $MachinePrecision] * b + b), $MachinePrecision] / N[Cos[N[(a + b), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * r), $MachinePrecision]
\begin{array}{l}

\\
\frac{\mathsf{fma}\left(-0.16666666666666666 \cdot \left(b \cdot b\right), b, b\right)}{\cos \left(a + b\right)} \cdot r
\end{array}
Derivation
  1. Initial program 76.5%

    \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
  2. Add Preprocessing
  3. Taylor expanded in b around 0

    \[\leadsto r \cdot \frac{\color{blue}{b \cdot \left(1 + \frac{-1}{6} \cdot {b}^{2}\right)}}{\cos \left(a + b\right)} \]
  4. Step-by-step derivation
    1. +-commutativeN/A

      \[\leadsto r \cdot \frac{b \cdot \color{blue}{\left(\frac{-1}{6} \cdot {b}^{2} + 1\right)}}{\cos \left(a + b\right)} \]
    2. distribute-lft-inN/A

      \[\leadsto r \cdot \frac{\color{blue}{b \cdot \left(\frac{-1}{6} \cdot {b}^{2}\right) + b \cdot 1}}{\cos \left(a + b\right)} \]
    3. *-commutativeN/A

      \[\leadsto r \cdot \frac{b \cdot \color{blue}{\left({b}^{2} \cdot \frac{-1}{6}\right)} + b \cdot 1}{\cos \left(a + b\right)} \]
    4. associate-*r*N/A

      \[\leadsto r \cdot \frac{\color{blue}{\left(b \cdot {b}^{2}\right) \cdot \frac{-1}{6}} + b \cdot 1}{\cos \left(a + b\right)} \]
    5. *-rgt-identityN/A

      \[\leadsto r \cdot \frac{\left(b \cdot {b}^{2}\right) \cdot \frac{-1}{6} + \color{blue}{b}}{\cos \left(a + b\right)} \]
    6. lower-fma.f64N/A

      \[\leadsto r \cdot \frac{\color{blue}{\mathsf{fma}\left(b \cdot {b}^{2}, \frac{-1}{6}, b\right)}}{\cos \left(a + b\right)} \]
    7. unpow2N/A

      \[\leadsto r \cdot \frac{\mathsf{fma}\left(b \cdot \color{blue}{\left(b \cdot b\right)}, \frac{-1}{6}, b\right)}{\cos \left(a + b\right)} \]
    8. cube-unmultN/A

      \[\leadsto r \cdot \frac{\mathsf{fma}\left(\color{blue}{{b}^{3}}, \frac{-1}{6}, b\right)}{\cos \left(a + b\right)} \]
    9. lower-pow.f6449.2

      \[\leadsto r \cdot \frac{\mathsf{fma}\left(\color{blue}{{b}^{3}}, -0.16666666666666666, b\right)}{\cos \left(a + b\right)} \]
  5. Applied rewrites49.2%

    \[\leadsto r \cdot \frac{\color{blue}{\mathsf{fma}\left({b}^{3}, -0.16666666666666666, b\right)}}{\cos \left(a + b\right)} \]
  6. Step-by-step derivation
    1. Applied rewrites49.2%

      \[\leadsto r \cdot \frac{\mathsf{fma}\left(-0.16666666666666666 \cdot \left(b \cdot b\right), \color{blue}{b}, b\right)}{\cos \left(a + b\right)} \]
    2. Final simplification49.2%

      \[\leadsto \frac{\mathsf{fma}\left(-0.16666666666666666 \cdot \left(b \cdot b\right), b, b\right)}{\cos \left(a + b\right)} \cdot r \]
    3. Add Preprocessing

    Alternative 11: 50.5% accurate, 1.8× speedup?

    \[\begin{array}{l} \\ \frac{b \cdot r}{\cos \left(a + b\right)} \end{array} \]
    (FPCore (r a b) :precision binary64 (/ (* b r) (cos (+ a b))))
    double code(double r, double a, double b) {
    	return (b * r) / cos((a + b));
    }
    
    real(8) function code(r, a, b)
        real(8), intent (in) :: r
        real(8), intent (in) :: a
        real(8), intent (in) :: b
        code = (b * r) / cos((a + b))
    end function
    
    public static double code(double r, double a, double b) {
    	return (b * r) / Math.cos((a + b));
    }
    
    def code(r, a, b):
    	return (b * r) / math.cos((a + b))
    
    function code(r, a, b)
    	return Float64(Float64(b * r) / cos(Float64(a + b)))
    end
    
    function tmp = code(r, a, b)
    	tmp = (b * r) / cos((a + b));
    end
    
    code[r_, a_, b_] := N[(N[(b * r), $MachinePrecision] / N[Cos[N[(a + b), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
    
    \begin{array}{l}
    
    \\
    \frac{b \cdot r}{\cos \left(a + b\right)}
    \end{array}
    
    Derivation
    1. Initial program 76.5%

      \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-*.f64N/A

        \[\leadsto \color{blue}{r \cdot \frac{\sin b}{\cos \left(a + b\right)}} \]
      2. lift-/.f64N/A

        \[\leadsto r \cdot \color{blue}{\frac{\sin b}{\cos \left(a + b\right)}} \]
      3. associate-*r/N/A

        \[\leadsto \color{blue}{\frac{r \cdot \sin b}{\cos \left(a + b\right)}} \]
      4. lower-/.f64N/A

        \[\leadsto \color{blue}{\frac{r \cdot \sin b}{\cos \left(a + b\right)}} \]
      5. *-commutativeN/A

        \[\leadsto \frac{\color{blue}{\sin b \cdot r}}{\cos \left(a + b\right)} \]
      6. lower-*.f6476.5

        \[\leadsto \frac{\color{blue}{\sin b \cdot r}}{\cos \left(a + b\right)} \]
    4. Applied rewrites76.5%

      \[\leadsto \color{blue}{\frac{\sin b \cdot r}{\cos \left(a + b\right)}} \]
    5. Taylor expanded in b around 0

      \[\leadsto \frac{\color{blue}{b \cdot r}}{\cos \left(a + b\right)} \]
    6. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{\color{blue}{r \cdot b}}{\cos \left(a + b\right)} \]
      2. lower-*.f6449.1

        \[\leadsto \frac{\color{blue}{r \cdot b}}{\cos \left(a + b\right)} \]
    7. Applied rewrites49.1%

      \[\leadsto \frac{\color{blue}{r \cdot b}}{\cos \left(a + b\right)} \]
    8. Final simplification49.1%

      \[\leadsto \frac{b \cdot r}{\cos \left(a + b\right)} \]
    9. Add Preprocessing

    Alternative 12: 50.5% accurate, 1.9× speedup?

    \[\begin{array}{l} \\ \frac{r}{\cos a} \cdot b \end{array} \]
    (FPCore (r a b) :precision binary64 (* (/ r (cos a)) b))
    double code(double r, double a, double b) {
    	return (r / cos(a)) * b;
    }
    
    real(8) function code(r, a, b)
        real(8), intent (in) :: r
        real(8), intent (in) :: a
        real(8), intent (in) :: b
        code = (r / cos(a)) * b
    end function
    
    public static double code(double r, double a, double b) {
    	return (r / Math.cos(a)) * b;
    }
    
    def code(r, a, b):
    	return (r / math.cos(a)) * b
    
    function code(r, a, b)
    	return Float64(Float64(r / cos(a)) * b)
    end
    
    function tmp = code(r, a, b)
    	tmp = (r / cos(a)) * b;
    end
    
    code[r_, a_, b_] := N[(N[(r / N[Cos[a], $MachinePrecision]), $MachinePrecision] * b), $MachinePrecision]
    
    \begin{array}{l}
    
    \\
    \frac{r}{\cos a} \cdot b
    \end{array}
    
    Derivation
    1. Initial program 76.5%

      \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
    2. Add Preprocessing
    3. Step-by-step derivation
      1. lift-cos.f64N/A

        \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos \left(a + b\right)}} \]
      2. lift-+.f64N/A

        \[\leadsto r \cdot \frac{\sin b}{\cos \color{blue}{\left(a + b\right)}} \]
      3. cos-sumN/A

        \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos a \cdot \cos b - \sin a \cdot \sin b}} \]
      4. flip--N/A

        \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\frac{\left(\cos a \cdot \cos b\right) \cdot \left(\cos a \cdot \cos b\right) - \left(\sin a \cdot \sin b\right) \cdot \left(\sin a \cdot \sin b\right)}{\cos a \cdot \cos b + \sin a \cdot \sin b}}} \]
      5. cos-diffN/A

        \[\leadsto r \cdot \frac{\sin b}{\frac{\left(\cos a \cdot \cos b\right) \cdot \left(\cos a \cdot \cos b\right) - \left(\sin a \cdot \sin b\right) \cdot \left(\sin a \cdot \sin b\right)}{\color{blue}{\cos \left(a - b\right)}}} \]
      6. lower-/.f64N/A

        \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\frac{\left(\cos a \cdot \cos b\right) \cdot \left(\cos a \cdot \cos b\right) - \left(\sin a \cdot \sin b\right) \cdot \left(\sin a \cdot \sin b\right)}{\cos \left(a - b\right)}}} \]
    4. Applied rewrites76.4%

      \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\frac{\cos \left(b - a\right) \cdot \cos \left(a + b\right)}{\cos \left(b - a\right)}}} \]
    5. Taylor expanded in b around 0

      \[\leadsto \color{blue}{\frac{b \cdot r}{\cos a}} \]
    6. Step-by-step derivation
      1. *-commutativeN/A

        \[\leadsto \frac{\color{blue}{r \cdot b}}{\cos a} \]
      2. associate-*l/N/A

        \[\leadsto \color{blue}{\frac{r}{\cos a} \cdot b} \]
      3. lower-*.f64N/A

        \[\leadsto \color{blue}{\frac{r}{\cos a} \cdot b} \]
      4. lower-/.f64N/A

        \[\leadsto \color{blue}{\frac{r}{\cos a}} \cdot b \]
      5. lower-cos.f6449.0

        \[\leadsto \frac{r}{\color{blue}{\cos a}} \cdot b \]
    7. Applied rewrites49.0%

      \[\leadsto \color{blue}{\frac{r}{\cos a} \cdot b} \]
    8. Add Preprocessing

    Alternative 13: 33.9% accurate, 12.9× speedup?

    \[\begin{array}{l} \\ \frac{b}{1} \cdot r \end{array} \]
    (FPCore (r a b) :precision binary64 (* (/ b 1.0) r))
    double code(double r, double a, double b) {
    	return (b / 1.0) * r;
    }
    
    real(8) function code(r, a, b)
        real(8), intent (in) :: r
        real(8), intent (in) :: a
        real(8), intent (in) :: b
        code = (b / 1.0d0) * r
    end function
    
    public static double code(double r, double a, double b) {
    	return (b / 1.0) * r;
    }
    
    def code(r, a, b):
    	return (b / 1.0) * r
    
    function code(r, a, b)
    	return Float64(Float64(b / 1.0) * r)
    end
    
    function tmp = code(r, a, b)
    	tmp = (b / 1.0) * r;
    end
    
    code[r_, a_, b_] := N[(N[(b / 1.0), $MachinePrecision] * r), $MachinePrecision]
    
    \begin{array}{l}
    
    \\
    \frac{b}{1} \cdot r
    \end{array}
    
    Derivation
    1. Initial program 76.5%

      \[r \cdot \frac{\sin b}{\cos \left(a + b\right)} \]
    2. Add Preprocessing
    3. Taylor expanded in b around 0

      \[\leadsto r \cdot \color{blue}{\frac{b}{\cos a}} \]
    4. Step-by-step derivation
      1. lower-/.f64N/A

        \[\leadsto r \cdot \color{blue}{\frac{b}{\cos a}} \]
      2. lower-cos.f6449.0

        \[\leadsto r \cdot \frac{b}{\color{blue}{\cos a}} \]
    5. Applied rewrites49.0%

      \[\leadsto r \cdot \color{blue}{\frac{b}{\cos a}} \]
    6. Taylor expanded in a around 0

      \[\leadsto r \cdot \frac{b}{1} \]
    7. Step-by-step derivation
      1. Applied rewrites32.8%

        \[\leadsto r \cdot \frac{b}{1} \]
      2. Final simplification32.8%

        \[\leadsto \frac{b}{1} \cdot r \]
      3. Add Preprocessing

      Reproduce

      ?
      herbie shell --seed 2024276 
      (FPCore (r a b)
        :name "rsin B (should all be same)"
        :precision binary64
        (* r (/ (sin b) (cos (+ a b)))))