tan-example (used to crash)

Percentage Accurate: 79.2% → 99.7%
Time: 4.6s
Alternatives: 5
Speedup: 0.9×

Specification

?
\[\left(\left(\left(x = 0 \lor \frac{2942071}{5000000} \leq x \land x \leq \frac{5055909}{10000}\right) \land \left(-179665800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \leq y \land y \leq \frac{-1885117}{2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000} \lor \frac{642469}{500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000} \leq y \land y \leq 175122400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\right)\right) \land \left(-177670700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \leq z \land z \leq \frac{-2149949}{2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000} \lor \frac{658629}{20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000} \leq z \land z \leq 172515400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\right)\right) \land \left(-179665800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \leq a \land a \leq \frac{-1885117}{2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000} \lor \frac{642469}{500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000} \leq a \land a \leq 175122400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\right)\]
\[x + \left(\tan \left(y + z\right) - \tan a\right) \]
(FPCore (x y z a)
  :precision binary64
  (+ x (- (tan (+ y z)) (tan a))))
double code(double x, double y, double z, double a) {
	return x + (tan((y + z)) - tan(a));
}
real(8) function code(x, y, z, a)
use fmin_fmax_functions
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8), intent (in) :: a
    code = x + (tan((y + z)) - tan(a))
end function
public static double code(double x, double y, double z, double a) {
	return x + (Math.tan((y + z)) - Math.tan(a));
}
def code(x, y, z, a):
	return x + (math.tan((y + z)) - math.tan(a))
function code(x, y, z, a)
	return Float64(x + Float64(tan(Float64(y + z)) - tan(a)))
end
function tmp = code(x, y, z, a)
	tmp = x + (tan((y + z)) - tan(a));
