Average Error: 16.8 → 9.3
Time: 10.8s
Precision: binary64
\[\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right) \]
\[\begin{array}{l} t_0 := \tan \left(\pi \cdot \ell\right)\\ \mathbf{if}\;F \leq -1.5471331197421346 \cdot 10^{-39}:\\ \;\;\;\;\pi \cdot \ell - \frac{1}{F} \cdot \frac{1}{\frac{F}{t_0}}\\ \mathbf{elif}\;F \leq 1.1615973640422386 \cdot 10^{-6}:\\ \;\;\;\;\pi \cdot \ell - \frac{1}{\mathsf{fma}\left(\frac{F}{\pi}, \frac{F}{\ell}, \mathsf{fma}\left(F \cdot F, \left(\pi \cdot \ell\right) \cdot -0.3333333333333333 - 0.022222222222222223 \cdot \left({\pi}^{3} \cdot {\ell}^{3}\right), \left({\pi}^{5} \cdot \left(\left(F \cdot F\right) \cdot {\ell}^{5}\right)\right) \cdot -0.0021164021164021165\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;\pi \cdot \ell - \frac{\frac{\frac{t_0}{F}}{\sqrt{F}}}{\sqrt{F}}\\ \end{array} \]
(FPCore (F l)
 :precision binary64
 (- (* PI l) (* (/ 1.0 (* F F)) (tan (* PI l)))))
(FPCore (F l)
 :precision binary64
 (let* ((t_0 (tan (* PI l))))
   (if (<= F -1.5471331197421346e-39)
     (- (* PI l) (* (/ 1.0 F) (/ 1.0 (/ F t_0))))
     (if (<= F 1.1615973640422386e-6)
       (-
        (* PI l)
        (/
         1.0
         (fma
          (/ F PI)
          (/ F l)
          (fma
           (* F F)
           (-
            (* (* PI l) -0.3333333333333333)
            (* 0.022222222222222223 (* (pow PI 3.0) (pow l 3.0))))
           (*
            (* (pow PI 5.0) (* (* F F) (pow l 5.0)))
            -0.0021164021164021165)))))
       (- (* PI l) (/ (/ (/ t_0 F) (sqrt F)) (sqrt F)))))))
double code(double F, double l) {
	return (((double) M_PI) * l) - ((1.0 / (F * F)) * tan((((double) M_PI) * l)));
}
double code(double F, double l) {
	double t_0 = tan((((double) M_PI) * l));
	double tmp;
	if (F <= -1.5471331197421346e-39) {
		tmp = (((double) M_PI) * l) - ((1.0 / F) * (1.0 / (F / t_0)));
	} else if (F <= 1.1615973640422386e-6) {
		tmp = (((double) M_PI) * l) - (1.0 / fma((F / ((double) M_PI)), (F / l), fma((F * F), (((((double) M_PI) * l) * -0.3333333333333333) - (0.022222222222222223 * (pow(((double) M_PI), 3.0) * pow(l, 3.0)))), ((pow(((double) M_PI), 5.0) * ((F * F) * pow(l, 5.0))) * -0.0021164021164021165))));
	} else {
		tmp = (((double) M_PI) * l) - (((t_0 / F) / sqrt(F)) / sqrt(F));
	}
	return tmp;
}
function code(F, l)
	return Float64(Float64(pi * l) - Float64(Float64(1.0 / Float64(F * F)) * tan(Float64(pi * l))))
end
function code(F, l)
	t_0 = tan(Float64(pi * l))
	tmp = 0.0
	if (F <= -1.5471331197421346e-39)
		tmp = Float64(Float64(pi * l) - Float64(Float64(1.0 / F) * Float64(1.0 / Float64(F / t_0))));
	elseif (F <= 1.1615973640422386e-6)
		tmp = Float64(Float64(pi * l) - Float64(1.0 / fma(Float64(F / pi), Float64(F / l), fma(Float64(F * F), Float64(Float64(Float64(pi * l) * -0.3333333333333333) - Float64(0.022222222222222223 * Float64((pi ^ 3.0) * (l ^ 3.0)))), Float64(Float64((pi ^ 5.0) * Float64(Float64(F * F) * (l ^ 5.0))) * -0.0021164021164021165)))));
	else
		tmp = Float64(Float64(pi * l) - Float64(Float64(Float64(t_0 / F) / sqrt(F)) / sqrt(F)));
	end
	return tmp
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]
code[F_, l_] := Block[{t$95$0 = N[Tan[N[(Pi * l), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[F, -1.5471331197421346e-39], N[(N[(Pi * l), $MachinePrecision] - N[(N[(1.0 / F), $MachinePrecision] * N[(1.0 / N[(F / t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[F, 1.1615973640422386e-6], N[(N[(Pi * l), $MachinePrecision] - N[(1.0 / N[(N[(F / Pi), $MachinePrecision] * N[(F / l), $MachinePrecision] + N[(N[(F * F), $MachinePrecision] * N[(N[(N[(Pi * l), $MachinePrecision] * -0.3333333333333333), $MachinePrecision] - N[(0.022222222222222223 * N[(N[Power[Pi, 3.0], $MachinePrecision] * N[Power[l, 3.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(N[Power[Pi, 5.0], $MachinePrecision] * N[(N[(F * F), $MachinePrecision] * N[Power[l, 5.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * -0.0021164021164021165), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(Pi * l), $MachinePrecision] - N[(N[(N[(t$95$0 / F), $MachinePrecision] / N[Sqrt[F], $MachinePrecision]), $MachinePrecision] / N[Sqrt[F], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right)
\begin{array}{l}
t_0 := \tan \left(\pi \cdot \ell\right)\\
\mathbf{if}\;F \leq -1.5471331197421346 \cdot 10^{-39}:\\
\;\;\;\;\pi \cdot \ell - \frac{1}{F} \cdot \frac{1}{\frac{F}{t_0}}\\

\mathbf{elif}\;F \leq 1.1615973640422386 \cdot 10^{-6}:\\
\;\;\;\;\pi \cdot \ell - \frac{1}{\mathsf{fma}\left(\frac{F}{\pi}, \frac{F}{\ell}, \mathsf{fma}\left(F \cdot F, \left(\pi \cdot \ell\right) \cdot -0.3333333333333333 - 0.022222222222222223 \cdot \left({\pi}^{3} \cdot {\ell}^{3}\right), \left({\pi}^{5} \cdot \left(\left(F \cdot F\right) \cdot {\ell}^{5}\right)\right) \cdot -0.0021164021164021165\right)\right)}\\

\mathbf{else}:\\
\;\;\;\;\pi \cdot \ell - \frac{\frac{\frac{t_0}{F}}{\sqrt{F}}}{\sqrt{F}}\\


\end{array}

Error

Bits error versus F

Bits error versus l

Derivation

  1. Split input into 3 regimes
  2. if F < -1.54713311974213456e-39

    1. Initial program 0.7

      \[\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right) \]
    2. Simplified0.7

      \[\leadsto \color{blue}{\pi \cdot \ell - \frac{\tan \left(\pi \cdot \ell\right)}{F \cdot F}} \]
    3. Applied clear-num_binary640.7

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{1}{\frac{F \cdot F}{\tan \left(\pi \cdot \ell\right)}}} \]
    4. Applied *-un-lft-identity_binary640.7

      \[\leadsto \pi \cdot \ell - \frac{1}{\frac{F \cdot F}{\color{blue}{1 \cdot \tan \left(\pi \cdot \ell\right)}}} \]
    5. Applied times-frac_binary640.7

      \[\leadsto \pi \cdot \ell - \frac{1}{\color{blue}{\frac{F}{1} \cdot \frac{F}{\tan \left(\pi \cdot \ell\right)}}} \]
    6. Applied *-un-lft-identity_binary640.7

      \[\leadsto \pi \cdot \ell - \frac{\color{blue}{1 \cdot 1}}{\frac{F}{1} \cdot \frac{F}{\tan \left(\pi \cdot \ell\right)}} \]
    7. Applied times-frac_binary640.7

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{1}{\frac{F}{1}} \cdot \frac{1}{\frac{F}{\tan \left(\pi \cdot \ell\right)}}} \]

    if -1.54713311974213456e-39 < F < 1.16159736404223856e-6

    1. Initial program 38.4

      \[\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right) \]
    2. Simplified37.7

      \[\leadsto \color{blue}{\pi \cdot \ell - \frac{\tan \left(\pi \cdot \ell\right)}{F \cdot F}} \]
    3. Applied clear-num_binary6437.7

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

      \[\leadsto \pi \cdot \ell - \frac{1}{\color{blue}{\frac{{F}^{2}}{\pi \cdot \ell} - \left(0.3333333333333333 \cdot \left(\pi \cdot \left({F}^{2} \cdot \ell\right)\right) + \left(0.022222222222222223 \cdot \left({\pi}^{3} \cdot \left({\ell}^{3} \cdot {F}^{2}\right)\right) + 0.0021164021164021165 \cdot \left({\pi}^{5} \cdot \left({\ell}^{5} \cdot {F}^{2}\right)\right)\right)\right)}} \]
    5. Simplified21.0

      \[\leadsto \pi \cdot \ell - \frac{1}{\color{blue}{\mathsf{fma}\left(\frac{F}{\pi}, \frac{F}{\ell}, \mathsf{fma}\left(F \cdot F, -0.3333333333333333 \cdot \left(\pi \cdot \ell\right) - 0.022222222222222223 \cdot \left({\pi}^{3} \cdot {\ell}^{3}\right), \left({\pi}^{5} \cdot \left(\left(F \cdot F\right) \cdot {\ell}^{5}\right)\right) \cdot -0.0021164021164021165\right)\right)}} \]

    if 1.16159736404223856e-6 < F

    1. Initial program 0.3

      \[\pi \cdot \ell - \frac{1}{F \cdot F} \cdot \tan \left(\pi \cdot \ell\right) \]
    2. Simplified0.3

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

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\frac{\tan \left(\pi \cdot \ell\right)}{F}}{F}} \]
    4. Applied add-sqr-sqrt_binary640.3

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

      \[\leadsto \pi \cdot \ell - \color{blue}{\frac{\frac{\frac{\tan \left(\pi \cdot \ell\right)}{F}}{\sqrt{F}}}{\sqrt{F}}} \]
  3. Recombined 3 regimes into one program.
  4. Final simplification9.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;F \leq -1.5471331197421346 \cdot 10^{-39}:\\ \;\;\;\;\pi \cdot \ell - \frac{1}{F} \cdot \frac{1}{\frac{F}{\tan \left(\pi \cdot \ell\right)}}\\ \mathbf{elif}\;F \leq 1.1615973640422386 \cdot 10^{-6}:\\ \;\;\;\;\pi \cdot \ell - \frac{1}{\mathsf{fma}\left(\frac{F}{\pi}, \frac{F}{\ell}, \mathsf{fma}\left(F \cdot F, \left(\pi \cdot \ell\right) \cdot -0.3333333333333333 - 0.022222222222222223 \cdot \left({\pi}^{3} \cdot {\ell}^{3}\right), \left({\pi}^{5} \cdot \left(\left(F \cdot F\right) \cdot {\ell}^{5}\right)\right) \cdot -0.0021164021164021165\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;\pi \cdot \ell - \frac{\frac{\frac{\tan \left(\pi \cdot \ell\right)}{F}}{\sqrt{F}}}{\sqrt{F}}\\ \end{array} \]

Reproduce

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