rsin A (should all be same)

Percentage Accurate: 76.2% → 99.5%
Time: 10.6s
Alternatives: 13
Speedup: 0.5×

Specification

?
\[\begin{array}{l} \\ \frac{r \cdot \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(Float64(r * 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[(N[(r * N[Sin[b], $MachinePrecision]), $MachinePrecision] / N[Cos[N[(a + b), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\frac{r \cdot \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: 76.2% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \frac{r \cdot \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(Float64(r * 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[(N[(r * N[Sin[b], $MachinePrecision]), $MachinePrecision] / N[Cos[N[(a + b), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

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

Alternative 1: 99.5% accurate, 0.3× speedup?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    \[\leadsto \frac{r \cdot \sin b}{\color{blue}{\mathsf{fma}\left(\sin b, -\sin a, \cos b \cdot \cos a\right)}} \]
  5. Step-by-step derivation
    1. +-lft-identityN/A

      \[\leadsto \frac{r \cdot \sin b}{\mathsf{fma}\left(\color{blue}{0 + \sin b}, -\sin a, \cos b \cdot \cos a\right)} \]
    2. flip-+N/A

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

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

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

      \[\leadsto \frac{r \cdot \sin b}{\mathsf{fma}\left(\color{blue}{\frac{0 \cdot 0 - \sin b \cdot \sin b}{-\sin b}}, -\sin a, \cos b \cdot \cos a\right)} \]
    6. metadata-evalN/A

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

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

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

      \[\leadsto \frac{r \cdot \sin b}{\mathsf{fma}\left(\frac{-\color{blue}{{\sin b}^{2}}}{-\sin b}, -\sin a, \cos b \cdot \cos a\right)} \]
    10. lower-pow.f6499.6

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

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

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

Alternative 2: 99.5% accurate, 0.4× speedup?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    \[\leadsto \frac{r \cdot \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 \cdot r}{\mathsf{fma}\left(\sin b, -\sin a, \cos a \cdot \cos b\right)} \]
  6. Add Preprocessing

Alternative 3: 99.5% accurate, 0.4× speedup?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Alternative 4: 99.4% accurate, 0.5× speedup?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    \[\leadsto \frac{r \cdot \sin b}{\color{blue}{\mathsf{fma}\left(\sin b, -\sin a, \cos b \cdot \cos a\right)}} \]
  5. Step-by-step derivation
    1. lift-/.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

      \[\leadsto \frac{\sin b \cdot r}{\cos b \cdot \cos a - \sin b \cdot \color{blue}{\sin a}} \]
    14. cos-sumN/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      \[\leadsto \frac{r}{\frac{\color{blue}{\cos b \cdot \cos a} - \sin a \cdot \sin b}{\sin b}} \]
    13. div-subN/A

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

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

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

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

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

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

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

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

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

Alternative 5: 99.4% accurate, 0.5× speedup?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    \[\leadsto \frac{r \cdot \sin b}{\color{blue}{\mathsf{fma}\left(\sin b, -\sin a, \cos b \cdot \cos a\right)}} \]
  5. Step-by-step derivation
    1. lift-/.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

      \[\leadsto \frac{\sin b \cdot r}{\cos b \cdot \cos a - \sin b \cdot \color{blue}{\sin a}} \]
    14. cos-sumN/A

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      \[\leadsto \frac{r}{\frac{\color{blue}{\cos b \cdot \cos a} - \sin a \cdot \sin b}{\sin b}} \]
    13. div-subN/A

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

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

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

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

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

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

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

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

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

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

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

Alternative 6: 76.1% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_0 := \frac{r}{\cos b} \cdot \sin b\\ \mathbf{if}\;b \leq -0.0275:\\ \;\;\;\;t\_0\\ \mathbf{elif}\;b \leq 0.045:\\ \;\;\;\;\frac{\mathsf{fma}\left(\mathsf{fma}\left(0.008333333333333333, b \cdot b, -0.16666666666666666\right) \cdot r, b \cdot b, 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 -0.0275)
     t_0
     (if (<= b 0.045)
       (/
        (*
         (fma
          (* (fma 0.008333333333333333 (* b b) -0.16666666666666666) r)
          (* b b)
          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 <= -0.0275) {
		tmp = t_0;
	} else if (b <= 0.045) {
		tmp = (fma((fma(0.008333333333333333, (b * b), -0.16666666666666666) * r), (b * b), 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 <= -0.0275)
		tmp = t_0;
	elseif (b <= 0.045)
		tmp = Float64(Float64(fma(Float64(fma(0.008333333333333333, Float64(b * b), -0.16666666666666666) * r), Float64(b * b), 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, -0.0275], t$95$0, If[LessEqual[b, 0.045], N[(N[(N[(N[(N[(0.008333333333333333 * N[(b * b), $MachinePrecision] + -0.16666666666666666), $MachinePrecision] * r), $MachinePrecision] * N[(b * b), $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 -0.0275:\\
\;\;\;\;t\_0\\

\mathbf{elif}\;b \leq 0.045:\\
\;\;\;\;\frac{\mathsf{fma}\left(\mathsf{fma}\left(0.008333333333333333, b \cdot b, -0.16666666666666666\right) \cdot r, b \cdot b, 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 < -0.0275000000000000001 or 0.044999999999999998 < b

    1. Initial program 55.8%

      \[\frac{r \cdot \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.f6455.6

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

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

    if -0.0275000000000000001 < b < 0.044999999999999998

    1. Initial program 99.0%

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

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

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

        \[\leadsto \frac{\color{blue}{\left(r + {b}^{2} \cdot \left(\frac{-1}{6} \cdot r + \frac{1}{120} \cdot \left({b}^{2} \cdot r\right)\right)\right) \cdot b}}{\cos \left(a + b\right)} \]
    5. Applied rewrites99.0%

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

Alternative 7: 76.2% accurate, 1.0× speedup?

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

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

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

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

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

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

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

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

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

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

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

Alternative 8: 53.1% accurate, 1.5× speedup?

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

\\
\begin{array}{l}
\mathbf{if}\;b \leq 5 \cdot 10^{+27}:\\
\;\;\;\;\frac{r}{\frac{\mathsf{fma}\left(b \cdot b, 0.16666666666666666, 1\right)}{b} \cdot \cos \left(a + b\right)}\\

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


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if b < 4.99999999999999979e27

    1. Initial program 86.6%

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

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

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

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

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

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

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

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

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

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

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

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

      \[\leadsto \frac{r \cdot \sin b}{\color{blue}{\mathsf{fma}\left(\sin b, -\sin a, \cos b \cdot \cos a\right)}} \]
    5. Step-by-step derivation
      1. lift-/.f64N/A

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

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

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

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

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

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

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

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

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

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

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

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

        \[\leadsto \frac{\sin b \cdot r}{\cos b \cdot \cos a - \sin b \cdot \color{blue}{\sin a}} \]
      14. cos-sumN/A

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

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

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

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

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

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

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

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

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

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

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

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

        \[\leadsto \frac{r}{\frac{\mathsf{fma}\left(\color{blue}{b \cdot b}, 0.16666666666666666, 1\right)}{b} \cdot \cos \left(a + b\right)} \]
    9. Applied rewrites71.0%

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

    if 4.99999999999999979e27 < b

    1. Initial program 54.3%

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      \[\leadsto \frac{r \cdot \sin b}{1} \]
    9. Step-by-step derivation
      1. Applied rewrites12.1%

        \[\leadsto \frac{r \cdot \sin b}{1} \]
    10. Recombined 2 regimes into one program.
    11. Final simplification57.9%

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

    Alternative 9: 52.7% accurate, 1.8× speedup?

    \[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;b \leq 1.12 \cdot 10^{+28}:\\ \;\;\;\;\frac{b \cdot r}{\cos a}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sin b \cdot r}{1}\\ \end{array} \end{array} \]
    (FPCore (r a b)
     :precision binary64
     (if (<= b 1.12e+28) (/ (* b r) (cos a)) (/ (* (sin b) r) 1.0)))
    double code(double r, double a, double b) {
    	double tmp;
    	if (b <= 1.12e+28) {
    		tmp = (b * r) / cos(a);
    	} else {
    		tmp = (sin(b) * r) / 1.0;
    	}
    	return tmp;
    }
    
    real(8) function code(r, a, b)
        real(8), intent (in) :: r
        real(8), intent (in) :: a
        real(8), intent (in) :: b
        real(8) :: tmp
        if (b <= 1.12d+28) then
            tmp = (b * r) / cos(a)
        else
            tmp = (sin(b) * r) / 1.0d0
        end if
        code = tmp
    end function
    
    public static double code(double r, double a, double b) {
    	double tmp;
    	if (b <= 1.12e+28) {
    		tmp = (b * r) / Math.cos(a);
    	} else {
    		tmp = (Math.sin(b) * r) / 1.0;
    	}
    	return tmp;
    }
    
    def code(r, a, b):
    	tmp = 0
    	if b <= 1.12e+28:
    		tmp = (b * r) / math.cos(a)
    	else:
    		tmp = (math.sin(b) * r) / 1.0
    	return tmp
    
    function code(r, a, b)
    	tmp = 0.0
    	if (b <= 1.12e+28)
    		tmp = Float64(Float64(b * r) / cos(a));
    	else
    		tmp = Float64(Float64(sin(b) * r) / 1.0);
    	end
    	return tmp
    end
    
    function tmp_2 = code(r, a, b)
    	tmp = 0.0;
    	if (b <= 1.12e+28)
    		tmp = (b * r) / cos(a);
    	else
    		tmp = (sin(b) * r) / 1.0;
    	end
    	tmp_2 = tmp;
    end
    
    code[r_, a_, b_] := If[LessEqual[b, 1.12e+28], N[(N[(b * r), $MachinePrecision] / N[Cos[a], $MachinePrecision]), $MachinePrecision], N[(N[(N[Sin[b], $MachinePrecision] * r), $MachinePrecision] / 1.0), $MachinePrecision]]
    
    \begin{array}{l}
    
    \\
    \begin{array}{l}
    \mathbf{if}\;b \leq 1.12 \cdot 10^{+28}:\\
    \;\;\;\;\frac{b \cdot r}{\cos a}\\
    
    \mathbf{else}:\\
    \;\;\;\;\frac{\sin b \cdot r}{1}\\
    
    
    \end{array}
    \end{array}
    
    Derivation
    1. Split input into 2 regimes
    2. if b < 1.12e28

      1. Initial program 86.6%

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

        \[\leadsto \color{blue}{\frac{b \cdot r}{\cos a}} \]
      4. 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.f6471.0

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

        \[\leadsto \color{blue}{\frac{r}{\cos a} \cdot b} \]
      6. Step-by-step derivation
        1. Applied rewrites71.0%

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

        if 1.12e28 < b

        1. Initial program 54.3%

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          \[\leadsto \frac{r \cdot \sin b}{1} \]
        9. Step-by-step derivation
          1. Applied rewrites12.1%

            \[\leadsto \frac{r \cdot \sin b}{1} \]
        10. Recombined 2 regimes into one program.
        11. Final simplification57.9%

          \[\leadsto \begin{array}{l} \mathbf{if}\;b \leq 1.12 \cdot 10^{+28}:\\ \;\;\;\;\frac{b \cdot r}{\cos a}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sin b \cdot r}{1}\\ \end{array} \]
        12. Add Preprocessing

        Alternative 10: 50.8% accurate, 1.9× speedup?

        \[\begin{array}{l} \\ \frac{b \cdot r}{\cos a} \end{array} \]
        (FPCore (r a b) :precision binary64 (/ (* b r) (cos a)))
        double code(double r, double a, double b) {
        	return (b * r) / cos(a);
        }
        
        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)
        end function
        
        public static double code(double r, double a, double b) {
        	return (b * r) / Math.cos(a);
        }
        
        def code(r, a, b):
        	return (b * r) / math.cos(a)
        
        function code(r, a, b)
        	return Float64(Float64(b * r) / cos(a))
        end
        
        function tmp = code(r, a, b)
        	tmp = (b * r) / cos(a);
        end
        
        code[r_, a_, b_] := N[(N[(b * r), $MachinePrecision] / N[Cos[a], $MachinePrecision]), $MachinePrecision]
        
        \begin{array}{l}
        
        \\
        \frac{b \cdot r}{\cos a}
        \end{array}
        
        Derivation
        1. Initial program 79.4%

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

          \[\leadsto \color{blue}{\frac{b \cdot r}{\cos a}} \]
        4. 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.f6455.9

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

          \[\leadsto \color{blue}{\frac{r}{\cos a} \cdot b} \]
        6. Step-by-step derivation
          1. Applied rewrites55.9%

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

          Alternative 11: 50.8% 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 79.4%

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

            \[\leadsto \color{blue}{\frac{b \cdot r}{\cos a}} \]
          4. 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.f6455.9

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

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

          Alternative 12: 50.8% accurate, 1.9× speedup?

          \[\begin{array}{l} \\ \frac{b}{\cos a} \cdot r \end{array} \]
          (FPCore (r a b) :precision binary64 (* (/ b (cos a)) r))
          double code(double r, double a, double b) {
          	return (b / cos(a)) * 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 / cos(a)) * r
          end function
          
          public static double code(double r, double a, double b) {
          	return (b / Math.cos(a)) * r;
          }
          
          def code(r, a, b):
          	return (b / math.cos(a)) * r
          
          function code(r, a, b)
          	return Float64(Float64(b / cos(a)) * r)
          end
          
          function tmp = code(r, a, b)
          	tmp = (b / cos(a)) * r;
          end
          
          code[r_, a_, b_] := N[(N[(b / N[Cos[a], $MachinePrecision]), $MachinePrecision] * r), $MachinePrecision]
          
          \begin{array}{l}
          
          \\
          \frac{b}{\cos a} \cdot r
          \end{array}
          
          Derivation
          1. Initial program 79.4%

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

            \[\leadsto \color{blue}{\frac{b \cdot r}{\cos a}} \]
          4. 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.f6455.9

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

            \[\leadsto \color{blue}{\frac{r}{\cos a} \cdot b} \]
          6. Step-by-step derivation
            1. Applied rewrites55.9%

              \[\leadsto r \cdot \color{blue}{\frac{b}{\cos a}} \]
            2. Final simplification55.9%

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

            Alternative 13: 33.9% accurate, 36.7× speedup?

            \[\begin{array}{l} \\ b \cdot r \end{array} \]
            (FPCore (r a b) :precision binary64 (* b r))
            double code(double r, double a, double b) {
            	return 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 = b * r
            end function
            
            public static double code(double r, double a, double b) {
            	return b * r;
            }
            
            def code(r, a, b):
            	return b * r
            
            function code(r, a, b)
            	return Float64(b * r)
            end
            
            function tmp = code(r, a, b)
            	tmp = b * r;
            end
            
            code[r_, a_, b_] := N[(b * r), $MachinePrecision]
            
            \begin{array}{l}
            
            \\
            b \cdot r
            \end{array}
            
            Derivation
            1. Initial program 79.4%

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

              \[\leadsto \color{blue}{\frac{b \cdot r}{\cos a}} \]
            4. 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.f6455.9

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

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

              \[\leadsto b \cdot \color{blue}{r} \]
            7. Step-by-step derivation
              1. Applied rewrites35.3%

                \[\leadsto b \cdot \color{blue}{r} \]
              2. Add Preprocessing

              Reproduce

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