end
code[x_, y_, z_, a_] := N[(x + N[(N[Tan[N[(y + z), $MachinePrecision]], $MachinePrecision] - N[Tan[a], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
x + \left(\tan \left(y + z\right) - \tan a\right)

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

\[x + \left(\tan \left(y + z\right) - \tan a\right) \]
(FPCore (x y z a)
  :precision binary64
  (+ x (- (tan (+ y z)) (tan a))))
double code(double x, double y, double z, double a) {
	return x + (tan((y + z)) - tan(a));
}
real(8) function code(x, y, z, a)
use fmin_fmax_functions
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8), intent (in) :: a
    code = x + (tan((y + z)) - tan(a))
end function
public static double code(double x, double y, double z, double a) {
	return x + (Math.tan((y + z)) - Math.tan(a));
}
def code(x, y, z, a):
	return x + (math.tan((y + z)) - math.tan(a))
function code(x, y, z, a)
	return Float64(x + Float64(tan(Float64(y + z)) - tan(a)))
end
function tmp = code(x, y, z, a)
	tmp = x + (tan((y + z)) - tan(a));
end
code[x_, y_, z_, a_] := N[(x + N[(N[Tan[N[(y + z), $MachinePrecision]], $MachinePrecision] - N[Tan[a], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
x + \left(\tan \left(y + z\right) - \tan a\right)

Alternative 1: 99.7% accurate, 0.2× speedup?

\[\begin{array}{l} t_0 := \cos y \cdot \cos z - \sin z \cdot \sin y\\ x + \left(\left(\frac{\sin z \cdot \cos y}{t\_0} + \frac{\cos z \cdot \sin y}{t\_0}\right) - \tan a\right) \end{array} \]
(FPCore (x y z a)
  :precision binary64
  (let* ((t_0 (- (* (cos y) (cos z)) (* (sin z) (sin y)))))
  (+
   x
   (-
    (+ (/ (* (sin z) (cos y)) t_0) (/ (* (cos z) (sin y)) t_0))
    (tan a)))))
double code(double x, double y, double z, double a) {
	double t_0 = (cos(y) * cos(z)) - (sin(z) * sin(y));
	return x + ((((sin(z) * cos(y)) / t_0) + ((cos(z) * sin(y)) / t_0)) - tan(a));
}
real(8) function code(x, y, z, a)
use fmin_fmax_functions
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8), intent (in) :: a
    real(8) :: t_0
    t_0 = (cos(y) * cos(z)) - (sin(z) * sin(y))
    code = x + ((((sin(z) * cos(y)) / t_0) + ((cos(z) * sin(y)) / t_0)) - tan(a))
end function
public static double code(double x, double y, double z, double a) {
	double t_0 = (Math.cos(y) * Math.cos(z)) - (Math.sin(z) * Math.sin(y));
	return x + ((((Math.sin(z) * Math.cos(y)) / t_0) + ((Math.cos(z) * Math.sin(y)) / t_0)) - Math.tan(a));
}
def code(x, y, z, a):
	t_0 = (math.cos(y) * math.cos(z)) - (math.sin(z) * math.sin(y))
	return x + ((((math.sin(z) * math.cos(y)) / t_0) + ((math.cos(z) * math.sin(y)) / t_0)) - math.tan(a))
function code(x, y, z, a)
	t_0 = Float64(Float64(cos(y) * cos(z)) - Float64(sin(z) * sin(y)))
	return Float64(x + Float64(Float64(Float64(Float64(sin(z) * cos(y)) / t_0) + Float64(Float64(cos(z) * sin(y)) / t_0)) - tan(a)))
end
function tmp = code(x, y, z, a)
	t_0 = (cos(y) * cos(z)) - (sin(z) * sin(y));
	tmp = x + ((((sin(z) * cos(y)) / t_0) + ((cos(z) * sin(y)) / t_0)) - tan(a));
end
code[x_, y_, z_, a_] := Block[{t$95$0 = N[(N[(N[Cos[y], $MachinePrecision] * N[Cos[z], $MachinePrecision]), $MachinePrecision] - N[(N[Sin[z], $MachinePrecision] * N[Sin[y], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(x + N[(N[(N[(N[(N[Sin[z], $MachinePrecision] * N[Cos[y], $MachinePrecision]), $MachinePrecision] / t$95$0), $MachinePrecision] + N[(N[(N[Cos[z], $MachinePrecision] * N[Sin[y], $MachinePrecision]), $MachinePrecision] / t$95$0), $MachinePrecision]), $MachinePrecision] - N[Tan[a], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
t_0 := \cos y \cdot \cos z - \sin z \cdot \sin y\\
x + \left(\left(\frac{\sin z \cdot \cos y}{t\_0} + \frac{\cos z \cdot \sin y}{t\_0}\right) - \tan a\right)
\end{array}
Derivation
  1. Initial program 79.2%

    \[x + \left(\tan \left(y + z\right) - \tan a\right) \]
  2. Step-by-step derivation
    1. lift-tan.f64N/A

      \[\leadsto x + \left(\color{blue}{\tan \left(y + z\right)} - \tan a\right) \]
    2. tan-quotN/A

      \[\leadsto x + \left(\color{blue}{\frac{\sin \left(y + z\right)}{\cos \left(y + z\right)}} - \tan a\right) \]
    3. lift-+.f64N/A

      \[\leadsto x + \left(\frac{\sin \color{blue}{\left(y + z\right)}}{\cos \left(y + z\right)} - \tan a\right) \]
    4. +-commutativeN/A

      \[\leadsto x + \left(\frac{\sin \color{blue}{\left(z + y\right)}}{\cos \left(y + z\right)} - \tan a\right) \]
    5. sin-sumN/A

      \[\leadsto x + \left(\frac{\color{blue}{\sin z \cdot \cos y + \cos z \cdot \sin y}}{\cos \left(y + z\right)} - \tan a\right) \]
    6. div-addN/A

      \[\leadsto x + \left(\color{blue}{\left(\frac{\sin z \cdot \cos y}{\cos \left(y + z\right)} + \frac{\cos z \cdot \sin y}{\cos \left(y + z\right)}\right)} - \tan a\right) \]
    7. *-commutativeN/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos \left(y + z\right)} + \frac{\color{blue}{\sin y \cdot \cos z}}{\cos \left(y + z\right)}\right) - \tan a\right) \]
    8. lower-+.f64N/A

      \[\leadsto x + \left(\color{blue}{\left(\frac{\sin z \cdot \cos y}{\cos \left(y + z\right)} + \frac{\sin y \cdot \cos z}{\cos \left(y + z\right)}\right)} - \tan a\right) \]
    9. add-sound-/N/A

      \[\leadsto x + \left(\left(\color{blue}{\frac{\sin z \cdot \cos y}{\cos \left(y + z\right)}} + \frac{\sin y \cdot \cos z}{\cos \left(y + z\right)}\right) - \tan a\right) \]
    10. lower-/.f64N/A

      \[\leadsto x + \left(\left(\color{blue}{\frac{\sin z \cdot \cos y}{\cos \left(y + z\right)}} + \frac{\sin y \cdot \cos z}{\cos \left(y + z\right)}\right) - \tan a\right) \]
    11. lower-*.f64N/A

      \[\leadsto x + \left(\left(\frac{\color{blue}{\sin z \cdot \cos y}}{\cos \left(y + z\right)} + \frac{\sin y \cdot \cos z}{\cos \left(y + z\right)}\right) - \tan a\right) \]
    12. lower-sin.f64N/A

      \[\leadsto x + \left(\left(\frac{\color{blue}{\sin z} \cdot \cos y}{\cos \left(y + z\right)} + \frac{\sin y \cdot \cos z}{\cos \left(y + z\right)}\right) - \tan a\right) \]
    13. lower-cos.f64N/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \color{blue}{\cos y}}{\cos \left(y + z\right)} + \frac{\sin y \cdot \cos z}{\cos \left(y + z\right)}\right) - \tan a\right) \]
    14. lower-cos.f64N/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\color{blue}{\cos \left(y + z\right)}} + \frac{\sin y \cdot \cos z}{\cos \left(y + z\right)}\right) - \tan a\right) \]
    15. lift-+.f64N/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos \color{blue}{\left(y + z\right)}} + \frac{\sin y \cdot \cos z}{\cos \left(y + z\right)}\right) - \tan a\right) \]
    16. +-commutativeN/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos \color{blue}{\left(z + y\right)}} + \frac{\sin y \cdot \cos z}{\cos \left(y + z\right)}\right) - \tan a\right) \]
    17. lower-+.f64N/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos \color{blue}{\left(z + y\right)}} + \frac{\sin y \cdot \cos z}{\cos \left(y + z\right)}\right) - \tan a\right) \]
    18. add-sound-/N/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos \left(z + y\right)} + \color{blue}{\frac{\sin y \cdot \cos z}{\cos \left(y + z\right)}}\right) - \tan a\right) \]
    19. lower-/.f64N/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos \left(z + y\right)} + \color{blue}{\frac{\sin y \cdot \cos z}{\cos \left(y + z\right)}}\right) - \tan a\right) \]
  3. Applied rewrites79.7%

    \[\leadsto x + \left(\color{blue}{\left(\frac{\sin z \cdot \cos y}{\cos \left(z + y\right)} + \frac{\cos z \cdot \sin y}{\cos \left(z + y\right)}\right)} - \tan a\right) \]
  4. Step-by-step derivation
    1. lift-cos.f64N/A

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

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

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

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\color{blue}{\cos z \cdot \cos y - \sin z \cdot \sin y}} + \frac{\cos z \cdot \sin y}{\cos \left(z + y\right)}\right) - \tan a\right) \]
    5. lift-cos.f64N/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\color{blue}{\cos z} \cdot \cos y - \sin z \cdot \sin y} + \frac{\cos z \cdot \sin y}{\cos \left(z + y\right)}\right) - \tan a\right) \]
    6. lift-cos.f64N/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos z \cdot \color{blue}{\cos y} - \sin z \cdot \sin y} + \frac{\cos z \cdot \sin y}{\cos \left(z + y\right)}\right) - \tan a\right) \]
    7. *-commutativeN/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\color{blue}{\cos y \cdot \cos z} - \sin z \cdot \sin y} + \frac{\cos z \cdot \sin y}{\cos \left(z + y\right)}\right) - \tan a\right) \]
    8. lower-*.f64N/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\color{blue}{\cos y \cdot \cos z} - \sin z \cdot \sin y} + \frac{\cos z \cdot \sin y}{\cos \left(z + y\right)}\right) - \tan a\right) \]
    9. lift-sin.f64N/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos y \cdot \cos z - \color{blue}{\sin z} \cdot \sin y} + \frac{\cos z \cdot \sin y}{\cos \left(z + y\right)}\right) - \tan a\right) \]
    10. lift-sin.f64N/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos y \cdot \cos z - \sin z \cdot \color{blue}{\sin y}} + \frac{\cos z \cdot \sin y}{\cos \left(z + y\right)}\right) - \tan a\right) \]
    11. lower-*.f6480.5%

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos y \cdot \cos z - \color{blue}{\sin z \cdot \sin y}} + \frac{\cos z \cdot \sin y}{\cos \left(z + y\right)}\right) - \tan a\right) \]
  5. Applied rewrites80.5%

    \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\color{blue}{\cos y \cdot \cos z - \sin z \cdot \sin y}} + \frac{\cos z \cdot \sin y}{\cos \left(z + y\right)}\right) - \tan a\right) \]
  6. Step-by-step derivation
    1. lift-cos.f64N/A

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

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

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

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos y \cdot \cos z - \sin z \cdot \sin y} + \frac{\cos z \cdot \sin y}{\color{blue}{\cos z \cdot \cos y - \sin z \cdot \sin y}}\right) - \tan a\right) \]
    5. lift-cos.f64N/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos y \cdot \cos z - \sin z \cdot \sin y} + \frac{\cos z \cdot \sin y}{\color{blue}{\cos z} \cdot \cos y - \sin z \cdot \sin y}\right) - \tan a\right) \]
    6. lift-cos.f64N/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos y \cdot \cos z - \sin z \cdot \sin y} + \frac{\cos z \cdot \sin y}{\cos z \cdot \color{blue}{\cos y} - \sin z \cdot \sin y}\right) - \tan a\right) \]
    7. *-commutativeN/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos y \cdot \cos z - \sin z \cdot \sin y} + \frac{\cos z \cdot \sin y}{\color{blue}{\cos y \cdot \cos z} - \sin z \cdot \sin y}\right) - \tan a\right) \]
    8. lower-*.f64N/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos y \cdot \cos z - \sin z \cdot \sin y} + \frac{\cos z \cdot \sin y}{\color{blue}{\cos y \cdot \cos z} - \sin z \cdot \sin y}\right) - \tan a\right) \]
    9. lift-sin.f64N/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos y \cdot \cos z - \sin z \cdot \sin y} + \frac{\cos z \cdot \sin y}{\cos y \cdot \cos z - \color{blue}{\sin z} \cdot \sin y}\right) - \tan a\right) \]
    10. lift-sin.f64N/A

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos y \cdot \cos z - \sin z \cdot \sin y} + \frac{\cos z \cdot \sin y}{\cos y \cdot \cos z - \sin z \cdot \color{blue}{\sin y}}\right) - \tan a\right) \]
    11. lower-*.f6499.7%

      \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos y \cdot \cos z - \sin z \cdot \sin y} + \frac{\cos z \cdot \sin y}{\cos y \cdot \cos z - \color{blue}{\sin z \cdot \sin y}}\right) - \tan a\right) \]
  7. Applied rewrites99.7%

    \[\leadsto x + \left(\left(\frac{\sin z \cdot \cos y}{\cos y \cdot \cos z - \sin z \cdot \sin y} + \frac{\cos z \cdot \sin y}{\color{blue}{\cos y \cdot \cos z - \sin z \cdot \sin y}}\right) - \tan a\right) \]
  8. Add Preprocessing

