(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))))
(FPCore (t l k)
:precision binary64
(let* ((t_1 (cbrt (sin k)))
(t_2 (* 0.0 (tan k)))
(t_3 (- t_2))
(t_4 (+ 2.0 (pow (/ k t) 2.0)))
(t_5 (/ t (pow (cbrt l) 2.0)))
(t_6 (* t_5 t_1))
(t_7 (fma 0.0 (tan k) t_2)))
(if (<= t -3.519484547635524e-73)
(/
2.0
(*
(+ (fma t_6 (* (tan k) (pow (* t_5 (log1p (expm1 t_1))) 2.0)) t_3) t_7)
t_4))
(if (<= t 2.330754811211471e-198)
(/
2.0
(*
(pow (sin k) 2.0)
(/ (* t (fma k k (* 2.0 (* t t)))) (* (* l l) (cos k)))))
(/
2.0
(*
(+
(fma (* t_5 (pow (cbrt t_1) 3.0)) (* (tan k) (pow t_6 2.0)) t_3)
t_7)
t_4))))))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));
}
double code(double t, double l, double k) {
double t_1 = cbrt(sin(k));
double t_2 = 0.0 * tan(k);
double t_3 = -t_2;
double t_4 = 2.0 + pow((k / t), 2.0);
double t_5 = t / pow(cbrt(l), 2.0);
double t_6 = t_5 * t_1;
double t_7 = fma(0.0, tan(k), t_2);
double tmp;
if (t <= -3.519484547635524e-73) {
tmp = 2.0 / ((fma(t_6, (tan(k) * pow((t_5 * log1p(expm1(t_1))), 2.0)), t_3) + t_7) * t_4);
} else if (t <= 2.330754811211471e-198) {
tmp = 2.0 / (pow(sin(k), 2.0) * ((t * fma(k, k, (2.0 * (t * t)))) / ((l * l) * cos(k))));
} else {
tmp = 2.0 / ((fma((t_5 * pow(cbrt(t_1), 3.0)), (tan(k) * pow(t_6, 2.0)), t_3) + t_7) * t_4);
}
return tmp;
}
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 code(t, l, k) t_1 = cbrt(sin(k)) t_2 = Float64(0.0 * tan(k)) t_3 = Float64(-t_2) t_4 = Float64(2.0 + (Float64(k / t) ^ 2.0)) t_5 = Float64(t / (cbrt(l) ^ 2.0)) t_6 = Float64(t_5 * t_1) t_7 = fma(0.0, tan(k), t_2) tmp = 0.0 if (t <= -3.519484547635524e-73) tmp = Float64(2.0 / Float64(Float64(fma(t_6, Float64(tan(k) * (Float64(t_5 * log1p(expm1(t_1))) ^ 2.0)), t_3) + t_7) * t_4)); elseif (t <= 2.330754811211471e-198) tmp = Float64(2.0 / Float64((sin(k) ^ 2.0) * Float64(Float64(t * fma(k, k, Float64(2.0 * Float64(t * t)))) / Float64(Float64(l * l) * cos(k))))); else tmp = Float64(2.0 / Float64(Float64(fma(Float64(t_5 * (cbrt(t_1) ^ 3.0)), Float64(tan(k) * (t_6 ^ 2.0)), t_3) + t_7) * t_4)); end return tmp 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]
code[t_, l_, k_] := Block[{t$95$1 = N[Power[N[Sin[k], $MachinePrecision], 1/3], $MachinePrecision]}, Block[{t$95$2 = N[(0.0 * N[Tan[k], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = (-t$95$2)}, Block[{t$95$4 = N[(2.0 + N[Power[N[(k / t), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$5 = N[(t / N[Power[N[Power[l, 1/3], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$6 = N[(t$95$5 * t$95$1), $MachinePrecision]}, Block[{t$95$7 = N[(0.0 * N[Tan[k], $MachinePrecision] + t$95$2), $MachinePrecision]}, If[LessEqual[t, -3.519484547635524e-73], N[(2.0 / N[(N[(N[(t$95$6 * N[(N[Tan[k], $MachinePrecision] * N[Power[N[(t$95$5 * N[Log[1 + N[(Exp[t$95$1] - 1), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision] + t$95$3), $MachinePrecision] + t$95$7), $MachinePrecision] * t$95$4), $MachinePrecision]), $MachinePrecision], If[LessEqual[t, 2.330754811211471e-198], N[(2.0 / N[(N[Power[N[Sin[k], $MachinePrecision], 2.0], $MachinePrecision] * N[(N[(t * N[(k * k + N[(2.0 * N[(t * t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(N[(l * l), $MachinePrecision] * N[Cos[k], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(2.0 / N[(N[(N[(N[(t$95$5 * N[Power[N[Power[t$95$1, 1/3], $MachinePrecision], 3.0], $MachinePrecision]), $MachinePrecision] * N[(N[Tan[k], $MachinePrecision] * N[Power[t$95$6, 2.0], $MachinePrecision]), $MachinePrecision] + t$95$3), $MachinePrecision] + t$95$7), $MachinePrecision] * t$95$4), $MachinePrecision]), $MachinePrecision]]]]]]]]]]
\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)}
\begin{array}{l}
t_1 := \sqrt[3]{\sin k}\\
t_2 := 0 \cdot \tan k\\
t_3 := -t_2\\
t_4 := 2 + {\left(\frac{k}{t}\right)}^{2}\\
t_5 := \frac{t}{{\left(\sqrt[3]{\ell}\right)}^{2}}\\
t_6 := t_5 \cdot t_1\\
t_7 := \mathsf{fma}\left(0, \tan k, t_2\right)\\
\mathbf{if}\;t \leq -3.519484547635524 \cdot 10^{-73}:\\
\;\;\;\;\frac{2}{\left(\mathsf{fma}\left(t_6, \tan k \cdot {\left(t_5 \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(t_1\right)\right)\right)}^{2}, t_3\right) + t_7\right) \cdot t_4}\\
\mathbf{elif}\;t \leq 2.330754811211471 \cdot 10^{-198}:\\
\;\;\;\;\frac{2}{{\sin k}^{2} \cdot \frac{t \cdot \mathsf{fma}\left(k, k, 2 \cdot \left(t \cdot t\right)\right)}{\left(\ell \cdot \ell\right) \cdot \cos k}}\\
\mathbf{else}:\\
\;\;\;\;\frac{2}{\left(\mathsf{fma}\left(t_5 \cdot {\left(\sqrt[3]{t_1}\right)}^{3}, \tan k \cdot {t_6}^{2}, t_3\right) + t_7\right) \cdot t_4}\\
\end{array}



Bits error versus t



Bits error versus l



Bits error versus k
if t < -3.51948454763552423e-73Initial program 23.0
Simplified23.0
Applied egg-rr5.5
Applied egg-rr5.5
if -3.51948454763552423e-73 < t < 2.33075481121147108e-198Initial program 60.6
Simplified60.6
Taylor expanded in l around 0 60.0
Simplified24.7
if 2.33075481121147108e-198 < t Initial program 28.5
Simplified28.5
Applied egg-rr10.5
Applied egg-rr10.5
Final simplification11.5
herbie shell --seed 2022131
(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))))