(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}



Bits error versus F



Bits error versus l
if F < -1.54713311974213456e-39Initial program 0.7
Simplified0.7
Applied clear-num_binary640.7
Applied *-un-lft-identity_binary640.7
Applied times-frac_binary640.7
Applied *-un-lft-identity_binary640.7
Applied times-frac_binary640.7
if -1.54713311974213456e-39 < F < 1.16159736404223856e-6Initial program 38.4
Simplified37.7
Applied clear-num_binary6437.7
Taylor expanded in l around 0 29.9
Simplified21.0
if 1.16159736404223856e-6 < F Initial program 0.3
Simplified0.3
Applied associate-/r*_binary640.3
Applied add-sqr-sqrt_binary640.3
Applied associate-/r*_binary640.3
Final simplification9.3
herbie shell --seed 2022138
(FPCore (F l)
:name "VandenBroeck and Keller, Equation (6)"
:precision binary64
(- (* PI l) (* (/ 1.0 (* F F)) (tan (* PI l)))))