Alternative 2: 99.6% accurate, 0.2× speedup?

\[\left(\frac{\left(-\cos z\right) \cdot \sin y + \left(-\cos y\right) \cdot \sin z}{\sin z \cdot \sin y - \cos y \cdot \cos z} + x\right) - \tan a \]
(FPCore (x y z a)
  :precision binary64
  (-
 (+
  (/
   (+ (* (- (cos z)) (sin y)) (* (- (cos y)) (sin z)))
   (- (* (sin z) (sin y)) (* (cos y) (cos z))))
  x)
 (tan a)))
double code(double x, double y, double z, double a) {
	return ((((-cos(z) * sin(y)) + (-cos(y) * sin(z))) / ((sin(z) * sin(y)) - (cos(y) * cos(z)))) + x) - tan(a);
}
real(8) function code(x, y, z, a)
use fmin_fmax_functions
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8), intent (in) :: a
    code = ((((-cos(z) * sin(y)) + (-cos(y) * sin(z))) / ((sin(z) * sin(y)) - (cos(y) * cos(z)))) + x) - tan(a)
end function
public static double code(double x, double y, double z, double a) {
	return ((((-Math.cos(z) * Math.sin(y)) + (-Math.cos(y) * Math.sin(z))) / ((Math.sin(z) * Math.sin(y)) - (Math.cos(y) * Math.cos(z)))) + x) - Math.tan(a);
}
def code(x, y, z, a):
	return ((((-math.cos(z) * math.sin(y)) + (-math.cos(y) * math.sin(z))) / ((math.sin(z) * math.sin(y)) - (math.cos(y) * math.cos(z)))) + x) - math.tan(a)
function code(x, y, z, a)
	return Float64(Float64(Float64(Float64(Float64(Float64(-cos(z)) * sin(y)) + Float64(Float64(-cos(y)) * sin(z))) / Float64(Float64(sin(z) * sin(y)) - Float64(cos(y) * cos(z)))) + x) - tan(a))
end
function tmp = code(x, y, z, a)
	tmp = ((((-cos(z) * sin(y)) + (-cos(y) * sin(z))) / ((sin(z) * sin(y)) - (cos(y) * cos(z)))) + x) - tan(a);
