Toniolo and Linder, Equation (10-)

Percentage Accurate: 35.2% → 98.1%
Time: 15.9s
Alternatives: 13
Speedup: 11.6×

Specification

?
\[\begin{array}{l} \\ \frac{2}{\left(\left(\frac{{t}^{3}}{\ell \cdot \ell} \cdot \sin k\right) \cdot \tan k\right) \cdot \left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right)} \end{array} \]
(FPCore (t l k)
 :precision binary64
 (/
  2.0
  (*
   (* (* (/ (pow t 3.0) (* l l)) (sin k)) (tan k))
   (- (+ 1.0 (pow (/ k t) 2.0)) 1.0))))
double code(double t, double l, double k) {
	return 2.0 / ((((pow(t, 3.0) / (l * l)) * sin(k)) * tan(k)) * ((1.0 + pow((k / t), 2.0)) - 1.0));
}
real(8) function code(t, l, k)
    real(8), intent (in) :: t
    real(8), intent (in) :: l
    real(8), intent (in) :: k
    code = 2.0d0 / (((((t ** 3.0d0) / (l * l)) * sin(k)) * tan(k)) * ((1.0d0 + ((k / t) ** 2.0d0)) - 1.0d0))
end function
public static double code(double t, double l, double k) {
	return 2.0 / ((((Math.pow(t, 3.0) / (l * l)) * Math.sin(k)) * Math.tan(k)) * ((1.0 + Math.pow((k / t), 2.0)) - 1.0));
}
def code(t, l, k):
	return 2.0 / ((((math.pow(t, 3.0) / (l * l)) * math.sin(k)) * math.tan(k)) * ((1.0 + math.pow((k / t), 2.0)) - 1.0))
function code(t, l, k)
	return Float64(2.0 / Float64(Float64(Float64(Float64((t ^ 3.0) / Float64(l * l)) * sin(k)) * tan(k)) * Float64(Float64(1.0 + (Float64(k / t) ^ 2.0)) - 1.0)))
end
function tmp = code(t, l, k)
	tmp = 2.0 / (((((t ^ 3.0) / (l * l)) * sin(k)) * tan(k)) * ((1.0 + ((k / t) ^ 2.0)) - 1.0));
