VandenBroeck and Keller, Equation (6)

Percentage Accurate: 76.1% → 97.0%
Time: 33.7s
Alternatives: 7
Speedup: 1.0×

Specification

?
\[\begin{array}{l} \\ \pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right) \end{array} \]
(FPCore (F l)
 :precision binary64
 (- (* PI l) (* (/ 1.0 (* F F)) (tan (* PI l)))))
double code(double F, double l) {
	return (((double) M_PI) * l) - ((1.0 / (F * F)) * tan((((double) M_PI) * l)));
}
public static double code(double F, double l) {
	return (Math.PI * l) - ((1.0 / (F * F)) * Math.tan((Math.PI * l)));
}
def code(F, l):
	return (math.pi * l) - ((1.0 / (F * F)) * math.tan((math.pi * l)))
function code(F, l)
	return Float64(Float64(pi * l) - Float64(Float64(1.0 / Float64(F * F)) * tan(Float64(pi * l))))
end
function tmp = code(F, l)
	tmp = (pi * l) - ((1.0 / (F * F)) * tan((pi * l)));
end
code[F_, l_] := N[(N[(Pi * l), $MachinePrecision] - N[(N[(1.0 / N[(F * F), $MachinePrecision]), $MachinePrecision] * N[Tan[N[(Pi * l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\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 7 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.1% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right) \end{array} \]
(FPCore (F l)
 :precision binary64
 (- (* PI l) (* (/ 1.0 (* F F)) (tan (* PI l)))))
double code(double F, double l) {
	return (((double) M_PI) * l) - ((1.0 / (F * F)) * tan((((double) M_PI) * l)));
}
public static double code(double F, double l) {
	return (Math.PI * l) - ((1.0 / (F * F)) * Math.tan((Math.PI * l)));
}
def code(F, l):
	return (math.pi * l) - ((1.0 / (F * F)) * math.tan((math.pi * l)))
function code(F, l)
	return Float64(Float64(pi * l) - Float64(Float64(1.0 / Float64(F * F)) * tan(Float64(pi * l))))
end
function tmp = code(F, l)
	tmp = (pi * l) - ((1.0 / (F * F)) * tan((pi * l)));
end
code[F_, l_] := N[(N[(Pi * l), $MachinePrecision] - N[(N[(1.0 / N[(F * F), $MachinePrecision]), $MachinePrecision] * N[Tan[N[(Pi * l), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right)
\end{array}

Alternative 1: 97.0% accurate, 0.0× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_0 := {\pi}^{3} \cdot 0.008333333333333333\\ t_1 := -0.16666666666666666 \cdot {\pi}^{3}\\ t_2 := \pi \cdot -0.5 - \pi \cdot -0.16666666666666666\\ t_3 := -0.5 \cdot {\pi}^{3}\\ t_4 := t\_1 - t\_3\\ t_5 := -0.5 \cdot t\_4\\ t_6 := {\pi}^{3} \cdot 0.041666666666666664\\ t_7 := t\_3 - t\_1\\ t_8 := 0.008333333333333333 \cdot {\pi}^{5} - \left(0.041666666666666664 \cdot {\pi}^{5} - -0.5 \cdot \left({\pi}^{2} \cdot t\_7\right)\right)\\ \pi \cdot \ell + \frac{\frac{-1}{F}}{F \cdot \frac{{\ell}^{2} \cdot \left(\left(\pi \cdot -0.5 + {\ell}^{2} \cdot \left(\left(t\_5 + \left(t\_6 + {\ell}^{2} \cdot \left(\left(-0.5 \cdot t\_8 + \left({\pi}^{5} \cdot -0.001388888888888889 + 0.041666666666666664 \cdot \left(t\_4 \cdot {\pi}^{2}\right)\right)\right) - \left({\pi}^{5} \cdot -0.0001984126984126984 + \left(\frac{t\_8 \cdot t\_2}{\pi} + \frac{t\_4 \cdot \left(\left(t\_5 + t\_6\right) - \left(t\_0 + \frac{t\_4 \cdot t\_2}{\pi}\right)\right)}{\pi}\right)\right)\right)\right)\right) + \left(\frac{t\_2 \cdot t\_7}{\pi} - t\_0\right)\right)\right) - \pi \cdot -0.16666666666666666\right) + \frac{1}{\pi}}{\ell}} \end{array} \end{array} \]
(FPCore (F l)
 :precision binary64
 (let* ((t_0 (* (pow PI 3.0) 0.008333333333333333))
        (t_1 (* -0.16666666666666666 (pow PI 3.0)))
        (t_2 (- (* PI -0.5) (* PI -0.16666666666666666)))
        (t_3 (* -0.5 (pow PI 3.0)))
        (t_4 (- t_1 t_3))
        (t_5 (* -0.5 t_4))
        (t_6 (* (pow PI 3.0) 0.041666666666666664))
        (t_7 (- t_3 t_1))
        (t_8
         (-
          (* 0.008333333333333333 (pow PI 5.0))
          (-
           (* 0.041666666666666664 (pow PI 5.0))
           (* -0.5 (* (pow PI 2.0) t_7))))))
   (+
    (* PI l)
    (/
     (/ -1.0 F)
     (*
      F
      (/
       (+
        (*
         (pow l 2.0)
         (-
          (+
           (* PI -0.5)
           (*
            (pow l 2.0)
            (+
             (+
              t_5
              (+
               t_6
               (*
                (pow l 2.0)
                (-
                 (+
                  (* -0.5 t_8)
                  (+
                   (* (pow PI 5.0) -0.001388888888888889)
                   (* 0.041666666666666664 (* t_4 (pow PI 2.0)))))
                 (+
                  (* (pow PI 5.0) -0.0001984126984126984)
                  (+
                   (/ (* t_8 t_2) PI)
                   (/
                    (* t_4 (- (+ t_5 t_6) (+ t_0 (/ (* t_4 t_2) PI))))
                    PI)))))))
             (- (/ (* t_2 t_7) PI) t_0))))
          (* PI -0.16666666666666666)))
        (/ 1.0 PI))
       l))))))
double code(double F, double l) {
	double t_0 = pow(((double) M_PI), 3.0) * 0.008333333333333333;
	double t_1 = -0.16666666666666666 * pow(((double) M_PI), 3.0);
	double t_2 = (((double) M_PI) * -0.5) - (((double) M_PI) * -0.16666666666666666);
	double t_3 = -0.5 * pow(((double) M_PI), 3.0);
	double t_4 = t_1 - t_3;
	double t_5 = -0.5 * t_4;
	double t_6 = pow(((double) M_PI), 3.0) * 0.041666666666666664;
	double t_7 = t_3 - t_1;
	double t_8 = (0.008333333333333333 * pow(((double) M_PI), 5.0)) - ((0.041666666666666664 * pow(((double) M_PI), 5.0)) - (-0.5 * (pow(((double) M_PI), 2.0) * t_7)));
	return (((double) M_PI) * l) + ((-1.0 / F) / (F * (((pow(l, 2.0) * (((((double) M_PI) * -0.5) + (pow(l, 2.0) * ((t_5 + (t_6 + (pow(l, 2.0) * (((-0.5 * t_8) + ((pow(((double) M_PI), 5.0) * -0.001388888888888889) + (0.041666666666666664 * (t_4 * pow(((double) M_PI), 2.0))))) - ((pow(((double) M_PI), 5.0) * -0.0001984126984126984) + (((t_8 * t_2) / ((double) M_PI)) + ((t_4 * ((t_5 + t_6) - (t_0 + ((t_4 * t_2) / ((double) M_PI))))) / ((double) M_PI)))))))) + (((t_2 * t_7) / ((double) M_PI)) - t_0)))) - (((double) M_PI) * -0.16666666666666666))) + (1.0 / ((double) M_PI))) / l)));
}
public static double code(double F, double l) {
	double t_0 = Math.pow(Math.PI, 3.0) * 0.008333333333333333;
	double t_1 = -0.16666666666666666 * Math.pow(Math.PI, 3.0);
	double t_2 = (Math.PI * -0.5) - (Math.PI * -0.16666666666666666);
	double t_3 = -0.5 * Math.pow(Math.PI, 3.0);
	double t_4 = t_1 - t_3;
	double t_5 = -0.5 * t_4;
	double t_6 = Math.pow(Math.PI, 3.0) * 0.041666666666666664;
	double t_7 = t_3 - t_1;
	double t_8 = (0.008333333333333333 * Math.pow(Math.PI, 5.0)) - ((0.041666666666666664 * Math.pow(Math.PI, 5.0)) - (-0.5 * (Math.pow(Math.PI, 2.0) * t_7)));
	return (Math.PI * l) + ((-1.0 / F) / (F * (((Math.pow(l, 2.0) * (((Math.PI * -0.5) + (Math.pow(l, 2.0) * ((t_5 + (t_6 + (Math.pow(l, 2.0) * (((-0.5 * t_8) + ((Math.pow(Math.PI, 5.0) * -0.001388888888888889) + (0.041666666666666664 * (t_4 * Math.pow(Math.PI, 2.0))))) - ((Math.pow(Math.PI, 5.0) * -0.0001984126984126984) + (((t_8 * t_2) / Math.PI) + ((t_4 * ((t_5 + t_6) - (t_0 + ((t_4 * t_2) / Math.PI)))) / Math.PI))))))) + (((t_2 * t_7) / Math.PI) - t_0)))) - (Math.PI * -0.16666666666666666))) + (1.0 / Math.PI)) / l)));
}
def code(F, l):
	t_0 = math.pow(math.pi, 3.0) * 0.008333333333333333
	t_1 = -0.16666666666666666 * math.pow(math.pi, 3.0)
	t_2 = (math.pi * -0.5) - (math.pi * -0.16666666666666666)
	t_3 = -0.5 * math.pow(math.pi, 3.0)
	t_4 = t_1 - t_3
	t_5 = -0.5 * t_4
	t_6 = math.pow(math.pi, 3.0) * 0.041666666666666664
	t_7 = t_3 - t_1
	t_8 = (0.008333333333333333 * math.pow(math.pi, 5.0)) - ((0.041666666666666664 * math.pow(math.pi, 5.0)) - (-0.5 * (math.pow(math.pi, 2.0) * t_7)))
	return (math.pi * l) + ((-1.0 / F) / (F * (((math.pow(l, 2.0) * (((math.pi * -0.5) + (math.pow(l, 2.0) * ((t_5 + (t_6 + (math.pow(l, 2.0) * (((-0.5 * t_8) + ((math.pow(math.pi, 5.0) * -0.001388888888888889) + (0.041666666666666664 * (t_4 * math.pow(math.pi, 2.0))))) - ((math.pow(math.pi, 5.0) * -0.0001984126984126984) + (((t_8 * t_2) / math.pi) + ((t_4 * ((t_5 + t_6) - (t_0 + ((t_4 * t_2) / math.pi)))) / math.pi))))))) + (((t_2 * t_7) / math.pi) - t_0)))) - (math.pi * -0.16666666666666666))) + (1.0 / math.pi)) / l)))
function code(F, l)
	t_0 = Float64((pi ^ 3.0) * 0.008333333333333333)
	t_1 = Float64(-0.16666666666666666 * (pi ^ 3.0))
	t_2 = Float64(Float64(pi * -0.5) - Float64(pi * -0.16666666666666666))
	t_3 = Float64(-0.5 * (pi ^ 3.0))
	t_4 = Float64(t_1 - t_3)
	t_5 = Float64(-0.5 * t_4)
	t_6 = Float64((pi ^ 3.0) * 0.041666666666666664)
	t_7 = Float64(t_3 - t_1)
	t_8 = Float64(Float64(0.008333333333333333 * (pi ^ 5.0)) - Float64(Float64(0.041666666666666664 * (pi ^ 5.0)) - Float64(-0.5 * Float64((pi ^ 2.0) * t_7))))
	return Float64(Float64(pi * l) + Float64(Float64(-1.0 / F) / Float64(F * Float64(Float64(Float64((l ^ 2.0) * Float64(Float64(Float64(pi * -0.5) + Float64((l ^ 2.0) * Float64(Float64(t_5 + Float64(t_6 + Float64((l ^ 2.0) * Float64(Float64(Float64(-0.5 * t_8) + Float64(Float64((pi ^ 5.0) * -0.001388888888888889) + Float64(0.041666666666666664 * Float64(t_4 * (pi ^ 2.0))))) - Float64(Float64((pi ^ 5.0) * -0.0001984126984126984) + Float64(Float64(Float64(t_8 * t_2) / pi) + Float64(Float64(t_4 * Float64(Float64(t_5 + t_6) - Float64(t_0 + Float64(Float64(t_4 * t_2) / pi)))) / pi))))))) + Float64(Float64(Float64(t_2 * t_7) / pi) - t_0)))) - Float64(pi * -0.16666666666666666))) + Float64(1.0 / pi)) / l))))
end
function tmp = code(F, l)
	t_0 = (pi ^ 3.0) * 0.008333333333333333;
	t_1 = -0.16666666666666666 * (pi ^ 3.0);
	t_2 = (pi * -0.5) - (pi * -0.16666666666666666);
	t_3 = -0.5 * (pi ^ 3.0);
	t_4 = t_1 - t_3;
	t_5 = -0.5 * t_4;
	t_6 = (pi ^ 3.0) * 0.041666666666666664;
	t_7 = t_3 - t_1;
	t_8 = (0.008333333333333333 * (pi ^ 5.0)) - ((0.041666666666666664 * (pi ^ 5.0)) - (-0.5 * ((pi ^ 2.0) * t_7)));
	tmp = (pi * l) + ((-1.0 / F) / (F * ((((l ^ 2.0) * (((pi * -0.5) + ((l ^ 2.0) * ((t_5 + (t_6 + ((l ^ 2.0) * (((-0.5 * t_8) + (((pi ^ 5.0) * -0.001388888888888889) + (0.041666666666666664 * (t_4 * (pi ^ 2.0))))) - (((pi ^ 5.0) * -0.0001984126984126984) + (((t_8 * t_2) / pi) + ((t_4 * ((t_5 + t_6) - (t_0 + ((t_4 * t_2) / pi)))) / pi))))))) + (((t_2 * t_7) / pi) - t_0)))) - (pi * -0.16666666666666666))) + (1.0 / pi)) / l)));
end
code[F_, l_] := Block[{t$95$0 = N[(N[Power[Pi, 3.0], $MachinePrecision] * 0.008333333333333333), $MachinePrecision]}, Block[{t$95$1 = N[(-0.16666666666666666 * N[Power[Pi, 3.0], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(Pi * -0.5), $MachinePrecision] - N[(Pi * -0.16666666666666666), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(-0.5 * N[Power[Pi, 3.0], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$4 = N[(t$95$1 - t$95$3), $MachinePrecision]}, Block[{t$95$5 = N[(-0.5 * t$95$4), $MachinePrecision]}, Block[{t$95$6 = N[(N[Power[Pi, 3.0], $MachinePrecision] * 0.041666666666666664), $MachinePrecision]}, Block[{t$95$7 = N[(t$95$3 - t$95$1), $MachinePrecision]}, Block[{t$95$8 = N[(N[(0.008333333333333333 * N[Power[Pi, 5.0], $MachinePrecision]), $MachinePrecision] - N[(N[(0.041666666666666664 * N[Power[Pi, 5.0], $MachinePrecision]), $MachinePrecision] - N[(-0.5 * N[(N[Power[Pi, 2.0], $MachinePrecision] * t$95$7), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(N[(Pi * l), $MachinePrecision] + N[(N[(-1.0 / F), $MachinePrecision] / N[(F * N[(N[(N[(N[Power[l, 2.0], $MachinePrecision] * N[(N[(N[(Pi * -0.5), $MachinePrecision] + N[(N[Power[l, 2.0], $MachinePrecision] * N[(N[(t$95$5 + N[(t$95$6 + N[(N[Power[l, 2.0], $MachinePrecision] * N[(N[(N[(-0.5 * t$95$8), $MachinePrecision] + N[(N[(N[Power[Pi, 5.0], $MachinePrecision] * -0.001388888888888889), $MachinePrecision] + N[(0.041666666666666664 * N[(t$95$4 * N[Power[Pi, 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(N[(N[Power[Pi, 5.0], $MachinePrecision] * -0.0001984126984126984), $MachinePrecision] + N[(N[(N[(t$95$8 * t$95$2), $MachinePrecision] / Pi), $MachinePrecision] + N[(N[(t$95$4 * N[(N[(t$95$5 + t$95$6), $MachinePrecision] - N[(t$95$0 + N[(N[(t$95$4 * t$95$2), $MachinePrecision] / Pi), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Pi), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(N[(t$95$2 * t$95$7), $MachinePrecision] / Pi), $MachinePrecision] - t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Pi * -0.16666666666666666), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(1.0 / Pi), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]]]
\begin{array}{l}

\\
\begin{array}{l}
t_0 := {\pi}^{3} \cdot 0.008333333333333333\\
t_1 := -0.16666666666666666 \cdot {\pi}^{3}\\
t_2 := \pi \cdot -0.5 - \pi \cdot -0.16666666666666666\\
t_3 := -0.5 \cdot {\pi}^{3}\\
t_4 := t\_1 - t\_3\\
t_5 := -0.5 \cdot t\_4\\
t_6 := {\pi}^{3} \cdot 0.041666666666666664\\
t_7 := t\_3 - t\_1\\
t_8 := 0.008333333333333333 \cdot {\pi}^{5} - \left(0.041666666666666664 \cdot {\pi}^{5} - -0.5 \cdot \left({\pi}^{2} \cdot t\_7\right)\right)\\
\pi \cdot \ell + \frac{\frac{-1}{F}}{F \cdot \frac{{\ell}^{2} \cdot \left(\left(\pi \cdot -0.5 + {\ell}^{2} \cdot \left(\left(t\_5 + \left(t\_6 + {\ell}^{2} \cdot \left(\left(-0.5 \cdot t\_8 + \left({\pi}^{5} \cdot -0.001388888888888889 + 0.041666666666666664 \cdot \left(t\_4 \cdot {\pi}^{2}\right)\right)\right) - \left({\pi}^{5} \cdot -0.0001984126984126984 + \left(\frac{t\_8 \cdot t\_2}{\pi} + \frac{t\_4 \cdot \left(\left(t\_5 + t\_6\right) - \left(t\_0 + \frac{t\_4 \cdot t\_2}{\pi}\right)\right)}{\pi}\right)\right)\right)\right)\right) + \left(\frac{t\_2 \cdot t\_7}{\pi} - t\_0\right)\right)\right) - \pi \cdot -0.16666666666666666\right) + \frac{1}{\pi}}{\ell}}
\end{array}
\end{array}
Derivation
  1. Initial program 75.3%

    \[\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right) \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. tan-quot75.3%

      \[\leadsto \pi \cdot \ell - \frac{1}{F \cdot F} \cdot \color{blue}{\frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)}} \]
  4. Applied egg-rr75.3%

    \[\leadsto \pi \cdot \ell - \frac{1}{F \cdot F} \cdot \color{blue}{\frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)}} \]
  5. Step-by-step derivation
    1. tan-quot75.3%

      \[\leadsto \pi \cdot \ell - \frac{1}{F \cdot F} \cdot \color{blue}{\tan \left(\pi \cdot \ell\right)} \]
    2. *-commutative75.3%

      \[\leadsto \pi \cdot \ell - \color{blue}{\tan \left(\pi \cdot \ell\right) \cdot \frac{1}{F \cdot F}} \]
    3. add-sqr-sqrt75.3%

      \[\leadsto \pi \cdot \ell - \tan \left(\pi \cdot \ell\right) \cdot \color{blue}{\left(\sqrt{\frac{1}{F \cdot F}} \cdot \sqrt{\frac{1}{F \cdot F}}\right)} \]
    4. tan-quot75.3%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)}} \cdot \left(\sqrt{\frac{1}{F \cdot F}} \cdot \sqrt{\frac{1}{F \cdot F}}\right) \]
    5. sqrt-div75.3%

      \[\leadsto \pi \cdot \ell - \frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)} \cdot \left(\sqrt{\frac{1}{F \cdot F}} \cdot \color{blue}{\frac{\sqrt{1}}{\sqrt{F \cdot F}}}\right) \]
    6. metadata-eval75.3%

      \[\leadsto \pi \cdot \ell - \frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)} \cdot \left(\sqrt{\frac{1}{F \cdot F}} \cdot \frac{\color{blue}{1}}{\sqrt{F \cdot F}}\right) \]
    7. sqrt-prod37.1%

      \[\leadsto \pi \cdot \ell - \frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)} \cdot \left(\sqrt{\frac{1}{F \cdot F}} \cdot \frac{1}{\color{blue}{\sqrt{F} \cdot \sqrt{F}}}\right) \]
    8. add-sqr-sqrt63.3%

      \[\leadsto \pi \cdot \ell - \frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)} \cdot \left(\sqrt{\frac{1}{F \cdot F}} \cdot \frac{1}{\color{blue}{F}}\right) \]
    9. div-inv63.3%

      \[\leadsto \pi \cdot \ell - \frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)} \cdot \color{blue}{\frac{\sqrt{\frac{1}{F \cdot F}}}{F}} \]
    10. clear-num63.3%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{1}{\frac{\cos \left(\pi \cdot \ell\right)}{\sin \left(\pi \cdot \ell\right)}}} \cdot \frac{\sqrt{\frac{1}{F \cdot F}}}{F} \]
    11. frac-times63.3%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{1 \cdot \sqrt{\frac{1}{F \cdot F}}}{\frac{\cos \left(\pi \cdot \ell\right)}{\sin \left(\pi \cdot \ell\right)} \cdot F}} \]
  6. Applied egg-rr83.2%

    \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\frac{1}{F}}{\frac{1}{\tan \left(\pi \cdot \ell\right)} \cdot F}} \]
  7. Taylor expanded in l around 0 97.3%

    \[\leadsto \pi \cdot \ell - \frac{\frac{1}{F}}{\color{blue}{\frac{{\ell}^{2} \cdot \left(\left(-0.5 \cdot \pi + {\ell}^{2} \cdot \left(\left(-0.5 \cdot \left(-0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\right) + \left(0.041666666666666664 \cdot {\pi}^{3} + {\ell}^{2} \cdot \left(\left(-0.5 \cdot \left(0.008333333333333333 \cdot {\pi}^{5} - \left(-0.5 \cdot \left({\pi}^{2} \cdot \left(-0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\right)\right) + 0.041666666666666664 \cdot {\pi}^{5}\right)\right) + \left(-0.001388888888888889 \cdot {\pi}^{5} + 0.041666666666666664 \cdot \left({\pi}^{2} \cdot \left(-0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\right)\right)\right)\right) - \left(-0.0001984126984126984 \cdot {\pi}^{5} + \left(\frac{\left(-0.5 \cdot \pi - -0.16666666666666666 \cdot \pi\right) \cdot \left(0.008333333333333333 \cdot {\pi}^{5} - \left(-0.5 \cdot \left({\pi}^{2} \cdot \left(-0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\right)\right) + 0.041666666666666664 \cdot {\pi}^{5}\right)\right)}{\pi} + \frac{\left(-0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\right) \cdot \left(\left(-0.5 \cdot \left(-0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\right) + 0.041666666666666664 \cdot {\pi}^{3}\right) - \left(0.008333333333333333 \cdot {\pi}^{3} + \frac{\left(-0.5 \cdot \pi - -0.16666666666666666 \cdot \pi\right) \cdot \left(-0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\right)}{\pi}\right)\right)}{\pi}\right)\right)\right)\right)\right) - \left(0.008333333333333333 \cdot {\pi}^{3} + \frac{\left(-0.5 \cdot \pi - -0.16666666666666666 \cdot \pi\right) \cdot \left(-0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\right)}{\pi}\right)\right)\right) - -0.16666666666666666 \cdot \pi\right) + \frac{1}{\pi}}{\ell}} \cdot F} \]
  8. Final simplification97.3%

    \[\leadsto \pi \cdot \ell + \frac{\frac{-1}{F}}{F \cdot \frac{{\ell}^{2} \cdot \left(\left(\pi \cdot -0.5 + {\ell}^{2} \cdot \left(\left(-0.5 \cdot \left(-0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\right) + \left({\pi}^{3} \cdot 0.041666666666666664 + {\ell}^{2} \cdot \left(\left(-0.5 \cdot \left(0.008333333333333333 \cdot {\pi}^{5} - \left(0.041666666666666664 \cdot {\pi}^{5} - -0.5 \cdot \left({\pi}^{2} \cdot \left(-0.5 \cdot {\pi}^{3} - -0.16666666666666666 \cdot {\pi}^{3}\right)\right)\right)\right) + \left({\pi}^{5} \cdot -0.001388888888888889 + 0.041666666666666664 \cdot \left(\left(-0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\right) \cdot {\pi}^{2}\right)\right)\right) - \left({\pi}^{5} \cdot -0.0001984126984126984 + \left(\frac{\left(0.008333333333333333 \cdot {\pi}^{5} - \left(0.041666666666666664 \cdot {\pi}^{5} - -0.5 \cdot \left({\pi}^{2} \cdot \left(-0.5 \cdot {\pi}^{3} - -0.16666666666666666 \cdot {\pi}^{3}\right)\right)\right)\right) \cdot \left(\pi \cdot -0.5 - \pi \cdot -0.16666666666666666\right)}{\pi} + \frac{\left(-0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\right) \cdot \left(\left(-0.5 \cdot \left(-0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\right) + {\pi}^{3} \cdot 0.041666666666666664\right) - \left({\pi}^{3} \cdot 0.008333333333333333 + \frac{\left(-0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\right) \cdot \left(\pi \cdot -0.5 - \pi \cdot -0.16666666666666666\right)}{\pi}\right)\right)}{\pi}\right)\right)\right)\right)\right) + \left(\frac{\left(\pi \cdot -0.5 - \pi \cdot -0.16666666666666666\right) \cdot \left(-0.5 \cdot {\pi}^{3} - -0.16666666666666666 \cdot {\pi}^{3}\right)}{\pi} - {\pi}^{3} \cdot 0.008333333333333333\right)\right)\right) - \pi \cdot -0.16666666666666666\right) + \frac{1}{\pi}}{\ell}} \]
  9. Add Preprocessing

Alternative 2: 95.5% accurate, 0.1× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_0 := -0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\\ \pi \cdot \ell + \frac{\frac{-1}{F}}{F \cdot \frac{\frac{1}{\pi} + {\ell}^{2} \cdot \left(\left(\pi \cdot -0.5 + {\ell}^{2} \cdot \left(\left(-0.5 \cdot t\_0 + {\pi}^{3} \cdot 0.041666666666666664\right) - \left({\pi}^{3} \cdot 0.008333333333333333 + \frac{t\_0 \cdot \left(\pi \cdot -0.5 - \pi \cdot -0.16666666666666666\right)}{\pi}\right)\right)\right) - \pi \cdot -0.16666666666666666\right)}{\ell}} \end{array} \end{array} \]
(FPCore (F l)
 :precision binary64
 (let* ((t_0 (- (* -0.16666666666666666 (pow PI 3.0)) (* -0.5 (pow PI 3.0)))))
   (+
    (* PI l)
    (/
     (/ -1.0 F)
     (*
      F
      (/
       (+
        (/ 1.0 PI)
        (*
         (pow l 2.0)
         (-
          (+
           (* PI -0.5)
           (*
            (pow l 2.0)
            (-
             (+ (* -0.5 t_0) (* (pow PI 3.0) 0.041666666666666664))
             (+
              (* (pow PI 3.0) 0.008333333333333333)
              (/ (* t_0 (- (* PI -0.5) (* PI -0.16666666666666666))) PI)))))
          (* PI -0.16666666666666666))))
       l))))))
double code(double F, double l) {
	double t_0 = (-0.16666666666666666 * pow(((double) M_PI), 3.0)) - (-0.5 * pow(((double) M_PI), 3.0));
	return (((double) M_PI) * l) + ((-1.0 / F) / (F * (((1.0 / ((double) M_PI)) + (pow(l, 2.0) * (((((double) M_PI) * -0.5) + (pow(l, 2.0) * (((-0.5 * t_0) + (pow(((double) M_PI), 3.0) * 0.041666666666666664)) - ((pow(((double) M_PI), 3.0) * 0.008333333333333333) + ((t_0 * ((((double) M_PI) * -0.5) - (((double) M_PI) * -0.16666666666666666))) / ((double) M_PI)))))) - (((double) M_PI) * -0.16666666666666666)))) / l)));
}
public static double code(double F, double l) {
	double t_0 = (-0.16666666666666666 * Math.pow(Math.PI, 3.0)) - (-0.5 * Math.pow(Math.PI, 3.0));
	return (Math.PI * l) + ((-1.0 / F) / (F * (((1.0 / Math.PI) + (Math.pow(l, 2.0) * (((Math.PI * -0.5) + (Math.pow(l, 2.0) * (((-0.5 * t_0) + (Math.pow(Math.PI, 3.0) * 0.041666666666666664)) - ((Math.pow(Math.PI, 3.0) * 0.008333333333333333) + ((t_0 * ((Math.PI * -0.5) - (Math.PI * -0.16666666666666666))) / Math.PI))))) - (Math.PI * -0.16666666666666666)))) / l)));
}
def code(F, l):
	t_0 = (-0.16666666666666666 * math.pow(math.pi, 3.0)) - (-0.5 * math.pow(math.pi, 3.0))
	return (math.pi * l) + ((-1.0 / F) / (F * (((1.0 / math.pi) + (math.pow(l, 2.0) * (((math.pi * -0.5) + (math.pow(l, 2.0) * (((-0.5 * t_0) + (math.pow(math.pi, 3.0) * 0.041666666666666664)) - ((math.pow(math.pi, 3.0) * 0.008333333333333333) + ((t_0 * ((math.pi * -0.5) - (math.pi * -0.16666666666666666))) / math.pi))))) - (math.pi * -0.16666666666666666)))) / l)))
function code(F, l)
	t_0 = Float64(Float64(-0.16666666666666666 * (pi ^ 3.0)) - Float64(-0.5 * (pi ^ 3.0)))
	return Float64(Float64(pi * l) + Float64(Float64(-1.0 / F) / Float64(F * Float64(Float64(Float64(1.0 / pi) + Float64((l ^ 2.0) * Float64(Float64(Float64(pi * -0.5) + Float64((l ^ 2.0) * Float64(Float64(Float64(-0.5 * t_0) + Float64((pi ^ 3.0) * 0.041666666666666664)) - Float64(Float64((pi ^ 3.0) * 0.008333333333333333) + Float64(Float64(t_0 * Float64(Float64(pi * -0.5) - Float64(pi * -0.16666666666666666))) / pi))))) - Float64(pi * -0.16666666666666666)))) / l))))
end
function tmp = code(F, l)
	t_0 = (-0.16666666666666666 * (pi ^ 3.0)) - (-0.5 * (pi ^ 3.0));
	tmp = (pi * l) + ((-1.0 / F) / (F * (((1.0 / pi) + ((l ^ 2.0) * (((pi * -0.5) + ((l ^ 2.0) * (((-0.5 * t_0) + ((pi ^ 3.0) * 0.041666666666666664)) - (((pi ^ 3.0) * 0.008333333333333333) + ((t_0 * ((pi * -0.5) - (pi * -0.16666666666666666))) / pi))))) - (pi * -0.16666666666666666)))) / l)));
end
code[F_, l_] := Block[{t$95$0 = N[(N[(-0.16666666666666666 * N[Power[Pi, 3.0], $MachinePrecision]), $MachinePrecision] - N[(-0.5 * N[Power[Pi, 3.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(N[(Pi * l), $MachinePrecision] + N[(N[(-1.0 / F), $MachinePrecision] / N[(F * N[(N[(N[(1.0 / Pi), $MachinePrecision] + N[(N[Power[l, 2.0], $MachinePrecision] * N[(N[(N[(Pi * -0.5), $MachinePrecision] + N[(N[Power[l, 2.0], $MachinePrecision] * N[(N[(N[(-0.5 * t$95$0), $MachinePrecision] + N[(N[Power[Pi, 3.0], $MachinePrecision] * 0.041666666666666664), $MachinePrecision]), $MachinePrecision] - N[(N[(N[Power[Pi, 3.0], $MachinePrecision] * 0.008333333333333333), $MachinePrecision] + N[(N[(t$95$0 * N[(N[(Pi * -0.5), $MachinePrecision] - N[(Pi * -0.16666666666666666), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Pi), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(Pi * -0.16666666666666666), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}

\\
\begin{array}{l}
t_0 := -0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\\
\pi \cdot \ell + \frac{\frac{-1}{F}}{F \cdot \frac{\frac{1}{\pi} + {\ell}^{2} \cdot \left(\left(\pi \cdot -0.5 + {\ell}^{2} \cdot \left(\left(-0.5 \cdot t\_0 + {\pi}^{3} \cdot 0.041666666666666664\right) - \left({\pi}^{3} \cdot 0.008333333333333333 + \frac{t\_0 \cdot \left(\pi \cdot -0.5 - \pi \cdot -0.16666666666666666\right)}{\pi}\right)\right)\right) - \pi \cdot -0.16666666666666666\right)}{\ell}}
\end{array}
\end{array}
Derivation
  1. Initial program 75.3%

    \[\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right) \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. tan-quot75.3%

      \[\leadsto \pi \cdot \ell - \frac{1}{F \cdot F} \cdot \color{blue}{\frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)}} \]
  4. Applied egg-rr75.3%

    \[\leadsto \pi \cdot \ell - \frac{1}{F \cdot F} \cdot \color{blue}{\frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)}} \]
  5. Step-by-step derivation
    1. tan-quot75.3%

      \[\leadsto \pi \cdot \ell - \frac{1}{F \cdot F} \cdot \color{blue}{\tan \left(\pi \cdot \ell\right)} \]
    2. *-commutative75.3%

      \[\leadsto \pi \cdot \ell - \color{blue}{\tan \left(\pi \cdot \ell\right) \cdot \frac{1}{F \cdot F}} \]
    3. add-sqr-sqrt75.3%

      \[\leadsto \pi \cdot \ell - \tan \left(\pi \cdot \ell\right) \cdot \color{blue}{\left(\sqrt{\frac{1}{F \cdot F}} \cdot \sqrt{\frac{1}{F \cdot F}}\right)} \]
    4. tan-quot75.3%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)}} \cdot \left(\sqrt{\frac{1}{F \cdot F}} \cdot \sqrt{\frac{1}{F \cdot F}}\right) \]
    5. sqrt-div75.3%

      \[\leadsto \pi \cdot \ell - \frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)} \cdot \left(\sqrt{\frac{1}{F \cdot F}} \cdot \color{blue}{\frac{\sqrt{1}}{\sqrt{F \cdot F}}}\right) \]
    6. metadata-eval75.3%

      \[\leadsto \pi \cdot \ell - \frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)} \cdot \left(\sqrt{\frac{1}{F \cdot F}} \cdot \frac{\color{blue}{1}}{\sqrt{F \cdot F}}\right) \]
    7. sqrt-prod37.1%

      \[\leadsto \pi \cdot \ell - \frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)} \cdot \left(\sqrt{\frac{1}{F \cdot F}} \cdot \frac{1}{\color{blue}{\sqrt{F} \cdot \sqrt{F}}}\right) \]
    8. add-sqr-sqrt63.3%

      \[\leadsto \pi \cdot \ell - \frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)} \cdot \left(\sqrt{\frac{1}{F \cdot F}} \cdot \frac{1}{\color{blue}{F}}\right) \]
    9. div-inv63.3%

      \[\leadsto \pi \cdot \ell - \frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)} \cdot \color{blue}{\frac{\sqrt{\frac{1}{F \cdot F}}}{F}} \]
    10. clear-num63.3%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{1}{\frac{\cos \left(\pi \cdot \ell\right)}{\sin \left(\pi \cdot \ell\right)}}} \cdot \frac{\sqrt{\frac{1}{F \cdot F}}}{F} \]
    11. frac-times63.3%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{1 \cdot \sqrt{\frac{1}{F \cdot F}}}{\frac{\cos \left(\pi \cdot \ell\right)}{\sin \left(\pi \cdot \ell\right)} \cdot F}} \]
  6. Applied egg-rr83.2%

    \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\frac{1}{F}}{\frac{1}{\tan \left(\pi \cdot \ell\right)} \cdot F}} \]
  7. Taylor expanded in l around 0 96.2%

    \[\leadsto \pi \cdot \ell - \frac{\frac{1}{F}}{\color{blue}{\frac{{\ell}^{2} \cdot \left(\left(-0.5 \cdot \pi + {\ell}^{2} \cdot \left(\left(-0.5 \cdot \left(-0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\right) + 0.041666666666666664 \cdot {\pi}^{3}\right) - \left(0.008333333333333333 \cdot {\pi}^{3} + \frac{\left(-0.5 \cdot \pi - -0.16666666666666666 \cdot \pi\right) \cdot \left(-0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\right)}{\pi}\right)\right)\right) - -0.16666666666666666 \cdot \pi\right) + \frac{1}{\pi}}{\ell}} \cdot F} \]
  8. Final simplification96.2%

    \[\leadsto \pi \cdot \ell + \frac{\frac{-1}{F}}{F \cdot \frac{\frac{1}{\pi} + {\ell}^{2} \cdot \left(\left(\pi \cdot -0.5 + {\ell}^{2} \cdot \left(\left(-0.5 \cdot \left(-0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\right) + {\pi}^{3} \cdot 0.041666666666666664\right) - \left({\pi}^{3} \cdot 0.008333333333333333 + \frac{\left(-0.16666666666666666 \cdot {\pi}^{3} - -0.5 \cdot {\pi}^{3}\right) \cdot \left(\pi \cdot -0.5 - \pi \cdot -0.16666666666666666\right)}{\pi}\right)\right)\right) - \pi \cdot -0.16666666666666666\right)}{\ell}} \]
  9. Add Preprocessing

Alternative 3: 91.0% accurate, 0.9× speedup?

\[\begin{array}{l} \\ \pi \cdot \ell + \frac{\frac{-1}{F}}{F \cdot \frac{\frac{1}{\pi} + {\ell}^{2} \cdot \left(\pi \cdot -0.5 - \pi \cdot -0.16666666666666666\right)}{\ell}} \end{array} \]
(FPCore (F l)
 :precision binary64
 (+
  (* PI l)
  (/
   (/ -1.0 F)
   (*
    F
    (/
     (+ (/ 1.0 PI) (* (pow l 2.0) (- (* PI -0.5) (* PI -0.16666666666666666))))
     l)))))
double code(double F, double l) {
	return (((double) M_PI) * l) + ((-1.0 / F) / (F * (((1.0 / ((double) M_PI)) + (pow(l, 2.0) * ((((double) M_PI) * -0.5) - (((double) M_PI) * -0.16666666666666666)))) / l)));
}
public static double code(double F, double l) {
	return (Math.PI * l) + ((-1.0 / F) / (F * (((1.0 / Math.PI) + (Math.pow(l, 2.0) * ((Math.PI * -0.5) - (Math.PI * -0.16666666666666666)))) / l)));
}
def code(F, l):
	return (math.pi * l) + ((-1.0 / F) / (F * (((1.0 / math.pi) + (math.pow(l, 2.0) * ((math.pi * -0.5) - (math.pi * -0.16666666666666666)))) / l)))
function code(F, l)
	return Float64(Float64(pi * l) + Float64(Float64(-1.0 / F) / Float64(F * Float64(Float64(Float64(1.0 / pi) + Float64((l ^ 2.0) * Float64(Float64(pi * -0.5) - Float64(pi * -0.16666666666666666)))) / l))))
end
function tmp = code(F, l)
	tmp = (pi * l) + ((-1.0 / F) / (F * (((1.0 / pi) + ((l ^ 2.0) * ((pi * -0.5) - (pi * -0.16666666666666666)))) / l)));
end
code[F_, l_] := N[(N[(Pi * l), $MachinePrecision] + N[(N[(-1.0 / F), $MachinePrecision] / N[(F * N[(N[(N[(1.0 / Pi), $MachinePrecision] + N[(N[Power[l, 2.0], $MachinePrecision] * N[(N[(Pi * -0.5), $MachinePrecision] - N[(Pi * -0.16666666666666666), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\pi \cdot \ell + \frac{\frac{-1}{F}}{F \cdot \frac{\frac{1}{\pi} + {\ell}^{2} \cdot \left(\pi \cdot -0.5 - \pi \cdot -0.16666666666666666\right)}{\ell}}
\end{array}
Derivation
  1. Initial program 75.3%

    \[\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right) \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. tan-quot75.3%

      \[\leadsto \pi \cdot \ell - \frac{1}{F \cdot F} \cdot \color{blue}{\frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)}} \]
  4. Applied egg-rr75.3%

    \[\leadsto \pi \cdot \ell - \frac{1}{F \cdot F} \cdot \color{blue}{\frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)}} \]
  5. Step-by-step derivation
    1. tan-quot75.3%

      \[\leadsto \pi \cdot \ell - \frac{1}{F \cdot F} \cdot \color{blue}{\tan \left(\pi \cdot \ell\right)} \]
    2. *-commutative75.3%

      \[\leadsto \pi \cdot \ell - \color{blue}{\tan \left(\pi \cdot \ell\right) \cdot \frac{1}{F \cdot F}} \]
    3. add-sqr-sqrt75.3%

      \[\leadsto \pi \cdot \ell - \tan \left(\pi \cdot \ell\right) \cdot \color{blue}{\left(\sqrt{\frac{1}{F \cdot F}} \cdot \sqrt{\frac{1}{F \cdot F}}\right)} \]
    4. tan-quot75.3%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)}} \cdot \left(\sqrt{\frac{1}{F \cdot F}} \cdot \sqrt{\frac{1}{F \cdot F}}\right) \]
    5. sqrt-div75.3%

      \[\leadsto \pi \cdot \ell - \frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)} \cdot \left(\sqrt{\frac{1}{F \cdot F}} \cdot \color{blue}{\frac{\sqrt{1}}{\sqrt{F \cdot F}}}\right) \]
    6. metadata-eval75.3%

      \[\leadsto \pi \cdot \ell - \frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)} \cdot \left(\sqrt{\frac{1}{F \cdot F}} \cdot \frac{\color{blue}{1}}{\sqrt{F \cdot F}}\right) \]
    7. sqrt-prod37.1%

      \[\leadsto \pi \cdot \ell - \frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)} \cdot \left(\sqrt{\frac{1}{F \cdot F}} \cdot \frac{1}{\color{blue}{\sqrt{F} \cdot \sqrt{F}}}\right) \]
    8. add-sqr-sqrt63.3%

      \[\leadsto \pi \cdot \ell - \frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)} \cdot \left(\sqrt{\frac{1}{F \cdot F}} \cdot \frac{1}{\color{blue}{F}}\right) \]
    9. div-inv63.3%

      \[\leadsto \pi \cdot \ell - \frac{\sin \left(\pi \cdot \ell\right)}{\cos \left(\pi \cdot \ell\right)} \cdot \color{blue}{\frac{\sqrt{\frac{1}{F \cdot F}}}{F}} \]
    10. clear-num63.3%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{1}{\frac{\cos \left(\pi \cdot \ell\right)}{\sin \left(\pi \cdot \ell\right)}}} \cdot \frac{\sqrt{\frac{1}{F \cdot F}}}{F} \]
    11. frac-times63.3%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{1 \cdot \sqrt{\frac{1}{F \cdot F}}}{\frac{\cos \left(\pi \cdot \ell\right)}{\sin \left(\pi \cdot \ell\right)} \cdot F}} \]
  6. Applied egg-rr83.2%

    \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\frac{1}{F}}{\frac{1}{\tan \left(\pi \cdot \ell\right)} \cdot F}} \]
  7. Taylor expanded in l around 0 91.0%

    \[\leadsto \pi \cdot \ell - \frac{\frac{1}{F}}{\color{blue}{\frac{{\ell}^{2} \cdot \left(-0.5 \cdot \pi - -0.16666666666666666 \cdot \pi\right) + \frac{1}{\pi}}{\ell}} \cdot F} \]
  8. Final simplification91.0%

    \[\leadsto \pi \cdot \ell + \frac{\frac{-1}{F}}{F \cdot \frac{\frac{1}{\pi} + {\ell}^{2} \cdot \left(\pi \cdot -0.5 - \pi \cdot -0.16666666666666666\right)}{\ell}} \]
  9. Add Preprocessing

Alternative 4: 78.8% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;\pi \cdot \ell \leq 5 \cdot 10^{-54}:\\ \;\;\;\;\pi \cdot \ell - \frac{\pi}{F \cdot \frac{F}{\ell}}\\ \mathbf{else}:\\ \;\;\;\;\pi \cdot \ell - \frac{\tan \left(\pi \cdot \ell\right)}{F \cdot F}\\ \end{array} \end{array} \]
(FPCore (F l)
 :precision binary64
 (if (<= (* PI l) 5e-54)
   (- (* PI l) (/ PI (* F (/ F l))))
   (- (* PI l) (/ (tan (* PI l)) (* F F)))))
double code(double F, double l) {
	double tmp;
	if ((((double) M_PI) * l) <= 5e-54) {
		tmp = (((double) M_PI) * l) - (((double) M_PI) / (F * (F / l)));
	} else {
		tmp = (((double) M_PI) * l) - (tan((((double) M_PI) * l)) / (F * F));
	}
	return tmp;
}
public static double code(double F, double l) {
	double tmp;
	if ((Math.PI * l) <= 5e-54) {
		tmp = (Math.PI * l) - (Math.PI / (F * (F / l)));
	} else {
		tmp = (Math.PI * l) - (Math.tan((Math.PI * l)) / (F * F));
	}
	return tmp;
}
def code(F, l):
	tmp = 0
	if (math.pi * l) <= 5e-54:
		tmp = (math.pi * l) - (math.pi / (F * (F / l)))
	else:
		tmp = (math.pi * l) - (math.tan((math.pi * l)) / (F * F))
	return tmp
function code(F, l)
	tmp = 0.0
	if (Float64(pi * l) <= 5e-54)
		tmp = Float64(Float64(pi * l) - Float64(pi / Float64(F * Float64(F / l))));
	else
		tmp = Float64(Float64(pi * l) - Float64(tan(Float64(pi * l)) / Float64(F * F)));
	end
	return tmp
end
function tmp_2 = code(F, l)
	tmp = 0.0;
	if ((pi * l) <= 5e-54)
		tmp = (pi * l) - (pi / (F * (F / l)));
	else
		tmp = (pi * l) - (tan((pi * l)) / (F * F));
	end
	tmp_2 = tmp;
end
code[F_, l_] := If[LessEqual[N[(Pi * l), $MachinePrecision], 5e-54], N[(N[(Pi * l), $MachinePrecision] - N[(Pi / N[(F * N[(F / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(Pi * l), $MachinePrecision] - N[(N[Tan[N[(Pi * l), $MachinePrecision]], $MachinePrecision] / N[(F * F), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}

\\
\begin{array}{l}
\mathbf{if}\;\pi \cdot \ell \leq 5 \cdot 10^{-54}:\\
\;\;\;\;\pi \cdot \ell - \frac{\pi}{F \cdot \frac{F}{\ell}}\\

\mathbf{else}:\\
\;\;\;\;\pi \cdot \ell - \frac{\tan \left(\pi \cdot \ell\right)}{F \cdot F}\\


\end{array}
\end{array}
Derivation
  1. Split input into 2 regimes
  2. if (*.f64 (PI.f64) l) < 5.00000000000000015e-54

    1. Initial program 74.9%

      \[\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right) \]
    2. Step-by-step derivation
      1. *-commutative74.9%

        \[\leadsto \pi \cdot \ell - \color{blue}{\tan \left(\pi \cdot \ell\right) \cdot \frac{1}{F \cdot F}} \]
      2. sqr-neg74.9%

        \[\leadsto \pi \cdot \ell - \tan \left(\pi \cdot \ell\right) \cdot \frac{1}{\color{blue}{\left(-F\right) \cdot \left(-F\right)}} \]
      3. associate-*r/75.8%

        \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\tan \left(\pi \cdot \ell\right) \cdot 1}{\left(-F\right) \cdot \left(-F\right)}} \]
      4. sqr-neg75.8%

        \[\leadsto \pi \cdot \ell - \frac{\tan \left(\pi \cdot \ell\right) \cdot 1}{\color{blue}{F \cdot F}} \]
      5. *-rgt-identity75.8%

        \[\leadsto \pi \cdot \ell - \frac{\color{blue}{\tan \left(\pi \cdot \ell\right)}}{F \cdot F} \]
    3. Simplified75.8%

      \[\leadsto \color{blue}{\pi \cdot \ell - \frac{\tan \left(\pi \cdot \ell\right)}{F \cdot F}} \]
    4. Add Preprocessing
    5. Taylor expanded in l around 0 69.8%

      \[\leadsto \pi \cdot \ell - \frac{\color{blue}{\ell \cdot \pi}}{F \cdot F} \]
    6. Step-by-step derivation
      1. *-commutative69.8%

        \[\leadsto \pi \cdot \ell - \frac{\color{blue}{\pi \cdot \ell}}{F \cdot F} \]
      2. times-frac80.1%

        \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\pi}{F} \cdot \frac{\ell}{F}} \]
    7. Applied egg-rr80.1%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\pi}{F} \cdot \frac{\ell}{F}} \]
    8. Step-by-step derivation
      1. *-commutative80.1%

        \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\ell}{F} \cdot \frac{\pi}{F}} \]
      2. clear-num80.1%

        \[\leadsto \pi \cdot \ell - \color{blue}{\frac{1}{\frac{F}{\ell}}} \cdot \frac{\pi}{F} \]
      3. frac-times80.2%

        \[\leadsto \pi \cdot \ell - \color{blue}{\frac{1 \cdot \pi}{\frac{F}{\ell} \cdot F}} \]
      4. *-un-lft-identity80.2%

        \[\leadsto \pi \cdot \ell - \frac{\color{blue}{\pi}}{\frac{F}{\ell} \cdot F} \]
    9. Applied egg-rr80.2%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\pi}{\frac{F}{\ell} \cdot F}} \]

    if 5.00000000000000015e-54 < (*.f64 (PI.f64) l)

    1. Initial program 76.3%

      \[\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right) \]
    2. Step-by-step derivation
      1. *-commutative76.3%

        \[\leadsto \pi \cdot \ell - \color{blue}{\tan \left(\pi \cdot \ell\right) \cdot \frac{1}{F \cdot F}} \]
      2. sqr-neg76.3%

        \[\leadsto \pi \cdot \ell - \tan \left(\pi \cdot \ell\right) \cdot \frac{1}{\color{blue}{\left(-F\right) \cdot \left(-F\right)}} \]
      3. associate-*r/76.3%

        \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\tan \left(\pi \cdot \ell\right) \cdot 1}{\left(-F\right) \cdot \left(-F\right)}} \]
      4. sqr-neg76.3%

        \[\leadsto \pi \cdot \ell - \frac{\tan \left(\pi \cdot \ell\right) \cdot 1}{\color{blue}{F \cdot F}} \]
      5. *-rgt-identity76.3%

        \[\leadsto \pi \cdot \ell - \frac{\color{blue}{\tan \left(\pi \cdot \ell\right)}}{F \cdot F} \]
    3. Simplified76.3%

      \[\leadsto \color{blue}{\pi \cdot \ell - \frac{\tan \left(\pi \cdot \ell\right)}{F \cdot F}} \]
    4. Add Preprocessing
  3. Recombined 2 regimes into one program.
  4. Final simplification79.0%

    \[\leadsto \begin{array}{l} \mathbf{if}\;\pi \cdot \ell \leq 5 \cdot 10^{-54}:\\ \;\;\;\;\pi \cdot \ell - \frac{\pi}{F \cdot \frac{F}{\ell}}\\ \mathbf{else}:\\ \;\;\;\;\pi \cdot \ell - \frac{\tan \left(\pi \cdot \ell\right)}{F \cdot F}\\ \end{array} \]
  5. Add Preprocessing

Alternative 5: 82.0% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \pi \cdot \ell - \frac{\frac{\tan \left(\pi \cdot \ell\right)}{F}}{F} \end{array} \]
(FPCore (F l) :precision binary64 (- (* PI l) (/ (/ (tan (* PI l)) F) F)))
double code(double F, double l) {
	return (((double) M_PI) * l) - ((tan((((double) M_PI) * l)) / F) / F);
}
public static double code(double F, double l) {
	return (Math.PI * l) - ((Math.tan((Math.PI * l)) / F) / F);
}
def code(F, l):
	return (math.pi * l) - ((math.tan((math.pi * l)) / F) / F)
function code(F, l)
	return Float64(Float64(pi * l) - Float64(Float64(tan(Float64(pi * l)) / F) / F))
end
function tmp = code(F, l)
	tmp = (pi * l) - ((tan((pi * l)) / F) / F);
end
code[F_, l_] := N[(N[(Pi * l), $MachinePrecision] - N[(N[(N[Tan[N[(Pi * l), $MachinePrecision]], $MachinePrecision] / F), $MachinePrecision] / F), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\pi \cdot \ell - \frac{\frac{\tan \left(\pi \cdot \ell\right)}{F}}{F}
\end{array}
Derivation
  1. Initial program 75.3%

    \[\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right) \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. associate-*l/76.0%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{1 \cdot \tan \left(\pi \cdot \ell\right)}{F \cdot F}} \]
    2. *-un-lft-identity76.0%

      \[\leadsto \pi \cdot \ell - \frac{\color{blue}{\tan \left(\pi \cdot \ell\right)}}{F \cdot F} \]
    3. associate-/r*83.3%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\frac{\tan \left(\pi \cdot \ell\right)}{F}}{F}} \]
  4. Applied egg-rr83.3%

    \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\frac{\tan \left(\pi \cdot \ell\right)}{F}}{F}} \]
  5. Final simplification83.3%

    \[\leadsto \pi \cdot \ell - \frac{\frac{\tan \left(\pi \cdot \ell\right)}{F}}{F} \]
  6. Add Preprocessing

Alternative 6: 75.5% accurate, 10.3× speedup?

\[\begin{array}{l} \\ \pi \cdot \ell - \frac{\pi}{F} \cdot \frac{\ell}{F} \end{array} \]
(FPCore (F l) :precision binary64 (- (* PI l) (* (/ PI F) (/ l F))))
double code(double F, double l) {
	return (((double) M_PI) * l) - ((((double) M_PI) / F) * (l / F));
}
public static double code(double F, double l) {
	return (Math.PI * l) - ((Math.PI / F) * (l / F));
}
def code(F, l):
	return (math.pi * l) - ((math.pi / F) * (l / F))
function code(F, l)
	return Float64(Float64(pi * l) - Float64(Float64(pi / F) * Float64(l / F)))
end
function tmp = code(F, l)
	tmp = (pi * l) - ((pi / F) * (l / F));
end
code[F_, l_] := N[(N[(Pi * l), $MachinePrecision] - N[(N[(Pi / F), $MachinePrecision] * N[(l / F), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\pi \cdot \ell - \frac{\pi}{F} \cdot \frac{\ell}{F}
\end{array}
Derivation
  1. Initial program 75.3%

    \[\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right) \]
  2. Step-by-step derivation
    1. *-commutative75.3%

      \[\leadsto \pi \cdot \ell - \color{blue}{\tan \left(\pi \cdot \ell\right) \cdot \frac{1}{F \cdot F}} \]
    2. sqr-neg75.3%

      \[\leadsto \pi \cdot \ell - \tan \left(\pi \cdot \ell\right) \cdot \frac{1}{\color{blue}{\left(-F\right) \cdot \left(-F\right)}} \]
    3. associate-*r/76.0%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\tan \left(\pi \cdot \ell\right) \cdot 1}{\left(-F\right) \cdot \left(-F\right)}} \]
    4. sqr-neg76.0%

      \[\leadsto \pi \cdot \ell - \frac{\tan \left(\pi \cdot \ell\right) \cdot 1}{\color{blue}{F \cdot F}} \]
    5. *-rgt-identity76.0%

      \[\leadsto \pi \cdot \ell - \frac{\color{blue}{\tan \left(\pi \cdot \ell\right)}}{F \cdot F} \]
  3. Simplified76.0%

    \[\leadsto \color{blue}{\pi \cdot \ell - \frac{\tan \left(\pi \cdot \ell\right)}{F \cdot F}} \]
  4. Add Preprocessing
  5. Taylor expanded in l around 0 68.2%

    \[\leadsto \pi \cdot \ell - \frac{\color{blue}{\ell \cdot \pi}}{F \cdot F} \]
  6. Step-by-step derivation
    1. *-commutative68.2%

      \[\leadsto \pi \cdot \ell - \frac{\color{blue}{\pi \cdot \ell}}{F \cdot F} \]
    2. times-frac75.4%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\pi}{F} \cdot \frac{\ell}{F}} \]
  7. Applied egg-rr75.4%

    \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\pi}{F} \cdot \frac{\ell}{F}} \]
  8. Final simplification75.4%

    \[\leadsto \pi \cdot \ell - \frac{\pi}{F} \cdot \frac{\ell}{F} \]
  9. Add Preprocessing

Alternative 7: 75.5% accurate, 10.3× speedup?

\[\begin{array}{l} \\ \pi \cdot \ell - \frac{\pi}{F \cdot \frac{F}{\ell}} \end{array} \]
(FPCore (F l) :precision binary64 (- (* PI l) (/ PI (* F (/ F l)))))
double code(double F, double l) {
	return (((double) M_PI) * l) - (((double) M_PI) / (F * (F / l)));
}
public static double code(double F, double l) {
	return (Math.PI * l) - (Math.PI / (F * (F / l)));
}
def code(F, l):
	return (math.pi * l) - (math.pi / (F * (F / l)))
function code(F, l)
	return Float64(Float64(pi * l) - Float64(pi / Float64(F * Float64(F / l))))
end
function tmp = code(F, l)
	tmp = (pi * l) - (pi / (F * (F / l)));
end
code[F_, l_] := N[(N[(Pi * l), $MachinePrecision] - N[(Pi / N[(F * N[(F / l), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
\pi \cdot \ell - \frac{\pi}{F \cdot \frac{F}{\ell}}
\end{array}
Derivation
  1. Initial program 75.3%

    \[\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right) \]
  2. Step-by-step derivation
    1. *-commutative75.3%

      \[\leadsto \pi \cdot \ell - \color{blue}{\tan \left(\pi \cdot \ell\right) \cdot \frac{1}{F \cdot F}} \]
    2. sqr-neg75.3%

      \[\leadsto \pi \cdot \ell - \tan \left(\pi \cdot \ell\right) \cdot \frac{1}{\color{blue}{\left(-F\right) \cdot \left(-F\right)}} \]
    3. associate-*r/76.0%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\tan \left(\pi \cdot \ell\right) \cdot 1}{\left(-F\right) \cdot \left(-F\right)}} \]
    4. sqr-neg76.0%

      \[\leadsto \pi \cdot \ell - \frac{\tan \left(\pi \cdot \ell\right) \cdot 1}{\color{blue}{F \cdot F}} \]
    5. *-rgt-identity76.0%

      \[\leadsto \pi \cdot \ell - \frac{\color{blue}{\tan \left(\pi \cdot \ell\right)}}{F \cdot F} \]
  3. Simplified76.0%

    \[\leadsto \color{blue}{\pi \cdot \ell - \frac{\tan \left(\pi \cdot \ell\right)}{F \cdot F}} \]
  4. Add Preprocessing
  5. Taylor expanded in l around 0 68.2%

    \[\leadsto \pi \cdot \ell - \frac{\color{blue}{\ell \cdot \pi}}{F \cdot F} \]
  6. Step-by-step derivation
    1. *-commutative68.2%

      \[\leadsto \pi \cdot \ell - \frac{\color{blue}{\pi \cdot \ell}}{F \cdot F} \]
    2. times-frac75.4%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\pi}{F} \cdot \frac{\ell}{F}} \]
  7. Applied egg-rr75.4%

    \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\pi}{F} \cdot \frac{\ell}{F}} \]
  8. Step-by-step derivation
    1. *-commutative75.4%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\ell}{F} \cdot \frac{\pi}{F}} \]
    2. clear-num75.4%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{1}{\frac{F}{\ell}}} \cdot \frac{\pi}{F} \]
    3. frac-times75.5%

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{1 \cdot \pi}{\frac{F}{\ell} \cdot F}} \]
    4. *-un-lft-identity75.5%

      \[\leadsto \pi \cdot \ell - \frac{\color{blue}{\pi}}{\frac{F}{\ell} \cdot F} \]
  9. Applied egg-rr75.5%

    \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\pi}{\frac{F}{\ell} \cdot F}} \]
  10. Final simplification75.5%

    \[\leadsto \pi \cdot \ell - \frac{\pi}{F \cdot \frac{F}{\ell}} \]
  11. Add Preprocessing

Reproduce

?
herbie shell --seed 2024066 
(FPCore (F l)
  :name "VandenBroeck and Keller, Equation (6)"
  :precision binary64
  (- (* PI l) (* (/ 1.0 (* F F)) (tan (* PI l)))))