end
code[x_, y_, z_, a_] := N[(N[(N[(N[(N[((-N[Cos[z], $MachinePrecision]) * N[Sin[y], $MachinePrecision]), $MachinePrecision] + N[((-N[Cos[y], $MachinePrecision]) * N[Sin[z], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(N[(N[Sin[z], $MachinePrecision] * N[Sin[y], $MachinePrecision]), $MachinePrecision] - N[(N[Cos[y], $MachinePrecision] * N[Cos[z], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + x), $MachinePrecision] - N[Tan[a], $MachinePrecision]), $MachinePrecision]
\left(\frac{\left(-\cos z\right) \cdot \sin y + \left(-\cos y\right) \cdot \sin z}{\sin z \cdot \sin y - \cos y \cdot \cos z} + x\right) - \tan a
Derivation
  1. Initial program 79.2%

    \[x + \left(\tan \left(y + z\right) - \tan a\right) \]
  2. Step-by-step derivation
    1. lift-+.f64N/A

      \[\leadsto \color{blue}{x + \left(\tan \left(y + z\right) - \tan a\right)} \]
    2. add-flipN/A

      \[\leadsto \color{blue}{x - \left(\mathsf{neg}\left(\left(\tan \left(y + z\right) - \tan a\right)\right)\right)} \]
    3. lift--.f64N/A

      \[\leadsto x - \left(\mathsf{neg}\left(\color{blue}{\left(\tan \left(y + z\right) - \tan a\right)}\right)\right) \]
    4. sub-negate-revN/A

      \[\leadsto x - \color{blue}{\left(\tan a - \tan \left(y + z\right)\right)} \]
    5. lift-tan.f64N/A

      \[\leadsto x - \left(\tan a - \color{blue}{\tan \left(y + z\right)}\right) \]
    6. tan-quotN/A

      \[\leadsto x - \left(\tan a - \color{blue}{\frac{\sin \left(y + z\right)}{\cos \left(y + z\right)}}\right) \]
    7. sub-to-fractionN/A

      \[\leadsto x - \color{blue}{\frac{\tan a \cdot \cos \left(y + z\right) - \sin \left(y + z\right)}{\cos \left(y + z\right)}} \]
    8. sub-to-fractionN/A

      \[\leadsto \color{blue}{\frac{x \cdot \cos \left(y + z\right) - \left(\tan a \cdot \cos \left(y + z\right) - \sin \left(y + z\right)\right)}{\cos \left(y + z\right)}} \]
    9. add-sound-/N/A

      \[\leadsto \color{blue}{\frac{x \cdot \cos \left(y + z\right) - \left(\tan a \cdot \cos \left(y + z\right) - \sin \left(y + z\right)\right)}{\cos \left(y + z\right)}} \]
    10. lower-/.f64N/A

      \[\leadsto \color{blue}{\frac{x \cdot \cos \left(y + z\right) - \left(\tan a \cdot \cos \left(y + z\right) - \sin \left(y + z\right)\right)}{\cos \left(y + z\right)}} \]
  3. Applied rewrites78.9%

    \[\leadsto \color{blue}{\frac{\cos \left(z + y\right) \cdot x - \left(\cos \left(z + y\right) \cdot \tan a - \sin \left(z + y\right)\right)}{\cos \left(z + y\right)}} \]
  4. Applied rewrites79.1%

    \[\leadsto \color{blue}{\left(\tan \left(z + y\right) + x\right) - \tan a} \]
  5. Step-by-step derivation
    1. lift-tan.f64N/A

      \[\leadsto \left(\color{blue}{\tan \left(z + y\right)} + x\right) - \tan a \]
    2. quot-tanN/A

      \[\leadsto \left(\color{blue}{\frac{\sin \left(z + y\right)}{\cos \left(z + y\right)}} + x\right) - \tan a \]
    3. lift-sin.f64N/A

      \[\leadsto \left(\frac{\color{blue}{\sin \left(z + y\right)}}{\cos \left(z + y\right)} + x\right) - \tan a \]
    4. lift-cos.f64N/A

      \[\leadsto \left(\frac{\sin \left(z + y\right)}{\color{blue}{\cos \left(z + y\right)}} + x\right) - \tan a \]
    5. mult-flipN/A

      \[\leadsto \left(\color{blue}{\sin \left(z + y\right) \cdot \frac{1}{\cos \left(z + y\right)}} + x\right) - \tan a \]
    6. *-commutativeN/A

      \[\leadsto \left(\color{blue}{\frac{1}{\cos \left(z + y\right)} \cdot \sin \left(z + y\right)} + x\right) - \tan a \]
    7. lift-sin.f64N/A

      \[\leadsto \left(\frac{1}{\cos \left(z + y\right)} \cdot \color{blue}{\sin \left(z + y\right)} + x\right) - \tan a \]
    8. lift-+.f64N/A

      \[\leadsto \left(\frac{1}{\cos \left(z + y\right)} \cdot \sin \color{blue}{\left(z + y\right)} + x\right) - \tan a \]
    9. sin-sumN/A

      \[\leadsto \left(\frac{1}{\cos \left(z + y\right)} \cdot \color{blue}{\left(\sin z \cdot \cos y + \cos z \cdot \sin y\right)} + x\right) - \tan a \]
    10. lift-sin.f64N/A

      \[\leadsto \left(\frac{1}{\cos \left(z + y\right)} \cdot \left(\color{blue}{\sin z} \cdot \cos y + \cos z \cdot \sin y\right) + x\right) - \tan a \]
    11. lift-cos.f64N/A

      \[\leadsto \left(\frac{1}{\cos \left(z + y\right)} \cdot \left(\sin z \cdot \color{blue}{\cos y} + \cos z \cdot \sin y\right) + x\right) - \tan a \]
    12. lift-*.f64N/A

      \[\leadsto \left(\frac{1}{\cos \left(z + y\right)} \cdot \left(\color{blue}{\sin z \cdot \cos y} + \cos z \cdot \sin y\right) + x\right) - \tan a \]
    13. lift-cos.f64N/A

      \[\leadsto \left(\frac{1}{\cos \left(z + y\right)} \cdot \left(\sin z \cdot \cos y + \color{blue}{\cos z} \cdot \sin y\right) + x\right) - \tan a \]
    14. lift-sin.f64N/A

      \[\leadsto \left(\frac{1}{\cos \left(z + y\right)} \cdot \left(\sin z \cdot \cos y + \cos z \cdot \color{blue}{\sin y}\right) + x\right) - \tan a \]
    15. lift-*.f64N/A

      \[\leadsto \left(\frac{1}{\cos \left(z + y\right)} \cdot \left(\sin z \cdot \cos y + \color{blue}{\cos z \cdot \sin y}\right) + x\right) - \tan a \]
    16. +-commutativeN/A

      \[\leadsto \left(\frac{1}{\cos \left(z + y\right)} \cdot \color{blue}{\left(\cos z \cdot \sin y + \sin z \cdot \cos y\right)} + x\right) - \tan a \]
    17. distribute-rgt-outN/A

      \[\leadsto \left(\color{blue}{\left(\left(\cos z \cdot \sin y\right) \cdot \frac{1}{\cos \left(z + y\right)} + \left(\sin z \cdot \cos y\right) \cdot \frac{1}{\cos \left(z + y\right)}\right)} + x\right) - \tan a \]
    18. mult-flipN/A

      \[\leadsto \left(\left(\color{blue}{\frac{\cos z \cdot \sin y}{\cos \left(z + y\right)}} + \left(\sin z \cdot \cos y\right) \cdot \frac{1}{\cos \left(z + y\right)}\right) + x\right) - \tan a \]
    19. mult-flip-revN/A

      \[\leadsto \left(\left(\frac{\cos z \cdot \sin y}{\cos \left(z + y\right)} + \color{blue}{\frac{\sin z \cdot \cos y}{\cos \left(z + y\right)}}\right) + x\right) - \tan a \]
    20. frac-2neg-revN/A

      \[\leadsto \left(\left(\frac{\cos z \cdot \sin y}{\cos \left(z + y\right)} + \color{blue}{\frac{\mathsf{neg}\left(\sin z \cdot \cos y\right)}{\mathsf{neg}\left(\cos \left(z + y\right)\right)}}\right) + x\right) - \tan a \]
  6. Applied rewrites79.6%

    \[\leadsto \left(\color{blue}{\frac{\left(-\cos z\right) \cdot \sin y + \left(-\cos y\right) \cdot \sin z}{-\cos \left(z + y\right)}} + x\right) - \tan a \]
  7. Step-by-step derivation
    1. lift-neg.f64N/A

      \[\leadsto \left(\frac{\left(-\cos z\right) \cdot \sin y + \left(-\cos y\right) \cdot \sin z}{\color{blue}{\mathsf{neg}\left(\cos \left(z + y\right)\right)}} + x\right) - \tan a \]
    2. lift-cos.f64N/A

      \[\leadsto \left(\frac{\left(-\cos z\right) \cdot \sin y + \left(-\cos y\right) \cdot \sin z}{\mathsf{neg}\left(\color{blue}{\cos \left(z + y\right)}\right)} + x\right) - \tan a \]
    3. lift-+.f64N/A

      \[\leadsto \left(\frac{\left(-\cos z\right) \cdot \sin y + \left(-\cos y\right) \cdot \sin z}{\mathsf{neg}\left(\cos \color{blue}{\left(z + y\right)}\right)} + x\right) - \tan a \]
    4. cos-sumN/A

      \[\leadsto \left(\frac{\left(-\cos z\right) \cdot \sin y + \left(-\cos y\right) \cdot \sin z}{\mathsf{neg}\left(\color{blue}{\left(\cos z \cdot \cos y - \sin z \cdot \sin y\right)}\right)} + x\right) - \tan a \]
    5. lift-cos.f64N/A

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

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

      \[\leadsto \left(\frac{\left(-\cos z\right) \cdot \sin y + \left(-\cos y\right) \cdot \sin z}{\mathsf{neg}\left(\left(\color{blue}{\cos y \cdot \cos z} - \sin z \cdot \sin y\right)\right)} + x\right) - \tan a \]
    8. lift-*.f64N/A

      \[\leadsto \left(\frac{\left(-\cos z\right) \cdot \sin y + \left(-\cos y\right) \cdot \sin z}{\mathsf{neg}\left(\left(\color{blue}{\cos y \cdot \cos z} - \sin z \cdot \sin y\right)\right)} + x\right) - \tan a \]
    9. lift-sin.f64N/A

      \[\leadsto \left(\frac{\left(-\cos z\right) \cdot \sin y + \left(-\cos y\right) \cdot \sin z}{\mathsf{neg}\left(\left(\cos y \cdot \cos z - \color{blue}{\sin z} \cdot \sin y\right)\right)} + x\right) - \tan a \]
    10. lift-sin.f64N/A

      \[\leadsto \left(\frac{\left(-\cos z\right) \cdot \sin y + \left(-\cos y\right) \cdot \sin z}{\mathsf{neg}\left(\left(\cos y \cdot \cos z - \sin z \cdot \color{blue}{\sin y}\right)\right)} + x\right) - \tan a \]
    11. lift-*.f64N/A

      \[\leadsto \left(\frac{\left(-\cos z\right) \cdot \sin y + \left(-\cos y\right) \cdot \sin z}{\mathsf{neg}\left(\left(\cos y \cdot \cos z - \color{blue}{\sin z \cdot \sin y}\right)\right)} + x\right) - \tan a \]
    12. sub-negate-revN/A

      \[\leadsto \left(\frac{\left(-\cos z\right) \cdot \sin y + \left(-\cos y\right) \cdot \sin z}{\color{blue}{\sin z \cdot \sin y - \cos y \cdot \cos z}} + x\right) - \tan a \]
    13. lower--.f6499.6%

      \[\leadsto \left(\frac{\left(-\cos z\right) \cdot \sin y + \left(-\cos y\right) \cdot \sin z}{\color{blue}{\sin z \cdot \sin y - \cos y \cdot \cos z}} + x\right) - \tan a \]
  8. Applied rewrites99.6%

    \[\leadsto \left(\frac{\left(-\cos z\right) \cdot \sin y + \left(-\cos y\right) \cdot \sin z}{\color{blue}{\sin z \cdot \sin y - \cos y \cdot \cos z}} + x\right) - \tan a \]
  9. Add Preprocessing

Alternative 3: 79.8% accurate, 0.3× speedup?

\[x + \left(\frac{\sin \left(z + y\right)}{\cos y \cdot \cos z - \sin z \cdot \sin y} - \tan a\right) \]
(FPCore (x y z a)
  :precision binary64
  (+
 x
 (-
  (/ (sin (+ z y)) (- (* (cos y) (cos z)) (* (sin z) (sin y))))
  (tan a))))
double code(double x, double y, double z, double a) {
	return x + ((sin((z + y)) / ((cos(y) * cos(z)) - (sin(z) * sin(y)))) - tan(a));
}
real(8) function code(x, y, z, a)
use fmin_fmax_functions
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8), intent (in) :: a
    code = x + ((sin((z + y)) / ((cos(y) * cos(z)) - (sin(z) * sin(y)))) - tan(a))
end function
public static double code(double x, double y, double z, double a) {
	return x + ((Math.sin((z + y)) / ((Math.cos(y) * Math.cos(z)) - (Math.sin(z) * Math.sin(y)))) - Math.tan(a));
}
def code(x, y, z, a):
	return x + ((math.sin((z + y)) / ((math.cos(y) * math.cos(z)) - (math.sin(z) * math.sin(y)))) - math.tan(a))
function code(x, y, z, a)
	return Float64(x + Float64(Float64(sin(Float64(z + y)) / Float64(Float64(cos(y) * cos(z)) - Float64(sin(z) * sin(y)))) - tan(a)))
end
function tmp = code(x, y, z, a)
	tmp = x + ((sin((z + y)) / ((cos(y) * cos(z)) - (sin(z) * sin(y)))) - tan(a));
end
code[x_, y_, z_, a_] := N[(x + N[(N[(N[Sin[N[(z + y), $MachinePrecision]], $MachinePrecision] / N[(N[(N[Cos[y], $MachinePrecision] * N[Cos[z], $MachinePrecision]), $MachinePrecision] - N[(N[Sin[z], $MachinePrecision] * N[Sin[y], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[Tan[a], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
x + \left(\frac{\sin \left(z + y\right)}{\cos y \cdot \cos z - \sin z \cdot \sin y} - \tan a\right)
Derivation
  1. Initial program 79.2%

    \[x + \left(\tan \left(y + z\right) - \tan a\right) \]
  2. Step-by-step derivation
    1. lift-tan.f64N/A

      \[\leadsto x + \left(\color{blue}{\tan \left(y + z\right)} - \tan a\right) \]
    2. tan-quotN/A

      \[\leadsto x + \left(\color{blue}{\frac{\sin \left(y + z\right)}{\cos \left(y + z\right)}} - \tan a\right) \]
    3. div-flipN/A

      \[\leadsto x + \left(\color{blue}{\frac{1}{\frac{\cos \left(y + z\right)}{\sin \left(y + z\right)}}} - \tan a\right) \]
    4. lower-/.f64N/A

      \[\leadsto x + \left(\color{blue}{\frac{1}{\frac{\cos \left(y + z\right)}{\sin \left(y + z\right)}}} - \tan a\right) \]
    5. lower-/.f64N/A

      \[\leadsto x + \left(\frac{1}{\color{blue}{\frac{\cos \left(y + z\right)}{\sin \left(y + z\right)}}} - \tan a\right) \]
    6. lower-cos.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{\color{blue}{\cos \left(y + z\right)}}{\sin \left(y + z\right)}} - \tan a\right) \]
    7. lift-+.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{\cos \color{blue}{\left(y + z\right)}}{\sin \left(y + z\right)}} - \tan a\right) \]
    8. +-commutativeN/A

      \[\leadsto x + \left(\frac{1}{\frac{\cos \color{blue}{\left(z + y\right)}}{\sin \left(y + z\right)}} - \tan a\right) \]
    9. lower-+.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{\cos \color{blue}{\left(z + y\right)}}{\sin \left(y + z\right)}} - \tan a\right) \]
    10. lower-sin.f6479.1%

      \[\leadsto x + \left(\frac{1}{\frac{\cos \left(z + y\right)}{\color{blue}{\sin \left(y + z\right)}}} - \tan a\right) \]
    11. lift-+.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{\cos \left(z + y\right)}{\sin \color{blue}{\left(y + z\right)}}} - \tan a\right) \]
    12. +-commutativeN/A

      \[\leadsto x + \left(\frac{1}{\frac{\cos \left(z + y\right)}{\sin \color{blue}{\left(z + y\right)}}} - \tan a\right) \]
    13. lower-+.f6479.1%

      \[\leadsto x + \left(\frac{1}{\frac{\cos \left(z + y\right)}{\sin \color{blue}{\left(z + y\right)}}} - \tan a\right) \]
  3. Applied rewrites79.1%

    \[\leadsto x + \left(\color{blue}{\frac{1}{\frac{\cos \left(z + y\right)}{\sin \left(z + y\right)}}} - \tan a\right) \]
  4. Step-by-step derivation
    1. lift-/.f64N/A

      \[\leadsto x + \left(\color{blue}{\frac{1}{\frac{\cos \left(z + y\right)}{\sin \left(z + y\right)}}} - \tan a\right) \]
    2. lift-/.f64N/A

      \[\leadsto x + \left(\frac{1}{\color{blue}{\frac{\cos \left(z + y\right)}{\sin \left(z + y\right)}}} - \tan a\right) \]
    3. div-flip-revN/A

      \[\leadsto x + \left(\color{blue}{\frac{\sin \left(z + y\right)}{\cos \left(z + y\right)}} - \tan a\right) \]
    4. add-sound-/N/A

      \[\leadsto x + \left(\color{blue}{\frac{\sin \left(z + y\right)}{\cos \left(z + y\right)}} - \tan a\right) \]
    5. lower-/.f6479.1%

      \[\leadsto x + \left(\color{blue}{\frac{\sin \left(z + y\right)}{\cos \left(z + y\right)}} - \tan a\right) \]
  5. Applied rewrites79.1%

    \[\leadsto x + \left(\color{blue}{\frac{\sin \left(z + y\right)}{\cos \left(z + y\right)}} - \tan a\right) \]
  6. Step-by-step derivation
    1. lift-cos.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\color{blue}{\cos \left(z + y\right)}} - \tan a\right) \]
    2. sin-+PI/2-revN/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\color{blue}{\sin \left(\left(z + y\right) + \frac{\mathsf{PI}\left(\right)}{2}\right)}} - \tan a\right) \]
    3. lower-sin.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\color{blue}{\sin \left(\left(z + y\right) + \frac{\mathsf{PI}\left(\right)}{2}\right)}} - \tan a\right) \]
    4. lift-+.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \left(\color{blue}{\left(z + y\right)} + \frac{\mathsf{PI}\left(\right)}{2}\right)} - \tan a\right) \]
    5. associate-+l+N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \color{blue}{\left(z + \left(y + \frac{\mathsf{PI}\left(\right)}{2}\right)\right)}} - \tan a\right) \]
    6. lower-+.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \color{blue}{\left(z + \left(y + \frac{\mathsf{PI}\left(\right)}{2}\right)\right)}} - \tan a\right) \]
    7. +-commutativeN/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \left(z + \color{blue}{\left(\frac{\mathsf{PI}\left(\right)}{2} + y\right)}\right)} - \tan a\right) \]
    8. lower-+.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \left(z + \color{blue}{\left(\frac{\mathsf{PI}\left(\right)}{2} + y\right)}\right)} - \tan a\right) \]
    9. lift-PI.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \left(z + \left(\frac{\color{blue}{\pi}}{2} + y\right)\right)} - \tan a\right) \]
    10. mult-flipN/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \left(z + \left(\color{blue}{\pi \cdot \frac{1}{2}} + y\right)\right)} - \tan a\right) \]
    11. metadata-evalN/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \left(z + \left(\pi \cdot \color{blue}{\frac{1}{2}} + y\right)\right)} - \tan a\right) \]
    12. lower-*.f6443.2%

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \left(z + \left(\color{blue}{\pi \cdot \frac{1}{2}} + y\right)\right)} - \tan a\right) \]
  7. Applied rewrites43.2%

    \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\color{blue}{\sin \left(z + \left(\pi \cdot \frac{1}{2} + y\right)\right)}} - \tan a\right) \]
  8. Step-by-step derivation
    1. lift-sin.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\color{blue}{\sin \left(z + \left(\pi \cdot \frac{1}{2} + y\right)\right)}} - \tan a\right) \]
    2. lift-+.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \color{blue}{\left(z + \left(\pi \cdot \frac{1}{2} + y\right)\right)}} - \tan a\right) \]
    3. lift-+.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \left(z + \color{blue}{\left(\pi \cdot \frac{1}{2} + y\right)}\right)} - \tan a\right) \]
    4. +-commutativeN/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \left(z + \color{blue}{\left(y + \pi \cdot \frac{1}{2}\right)}\right)} - \tan a\right) \]
    5. lift-*.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \left(z + \left(y + \color{blue}{\pi \cdot \frac{1}{2}}\right)\right)} - \tan a\right) \]
    6. metadata-evalN/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \left(z + \left(y + \pi \cdot \color{blue}{\frac{1}{2}}\right)\right)} - \tan a\right) \]
    7. mult-flipN/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \left(z + \left(y + \color{blue}{\frac{\pi}{2}}\right)\right)} - \tan a\right) \]
    8. lift-PI.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \left(z + \left(y + \frac{\color{blue}{\mathsf{PI}\left(\right)}}{2}\right)\right)} - \tan a\right) \]
    9. associate-+l+N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \color{blue}{\left(\left(z + y\right) + \frac{\mathsf{PI}\left(\right)}{2}\right)}} - \tan a\right) \]
    10. lift-+.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\sin \left(\color{blue}{\left(z + y\right)} + \frac{\mathsf{PI}\left(\right)}{2}\right)} - \tan a\right) \]
    11. sin-+PI/2-revN/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\color{blue}{\cos \left(z + y\right)}} - \tan a\right) \]
    12. lift-+.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\cos \color{blue}{\left(z + y\right)}} - \tan a\right) \]
    13. cos-sumN/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\color{blue}{\cos z \cdot \cos y - \sin z \cdot \sin y}} - \tan a\right) \]
    14. lift-cos.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\color{blue}{\cos z} \cdot \cos y - \sin z \cdot \sin y} - \tan a\right) \]
    15. lift-cos.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\cos z \cdot \color{blue}{\cos y} - \sin z \cdot \sin y} - \tan a\right) \]
    16. *-commutativeN/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\color{blue}{\cos y \cdot \cos z} - \sin z \cdot \sin y} - \tan a\right) \]
    17. lift-*.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\color{blue}{\cos y \cdot \cos z} - \sin z \cdot \sin y} - \tan a\right) \]
    18. lift-sin.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\cos y \cdot \cos z - \color{blue}{\sin z} \cdot \sin y} - \tan a\right) \]
    19. lift-sin.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\cos y \cdot \cos z - \sin z \cdot \color{blue}{\sin y}} - \tan a\right) \]
    20. lift-*.f64N/A

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\cos y \cdot \cos z - \color{blue}{\sin z \cdot \sin y}} - \tan a\right) \]
    21. lift--.f6479.8%

      \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\color{blue}{\cos y \cdot \cos z - \sin z \cdot \sin y}} - \tan a\right) \]
  9. Applied rewrites79.8%

    \[\leadsto x + \left(\frac{\sin \left(z + y\right)}{\color{blue}{\cos y \cdot \cos z - \sin z \cdot \sin y}} - \tan a\right) \]
  10. Add Preprocessing