end
code[t_, l_, k_] := N[(2.0 / N[(N[(N[(N[(N[Power[t, 3.0], $MachinePrecision] / N[(l * l), $MachinePrecision]), $MachinePrecision] * N[Sin[k], $MachinePrecision]), $MachinePrecision] * N[Tan[k], $MachinePrecision]), $MachinePrecision] * N[(N[(1.0 + N[Power[N[(k / t), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] - 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\frac{2}{\left(\left(\frac{{t}^{3}}{\ell \cdot \ell} \cdot \sin k\right) \cdot \tan k\right) \cdot \left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\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: 35.2% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \frac{2}{\left(\left(\frac{{t}^{3}}{\ell \cdot \ell} \cdot \sin k\right) \cdot \tan k\right) \cdot \left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right)} \end{array} \]
(FPCore (t l k)
 :precision binary64
 (/
  2.0
  (*
   (* (* (/ (pow t 3.0) (* l l)) (sin k)) (tan k))
   (- (+ 1.0 (pow (/ k t) 2.0)) 1.0))))
double code(double t, double l, double k) {
	return 2.0 / ((((pow(t, 3.0) / (l * l)) * sin(k)) * tan(k)) * ((1.0 + pow((k / t), 2.0)) - 1.0));
}
real(8) function code(t, l, k)
    real(8), intent (in) :: t
    real(8), intent (in) :: l
    real(8), intent (in) :: k
    code = 2.0d0 / (((((t ** 3.0d0) / (l * l)) * sin(k)) * tan(k)) * ((1.0d0 + ((k / t) ** 2.0d0)) - 1.0d0))
end function
public static double code(double t, double l, double k) {
	return 2.0 / ((((Math.pow(t, 3.0) / (l * l)) * Math.sin(k)) * Math.tan(k)) * ((1.0 + Math.pow((k / t), 2.0)) - 1.0));
}
def code(t, l, k):
	return 2.0 / ((((math.pow(t, 3.0) / (l * l)) * math.sin(k)) * math.tan(k)) * ((1.0 + math.pow((k / t), 2.0)) - 1.0))
function code(t, l, k)
	return Float64(2.0 / Float64(Float64(Float64(Float64((t ^ 3.0) / Float64(l * l)) * sin(k)) * tan(k)) * Float64(Float64(1.0 + (Float64(k / t) ^ 2.0)) - 1.0)))
end
function tmp = code(t, l, k)
	tmp = 2.0 / (((((t ^ 3.0) / (l * l)) * sin(k)) * tan(k)) * ((1.0 + ((k / t) ^ 2.0)) - 1.0));
end
code[t_, l_, k_] := N[(2.0 / N[(N[(N[(N[(N[Power[t, 3.0], $MachinePrecision] / N[(l * l), $MachinePrecision]), $MachinePrecision] * N[Sin[k], $MachinePrecision]), $MachinePrecision] * N[Tan[k], $MachinePrecision]), $MachinePrecision] * N[(N[(1.0 + N[Power[N[(k / t), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] - 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\frac{2}{\left(\left(\frac{{t}^{3}}{\ell \cdot \ell} \cdot \sin k\right) \cdot \tan k\right) \cdot \left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right)}
\end{array}

Alternative 1: 98.1% accurate, 1.7× speedup?

\[\begin{array}{l} \\ \frac{\frac{2}{t}}{\frac{k \cdot \sin k}{\ell}} \cdot \frac{\frac{\ell}{k}}{\tan k} \end{array} \]
(FPCore (t l k)
 :precision binary64
 (* (/ (/ 2.0 t) (/ (* k (sin k)) l)) (/ (/ l k) (tan k))))
double code(double t, double l, double k) {
	return ((2.0 / t) / ((k * sin(k)) / l)) * ((l / k) / tan(k));
}
real(8) function code(t, l, k)
    real(8), intent (in) :: t
    real(8), intent (in) :: l
    real(8), intent (in) :: k
    code = ((2.0d0 / t) / ((k * sin(k)) / l)) * ((l / k) / tan(k))
end function
public static double code(double t, double l, double k) {
	return ((2.0 / t) / ((k * Math.sin(k)) / l)) * ((l / k) / Math.tan(k));
}
def code(t, l, k):
	return ((2.0 / t) / ((k * math.sin(k)) / l)) * ((l / k) / math.tan(k))
function code(t, l, k)
	return Float64(Float64(Float64(2.0 / t) / Float64(Float64(k * sin(k)) / l)) * Float64(Float64(l / k) / tan(k)))
end
function tmp = code(t, l, k)
	tmp = ((2.0 / t) / ((k * sin(k)) / l)) * ((l / k) / tan(k));
end
code[t_, l_, k_] := N[(N[(N[(2.0 / t), $MachinePrecision] / N[(N[(k * N[Sin[k], $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision] * N[(N[(l / k), $MachinePrecision] / N[Tan[k], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\frac{\frac{2}{t}}{\frac{k \cdot \sin k}{\ell}} \cdot \frac{\frac{\ell}{k}}{\tan k}
\end{array}
Derivation
  1. Initial program 34.0%

    \[\frac{2}{\left(\left(\frac{{t}^{3}}{\ell \cdot \ell} \cdot \sin k\right) \cdot \tan k\right) \cdot \left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right)} \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-*.f64N/A

      \[\leadsto \frac{2}{\color{blue}{\left(\left(\frac{{t}^{3}}{\ell \cdot \ell} \cdot \sin k\right) \cdot \tan k\right) \cdot \left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right)}} \]
    2. *-commutativeN/A

      \[\leadsto \frac{2}{\color{blue}{\left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right) \cdot \left(\left(\frac{{t}^{3}}{\ell \cdot \ell} \cdot \sin k\right) \cdot \tan k\right)}} \]
    3. lift-*.f64N/A

      \[\leadsto \frac{2}{\left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right) \cdot \color{blue}{\left(\left(\frac{{t}^{3}}{\ell \cdot \ell} \cdot \sin k\right) \cdot \tan k\right)}} \]
    4. lift-*.f64N/A

      \[\leadsto \frac{2}{\left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right) \cdot \left(\color{blue}{\left(\frac{{t}^{3}}{\ell \cdot \ell} \cdot \sin k\right)} \cdot \tan k\right)} \]
    5. associate-*l*N/A

      \[\leadsto \frac{2}{\left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right) \cdot \color{blue}{\left(\frac{{t}^{3}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)\right)}} \]
    6. associate-*r*N/A

      \[\leadsto \frac{2}{\color{blue}{\left(\left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right) \cdot \frac{{t}^{3}}{\ell \cdot \ell}\right) \cdot \left(\sin k \cdot \tan k\right)}} \]
    7. lower-*.f64N/A

      \[\leadsto \frac{2}{\color{blue}{\left(\left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right) \cdot \frac{{t}^{3}}{\ell \cdot \ell}\right) \cdot \left(\sin k \cdot \tan k\right)}} \]
  4. Applied rewrites28.2%

    \[\leadsto \frac{2}{\color{blue}{\left(\frac{k \cdot k}{t \cdot t} \cdot \frac{t \cdot \left(t \cdot t\right)}{\ell \cdot \ell}\right) \cdot \left(\sin k \cdot \tan k\right)}} \]
  5. Step-by-step derivation
    1. lift-*.f64N/A

      \[\leadsto \frac{2}{\color{blue}{\left(\frac{k \cdot k}{t \cdot t} \cdot \frac{t \cdot \left(t \cdot t\right)}{\ell \cdot \ell}\right)} \cdot \left(\sin k \cdot \tan k\right)} \]
    2. lift-/.f64N/A

      \[\leadsto \frac{2}{\left(\frac{k \cdot k}{t \cdot t} \cdot \color{blue}{\frac{t \cdot \left(t \cdot t\right)}{\ell \cdot \ell}}\right) \cdot \left(\sin k \cdot \tan k\right)} \]
    3. associate-*r/N/A

      \[\leadsto \frac{2}{\color{blue}{\frac{\frac{k \cdot k}{t \cdot t} \cdot \left(t \cdot \left(t \cdot t\right)\right)}{\ell \cdot \ell}} \cdot \left(\sin k \cdot \tan k\right)} \]
    4. lift-*.f64N/A

      \[\leadsto \frac{2}{\frac{\frac{k \cdot k}{t \cdot t} \cdot \left(t \cdot \left(t \cdot t\right)\right)}{\color{blue}{\ell \cdot \ell}} \cdot \left(\sin k \cdot \tan k\right)} \]
    5. lift-/.f64N/A

      \[\leadsto \frac{2}{\frac{\color{blue}{\frac{k \cdot k}{t \cdot t}} \cdot \left(t \cdot \left(t \cdot t\right)\right)}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    6. div-invN/A

      \[\leadsto \frac{2}{\frac{\color{blue}{\left(\left(k \cdot k\right) \cdot \frac{1}{t \cdot t}\right)} \cdot \left(t \cdot \left(t \cdot t\right)\right)}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    7. associate-*l*N/A

      \[\leadsto \frac{2}{\frac{\color{blue}{\left(k \cdot k\right) \cdot \left(\frac{1}{t \cdot t} \cdot \left(t \cdot \left(t \cdot t\right)\right)\right)}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    8. lift-*.f64N/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot \left(\frac{1}{\color{blue}{t \cdot t}} \cdot \left(t \cdot \left(t \cdot t\right)\right)\right)}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    9. pow2N/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot \left(\frac{1}{\color{blue}{{t}^{2}}} \cdot \left(t \cdot \left(t \cdot t\right)\right)\right)}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    10. pow-flipN/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot \left(\color{blue}{{t}^{\left(\mathsf{neg}\left(2\right)\right)}} \cdot \left(t \cdot \left(t \cdot t\right)\right)\right)}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    11. lift-*.f64N/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot \left({t}^{\left(\mathsf{neg}\left(2\right)\right)} \cdot \color{blue}{\left(t \cdot \left(t \cdot t\right)\right)}\right)}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    12. lift-*.f64N/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot \left({t}^{\left(\mathsf{neg}\left(2\right)\right)} \cdot \left(t \cdot \color{blue}{\left(t \cdot t\right)}\right)\right)}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    13. cube-unmultN/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot \left({t}^{\left(\mathsf{neg}\left(2\right)\right)} \cdot \color{blue}{{t}^{3}}\right)}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    14. pow-prod-upN/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot \color{blue}{{t}^{\left(\left(\mathsf{neg}\left(2\right)\right) + 3\right)}}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    15. metadata-evalN/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot {t}^{\left(\color{blue}{-2} + 3\right)}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    16. metadata-evalN/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot {t}^{\color{blue}{1}}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    17. unpow1N/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot \color{blue}{t}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    18. *-commutativeN/A

      \[\leadsto \frac{2}{\frac{\color{blue}{t \cdot \left(k \cdot k\right)}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    19. lift-*.f64N/A

      \[\leadsto \frac{2}{\frac{t \cdot \color{blue}{\left(k \cdot k\right)}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    20. associate-*r*N/A

      \[\leadsto \frac{2}{\frac{\color{blue}{\left(t \cdot k\right) \cdot k}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
  6. Applied rewrites93.9%

    \[\leadsto \frac{2}{\color{blue}{\left(\frac{t \cdot k}{\ell} \cdot \frac{k}{\ell}\right)} \cdot \left(\sin k \cdot \tan k\right)} \]
  7. Step-by-step derivation
    1. lift-/.f64N/A

      \[\leadsto \color{blue}{\frac{2}{\left(\frac{t \cdot k}{\ell} \cdot \frac{k}{\ell}\right) \cdot \left(\sin k \cdot \tan k\right)}} \]
    2. lift-*.f64N/A

      \[\leadsto \frac{2}{\color{blue}{\left(\frac{t \cdot k}{\ell} \cdot \frac{k}{\ell}\right) \cdot \left(\sin k \cdot \tan k\right)}} \]
    3. lift-*.f64N/A

      \[\leadsto \frac{2}{\color{blue}{\left(\frac{t \cdot k}{\ell} \cdot \frac{k}{\ell}\right)} \cdot \left(\sin k \cdot \tan k\right)} \]
    4. associate-*l*N/A

      \[\leadsto \frac{2}{\color{blue}{\frac{t \cdot k}{\ell} \cdot \left(\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)\right)}} \]
    5. associate-/r*N/A

      \[\leadsto \color{blue}{\frac{\frac{2}{\frac{t \cdot k}{\ell}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)}} \]
    6. lower-/.f64N/A

      \[\leadsto \color{blue}{\frac{\frac{2}{\frac{t \cdot k}{\ell}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)}} \]
    7. div-invN/A

      \[\leadsto \frac{\color{blue}{2 \cdot \frac{1}{\frac{t \cdot k}{\ell}}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    8. lift-/.f64N/A

      \[\leadsto \frac{2 \cdot \frac{1}{\color{blue}{\frac{t \cdot k}{\ell}}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    9. clear-numN/A

      \[\leadsto \frac{2 \cdot \color{blue}{\frac{\ell}{t \cdot k}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    10. lower-*.f64N/A

      \[\leadsto \frac{\color{blue}{2 \cdot \frac{\ell}{t \cdot k}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    11. lower-/.f64N/A

      \[\leadsto \frac{2 \cdot \color{blue}{\frac{\ell}{t \cdot k}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    12. lower-*.f6495.2

      \[\leadsto \frac{2 \cdot \frac{\ell}{t \cdot k}}{\color{blue}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)}} \]
  8. Applied rewrites95.2%

    \[\leadsto \color{blue}{\frac{2 \cdot \frac{\ell}{t \cdot k}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)}} \]
  9. Step-by-step derivation
    1. lift-/.f64N/A

      \[\leadsto \color{blue}{\frac{2 \cdot \frac{\ell}{t \cdot k}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)}} \]
    2. lift-*.f64N/A

      \[\leadsto \frac{\color{blue}{2 \cdot \frac{\ell}{t \cdot k}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    3. lift-/.f64N/A

      \[\leadsto \frac{2 \cdot \color{blue}{\frac{\ell}{t \cdot k}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    4. associate-*r/N/A

      \[\leadsto \frac{\color{blue}{\frac{2 \cdot \ell}{t \cdot k}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    5. lift-*.f64N/A

      \[\leadsto \frac{\frac{2 \cdot \ell}{\color{blue}{t \cdot k}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    6. times-fracN/A

      \[\leadsto \frac{\color{blue}{\frac{2}{t} \cdot \frac{\ell}{k}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    7. lift-*.f64N/A

      \[\leadsto \frac{\frac{2}{t} \cdot \frac{\ell}{k}}{\color{blue}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)}} \]
    8. lift-*.f64N/A

      \[\leadsto \frac{\frac{2}{t} \cdot \frac{\ell}{k}}{\frac{k}{\ell} \cdot \color{blue}{\left(\sin k \cdot \tan k\right)}} \]
    9. associate-*r*N/A

      \[\leadsto \frac{\frac{2}{t} \cdot \frac{\ell}{k}}{\color{blue}{\left(\frac{k}{\ell} \cdot \sin k\right) \cdot \tan k}} \]
    10. times-fracN/A

      \[\leadsto \color{blue}{\frac{\frac{2}{t}}{\frac{k}{\ell} \cdot \sin k} \cdot \frac{\frac{\ell}{k}}{\tan k}} \]
    11. lower-*.f64N/A

      \[\leadsto \color{blue}{\frac{\frac{2}{t}}{\frac{k}{\ell} \cdot \sin k} \cdot \frac{\frac{\ell}{k}}{\tan k}} \]
    12. lower-/.f64N/A

      \[\leadsto \color{blue}{\frac{\frac{2}{t}}{\frac{k}{\ell} \cdot \sin k}} \cdot \frac{\frac{\ell}{k}}{\tan k} \]
    13. lower-/.f64N/A

      \[\leadsto \frac{\color{blue}{\frac{2}{t}}}{\frac{k}{\ell} \cdot \sin k} \cdot \frac{\frac{\ell}{k}}{\tan k} \]
    14. lift-/.f64N/A

      \[\leadsto \frac{\frac{2}{t}}{\color{blue}{\frac{k}{\ell}} \cdot \sin k} \cdot \frac{\frac{\ell}{k}}{\tan k} \]
    15. associate-*l/N/A

      \[\leadsto \frac{\frac{2}{t}}{\color{blue}{\frac{k \cdot \sin k}{\ell}}} \cdot \frac{\frac{\ell}{k}}{\tan k} \]
    16. lower-/.f64N/A

      \[\leadsto \frac{\frac{2}{t}}{\color{blue}{\frac{k \cdot \sin k}{\ell}}} \cdot \frac{\frac{\ell}{k}}{\tan k} \]
    17. lower-*.f64N/A

      \[\leadsto \frac{\frac{2}{t}}{\frac{\color{blue}{k \cdot \sin k}}{\ell}} \cdot \frac{\frac{\ell}{k}}{\tan k} \]
    18. lower-/.f64N/A

      \[\leadsto \frac{\frac{2}{t}}{\frac{k \cdot \sin k}{\ell}} \cdot \color{blue}{\frac{\frac{\ell}{k}}{\tan k}} \]
    19. lower-/.f6498.5

      \[\leadsto \frac{\frac{2}{t}}{\frac{k \cdot \sin k}{\ell}} \cdot \frac{\color{blue}{\frac{\ell}{k}}}{\tan k} \]
  10. Applied rewrites98.5%

    \[\leadsto \color{blue}{\frac{\frac{2}{t}}{\frac{k \cdot \sin k}{\ell}} \cdot \frac{\frac{\ell}{k}}{\tan k}} \]
  11. Add Preprocessing

Alternative 2: 93.9% accurate, 1.8× speedup?

\[\begin{array}{l} \\ \frac{2 \cdot \frac{\ell}{t \cdot k}}{\sin k \cdot \left(\tan k \cdot \frac{k}{\ell}\right)} \end{array} \]
(FPCore (t l k)
 :precision binary64
 (/ (* 2.0 (/ l (* t k))) (* (sin k) (* (tan k) (/ k l)))))
double code(double t, double l, double k) {
	return (2.0 * (l / (t * k))) / (sin(k) * (tan(k) * (k / l)));
}
real(8) function code(t, l, k)
    real(8), intent (in) :: t
    real(8), intent (in) :: l
    real(8), intent (in) :: k
    code = (2.0d0 * (l / (t * k))) / (sin(k) * (tan(k) * (k / l)))
end function
public static double code(double t, double l, double k) {
	return (2.0 * (l / (t * k))) / (Math.sin(k) * (Math.tan(k) * (k / l)));
}
def code(t, l, k):
	return (2.0 * (l / (t * k))) / (math.sin(k) * (math.tan(k) * (k / l)))
function code(t, l, k)
	return Float64(Float64(2.0 * Float64(l / Float64(t * k))) / Float64(sin(k) * Float64(tan(k) * Float64(k / l))))
end
function tmp = code(t, l, k)
	tmp = (2.0 * (l / (t * k))) / (sin(k) * (tan(k) * (k / l)));
end
code[t_, l_, k_] := N[(N[(2.0 * N[(l / N[(t * k), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(N[Sin[k], $MachinePrecision] * N[(N[Tan[k], $MachinePrecision] * N[(k / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\frac{2 \cdot \frac{\ell}{t \cdot k}}{\sin k \cdot \left(\tan k \cdot \frac{k}{\ell}\right)}
\end{array}
Derivation
  1. Initial program 35.2%

    \[\frac{2}{\left(\left(\frac{{t}^{3}}{\ell \cdot \ell} \cdot \sin k\right) \cdot \tan k\right) \cdot \left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right)} \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. lift-*.f64N/A

      \[\leadsto \frac{2}{\color{blue}{\left(\left(\frac{{t}^{3}}{\ell \cdot \ell} \cdot \sin k\right) \cdot \tan k\right) \cdot \left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right)}} \]
    2. *-commutativeN/A

      \[\leadsto \frac{2}{\color{blue}{\left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right) \cdot \left(\left(\frac{{t}^{3}}{\ell \cdot \ell} \cdot \sin k\right) \cdot \tan k\right)}} \]
    3. lift-*.f64N/A

      \[\leadsto \frac{2}{\left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right) \cdot \color{blue}{\left(\left(\frac{{t}^{3}}{\ell \cdot \ell} \cdot \sin k\right) \cdot \tan k\right)}} \]
    4. lift-*.f64N/A

      \[\leadsto \frac{2}{\left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right) \cdot \left(\color{blue}{\left(\frac{{t}^{3}}{\ell \cdot \ell} \cdot \sin k\right)} \cdot \tan k\right)} \]
    5. associate-*l*N/A

      \[\leadsto \frac{2}{\left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right) \cdot \color{blue}{\left(\frac{{t}^{3}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)\right)}} \]
    6. associate-*r*N/A

      \[\leadsto \frac{2}{\color{blue}{\left(\left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right) \cdot \frac{{t}^{3}}{\ell \cdot \ell}\right) \cdot \left(\sin k \cdot \tan k\right)}} \]
    7. lower-*.f64N/A

      \[\leadsto \frac{2}{\color{blue}{\left(\left(\left(1 + {\left(\frac{k}{t}\right)}^{2}\right) - 1\right) \cdot \frac{{t}^{3}}{\ell \cdot \ell}\right) \cdot \left(\sin k \cdot \tan k\right)}} \]
  4. Applied rewrites28.9%

    \[\leadsto \frac{2}{\color{blue}{\left(\frac{k \cdot k}{t \cdot t} \cdot \frac{t \cdot \left(t \cdot t\right)}{\ell \cdot \ell}\right) \cdot \left(\sin k \cdot \tan k\right)}} \]
  5. Step-by-step derivation
    1. lift-*.f64N/A

      \[\leadsto \frac{2}{\color{blue}{\left(\frac{k \cdot k}{t \cdot t} \cdot \frac{t \cdot \left(t \cdot t\right)}{\ell \cdot \ell}\right)} \cdot \left(\sin k \cdot \tan k\right)} \]
    2. lift-/.f64N/A

      \[\leadsto \frac{2}{\left(\frac{k \cdot k}{t \cdot t} \cdot \color{blue}{\frac{t \cdot \left(t \cdot t\right)}{\ell \cdot \ell}}\right) \cdot \left(\sin k \cdot \tan k\right)} \]
    3. associate-*r/N/A

      \[\leadsto \frac{2}{\color{blue}{\frac{\frac{k \cdot k}{t \cdot t} \cdot \left(t \cdot \left(t \cdot t\right)\right)}{\ell \cdot \ell}} \cdot \left(\sin k \cdot \tan k\right)} \]
    4. lift-*.f64N/A

      \[\leadsto \frac{2}{\frac{\frac{k \cdot k}{t \cdot t} \cdot \left(t \cdot \left(t \cdot t\right)\right)}{\color{blue}{\ell \cdot \ell}} \cdot \left(\sin k \cdot \tan k\right)} \]
    5. lift-/.f64N/A

      \[\leadsto \frac{2}{\frac{\color{blue}{\frac{k \cdot k}{t \cdot t}} \cdot \left(t \cdot \left(t \cdot t\right)\right)}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    6. div-invN/A

      \[\leadsto \frac{2}{\frac{\color{blue}{\left(\left(k \cdot k\right) \cdot \frac{1}{t \cdot t}\right)} \cdot \left(t \cdot \left(t \cdot t\right)\right)}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    7. associate-*l*N/A

      \[\leadsto \frac{2}{\frac{\color{blue}{\left(k \cdot k\right) \cdot \left(\frac{1}{t \cdot t} \cdot \left(t \cdot \left(t \cdot t\right)\right)\right)}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    8. lift-*.f64N/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot \left(\frac{1}{\color{blue}{t \cdot t}} \cdot \left(t \cdot \left(t \cdot t\right)\right)\right)}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    9. pow2N/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot \left(\frac{1}{\color{blue}{{t}^{2}}} \cdot \left(t \cdot \left(t \cdot t\right)\right)\right)}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    10. pow-flipN/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot \left(\color{blue}{{t}^{\left(\mathsf{neg}\left(2\right)\right)}} \cdot \left(t \cdot \left(t \cdot t\right)\right)\right)}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    11. lift-*.f64N/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot \left({t}^{\left(\mathsf{neg}\left(2\right)\right)} \cdot \color{blue}{\left(t \cdot \left(t \cdot t\right)\right)}\right)}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    12. lift-*.f64N/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot \left({t}^{\left(\mathsf{neg}\left(2\right)\right)} \cdot \left(t \cdot \color{blue}{\left(t \cdot t\right)}\right)\right)}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    13. cube-unmultN/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot \left({t}^{\left(\mathsf{neg}\left(2\right)\right)} \cdot \color{blue}{{t}^{3}}\right)}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    14. pow-prod-upN/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot \color{blue}{{t}^{\left(\left(\mathsf{neg}\left(2\right)\right) + 3\right)}}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    15. metadata-evalN/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot {t}^{\left(\color{blue}{-2} + 3\right)}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    16. metadata-evalN/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot {t}^{\color{blue}{1}}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    17. unpow1N/A

      \[\leadsto \frac{2}{\frac{\left(k \cdot k\right) \cdot \color{blue}{t}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    18. *-commutativeN/A

      \[\leadsto \frac{2}{\frac{\color{blue}{t \cdot \left(k \cdot k\right)}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    19. lift-*.f64N/A

      \[\leadsto \frac{2}{\frac{t \cdot \color{blue}{\left(k \cdot k\right)}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    20. associate-*r*N/A

      \[\leadsto \frac{2}{\frac{\color{blue}{\left(t \cdot k\right) \cdot k}}{\ell \cdot \ell} \cdot \left(\sin k \cdot \tan k\right)} \]
  6. Applied rewrites92.5%

    \[\leadsto \frac{2}{\color{blue}{\left(\frac{t \cdot k}{\ell} \cdot \frac{k}{\ell}\right)} \cdot \left(\sin k \cdot \tan k\right)} \]
  7. Step-by-step derivation
    1. lift-/.f64N/A

      \[\leadsto \color{blue}{\frac{2}{\left(\frac{t \cdot k}{\ell} \cdot \frac{k}{\ell}\right) \cdot \left(\sin k \cdot \tan k\right)}} \]
    2. lift-*.f64N/A

      \[\leadsto \frac{2}{\color{blue}{\left(\frac{t \cdot k}{\ell} \cdot \frac{k}{\ell}\right) \cdot \left(\sin k \cdot \tan k\right)}} \]
    3. lift-*.f64N/A

      \[\leadsto \frac{2}{\color{blue}{\left(\frac{t \cdot k}{\ell} \cdot \frac{k}{\ell}\right)} \cdot \left(\sin k \cdot \tan k\right)} \]
    4. associate-*l*N/A

      \[\leadsto \frac{2}{\color{blue}{\frac{t \cdot k}{\ell} \cdot \left(\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)\right)}} \]
    5. associate-/r*N/A

      \[\leadsto \color{blue}{\frac{\frac{2}{\frac{t \cdot k}{\ell}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)}} \]
    6. lower-/.f64N/A

      \[\leadsto \color{blue}{\frac{\frac{2}{\frac{t \cdot k}{\ell}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)}} \]
    7. div-invN/A

      \[\leadsto \frac{\color{blue}{2 \cdot \frac{1}{\frac{t \cdot k}{\ell}}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    8. lift-/.f64N/A

      \[\leadsto \frac{2 \cdot \frac{1}{\color{blue}{\frac{t \cdot k}{\ell}}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    9. clear-numN/A

      \[\leadsto \frac{2 \cdot \color{blue}{\frac{\ell}{t \cdot k}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    10. lower-*.f64N/A

      \[\leadsto \frac{\color{blue}{2 \cdot \frac{\ell}{t \cdot k}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    11. lower-/.f64N/A

      \[\leadsto \frac{2 \cdot \color{blue}{\frac{\ell}{t \cdot k}}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)} \]
    12. lower-*.f6493.4

      \[\leadsto \frac{2 \cdot \frac{\ell}{t \cdot k}}{\color{blue}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)}} \]
  8. Applied rewrites93.4%

    \[\leadsto \color{blue}{\frac{2 \cdot \frac{\ell}{t \cdot k}}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)}} \]
  9. Step-by-step derivation
    1. lift-*.f64N/A

      \[\leadsto \frac{2 \cdot \frac{\ell}{t \cdot k}}{\color{blue}{\frac{k}{\ell} \cdot \left(\sin k \cdot \tan k\right)}} \]
    2. lift-*.f64N/A

      \[\leadsto \frac{2 \cdot \frac{\ell}{t \cdot k}}{\frac{k}{\ell} \cdot \color{blue}{\left(\sin k \cdot \tan k\right)}} \]
    3. *-commutativeN/A

      \[\leadsto \frac{2 \cdot \frac{\ell}{t \cdot k}}{\frac{k}{\ell} \cdot \color{blue}{\left(\tan k \cdot \sin k\right)}} \]
    4. associate-*r*N/A

      \[\leadsto \frac{2 \cdot \frac{\ell}{t \cdot k}}{\color{blue}{\left(\frac{k}{\ell} \cdot \tan k\right) \cdot \sin k}} \]
    5. lower-*.f64N/A

      \[\leadsto \frac{2 \cdot \frac{\ell}{t \cdot k}}{\color{blue}{\left(\frac{k}{\ell} \cdot \tan k\right) \cdot \sin k}} \]
    6. lower-*.f6493.9

      \[\leadsto \frac{2 \cdot \frac{\ell}{t \cdot k}}{\color{blue}{\left(\frac{k}{\ell} \cdot \tan k\right)} \cdot \sin k} \]
  10. Applied rewrites93.9%

    \[\leadsto \frac{2 \cdot \frac{\ell}{t \cdot k}}{\color{blue}{\left(\frac{k}{\ell} \cdot \tan k\right) \cdot \sin k}} \]
  11. Final simplification93.9%

    \[\leadsto \frac{2 \cdot \frac{\ell}{t \cdot k}}{\sin k \cdot \left(\tan k \cdot \frac{k}{\ell}\right)} \]
  12. Add Preprocessing

Reproduce

?
herbie shell --seed 2024233 
(FPCore (t l k)
  :name "Toniolo and Linder, Equation (10-)"
  :precision binary64
  (/ 2.0 (* (* (* (/ (pow t 3.0) (* l l)) (sin k)) (tan k)) (- (+ 1.0 (pow (/ k t) 2.0)) 1.0))))