Alternative 4: 79.2% accurate, 0.9× speedup?

\[x + \left(\frac{1}{\frac{1}{\tan \left(z + y\right)}} - \tan a\right) \]
(FPCore (x y z a)
  :precision binary64
  (+ x (- (/ 1 (/ 1 (tan (+ z y)))) (tan a))))
double code(double x, double y, double z, double a) {
	return x + ((1.0 / (1.0 / tan((z + y)))) - tan(a));
}
real(8) function code(x, y, z, a)
use fmin_fmax_functions
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    real(8), intent (in) :: a
    code = x + ((1.0d0 / (1.0d0 / tan((z + y)))) - tan(a))
end function
public static double code(double x, double y, double z, double a) {
	return x + ((1.0 / (1.0 / Math.tan((z + y)))) - Math.tan(a));
}
def code(x, y, z, a):
	return x + ((1.0 / (1.0 / math.tan((z + y)))) - math.tan(a))
function code(x, y, z, a)
	return Float64(x + Float64(Float64(1.0 / Float64(1.0 / tan(Float64(z + y)))) - tan(a)))
end
function tmp = code(x, y, z, a)
	tmp = x + ((1.0 / (1.0 / tan((z + y)))) - tan(a));
end
code[x_, y_, z_, a_] := N[(x + N[(N[(1 / N[(1 / N[Tan[N[(z + y), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[Tan[a], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
x + \left(\frac{1}{\frac{1}{\tan \left(z + y\right)}} - \tan a\right)
Derivation
  1. Initial program 79.2%

    \[x + \left(\tan \left(y + z\right) - \tan a\right) \]
  2. Step-by-step derivation
    1. lift-tan.f64N/A

      \[\leadsto x + \left(\color{blue}{\tan \left(y + z\right)} - \tan a\right) \]
    2. tan-quotN/A

      \[\leadsto x + \left(\color{blue}{\frac{\sin \left(y + z\right)}{\cos \left(y + z\right)}} - \tan a\right) \]
    3. div-flipN/A

      \[\leadsto x + \left(\color{blue}{\frac{1}{\frac{\cos \left(y + z\right)}{\sin \left(y + z\right)}}} - \tan a\right) \]
    4. lower-/.f64N/A

      \[\leadsto x + \left(\color{blue}{\frac{1}{\frac{\cos \left(y + z\right)}{\sin \left(y + z\right)}}} - \tan a\right) \]
    5. lower-/.f64N/A

      \[\leadsto x + \left(\frac{1}{\color{blue}{\frac{\cos \left(y + z\right)}{\sin \left(y + z\right)}}} - \tan a\right) \]
    6. lower-cos.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{\color{blue}{\cos \left(y + z\right)}}{\sin \left(y + z\right)}} - \tan a\right) \]
    7. lift-+.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{\cos \color{blue}{\left(y + z\right)}}{\sin \left(y + z\right)}} - \tan a\right) \]
    8. +-commutativeN/A

      \[\leadsto x + \left(\frac{1}{\frac{\cos \color{blue}{\left(z + y\right)}}{\sin \left(y + z\right)}} - \tan a\right) \]
    9. lower-+.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{\cos \color{blue}{\left(z + y\right)}}{\sin \left(y + z\right)}} - \tan a\right) \]
    10. lower-sin.f6479.1%

      \[\leadsto x + \left(\frac{1}{\frac{\cos \left(z + y\right)}{\color{blue}{\sin \left(y + z\right)}}} - \tan a\right) \]
    11. lift-+.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{\cos \left(z + y\right)}{\sin \color{blue}{\left(y + z\right)}}} - \tan a\right) \]
    12. +-commutativeN/A

      \[\leadsto x + \left(\frac{1}{\frac{\cos \left(z + y\right)}{\sin \color{blue}{\left(z + y\right)}}} - \tan a\right) \]
    13. lower-+.f6479.1%

      \[\leadsto x + \left(\frac{1}{\frac{\cos \left(z + y\right)}{\sin \color{blue}{\left(z + y\right)}}} - \tan a\right) \]
  3. Applied rewrites79.1%

    \[\leadsto x + \left(\color{blue}{\frac{1}{\frac{\cos \left(z + y\right)}{\sin \left(z + y\right)}}} - \tan a\right) \]
  4. Step-by-step derivation
    1. lift-/.f64N/A

      \[\leadsto x + \left(\frac{1}{\color{blue}{\frac{\cos \left(z + y\right)}{\sin \left(z + y\right)}}} - \tan a\right) \]
    2. frac-2negN/A

      \[\leadsto x + \left(\frac{1}{\color{blue}{\frac{\mathsf{neg}\left(\cos \left(z + y\right)\right)}{\mathsf{neg}\left(\sin \left(z + y\right)\right)}}} - \tan a\right) \]
    3. div-flipN/A

      \[\leadsto x + \left(\frac{1}{\color{blue}{\frac{1}{\frac{\mathsf{neg}\left(\sin \left(z + y\right)\right)}{\mathsf{neg}\left(\cos \left(z + y\right)\right)}}}} - \tan a\right) \]
    4. add-sound-/N/A

      \[\leadsto x + \left(\frac{1}{\frac{1}{\color{blue}{\frac{\mathsf{neg}\left(\sin \left(z + y\right)\right)}{\mathsf{neg}\left(\cos \left(z + y\right)\right)}}}} - \tan a\right) \]
    5. frac-2negN/A

      \[\leadsto x + \left(\frac{1}{\frac{1}{\color{blue}{\frac{\sin \left(z + y\right)}{\cos \left(z + y\right)}}}} - \tan a\right) \]
    6. lift-sin.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{1}{\frac{\color{blue}{\sin \left(z + y\right)}}{\cos \left(z + y\right)}}} - \tan a\right) \]
    7. lift-+.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{1}{\frac{\sin \color{blue}{\left(z + y\right)}}{\cos \left(z + y\right)}}} - \tan a\right) \]
    8. sin-sumN/A

      \[\leadsto x + \left(\frac{1}{\frac{1}{\frac{\color{blue}{\sin z \cdot \cos y + \cos z \cdot \sin y}}{\cos \left(z + y\right)}}} - \tan a\right) \]
    9. lift-sin.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{1}{\frac{\color{blue}{\sin z} \cdot \cos y + \cos z \cdot \sin y}{\cos \left(z + y\right)}}} - \tan a\right) \]
    10. lift-cos.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{1}{\frac{\sin z \cdot \color{blue}{\cos y} + \cos z \cdot \sin y}{\cos \left(z + y\right)}}} - \tan a\right) \]
    11. lift-*.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{1}{\frac{\color{blue}{\sin z \cdot \cos y} + \cos z \cdot \sin y}{\cos \left(z + y\right)}}} - \tan a\right) \]
    12. lift-cos.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{1}{\frac{\sin z \cdot \cos y + \color{blue}{\cos z} \cdot \sin y}{\cos \left(z + y\right)}}} - \tan a\right) \]
    13. lift-sin.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{1}{\frac{\sin z \cdot \cos y + \cos z \cdot \color{blue}{\sin y}}{\cos \left(z + y\right)}}} - \tan a\right) \]
    14. lift-*.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{1}{\frac{\sin z \cdot \cos y + \color{blue}{\cos z \cdot \sin y}}{\cos \left(z + y\right)}}} - \tan a\right) \]
    15. div-add-revN/A

      \[\leadsto x + \left(\frac{1}{\frac{1}{\color{blue}{\frac{\sin z \cdot \cos y}{\cos \left(z + y\right)} + \frac{\cos z \cdot \sin y}{\cos \left(z + y\right)}}}} - \tan a\right) \]
    16. lift-/.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{1}{\color{blue}{\frac{\sin z \cdot \cos y}{\cos \left(z + y\right)}} + \frac{\cos z \cdot \sin y}{\cos \left(z + y\right)}}} - \tan a\right) \]
    17. lift-/.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{1}{\frac{\sin z \cdot \cos y}{\cos \left(z + y\right)} + \color{blue}{\frac{\cos z \cdot \sin y}{\cos \left(z + y\right)}}}} - \tan a\right) \]
    18. lift-+.f64N/A

      \[\leadsto x + \left(\frac{1}{\frac{1}{\color{blue}{\frac{\sin z \cdot \cos y}{\cos \left(z + y\right)} + \frac{\cos z \cdot \sin y}{\cos \left(z + y\right)}}}} - \tan a\right) \]
  5. Applied rewrites79.2%

    \[\leadsto x + \left(\frac{1}{\color{blue}{\frac{1}{\tan \left(z + y\right)}}} - \tan a\right) \]
  6. Add Preprocessing

Reproduce

?
herbie shell --seed 2025326 -o generate:taylor -o generate:evaluate
(FPCore (x y z a)
  :name "tan-example (used to crash)"
  :precision binary64
  :pre (and (and (and (or (== x 0) (and (<= 2942071/5000000 x) (<= x 5055909/10000))) (or (and (<= -179665800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 y) (<= y -1885117/2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)) (and (<= 642469/500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 y) (<= y 175122400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)))) (or (and (<= -177670700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 z) (<= z -2149949/2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)) (and (<= 658629/20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 z) (<= z 172515400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)))) (or (and (<= -179665800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 a) (<= a -1885117/2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)) (and (<= 642469/500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 a) (<= a 175122400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000))))
  (+ x (- (tan (+ y z)) (tan a))))