
(FPCore (f) :precision binary64 (let* ((t_0 (* (/ PI 4.0) f)) (t_1 (exp t_0)) (t_2 (exp (- t_0)))) (- (* (/ 1.0 (/ PI 4.0)) (log (/ (+ t_1 t_2) (- t_1 t_2)))))))
double code(double f) {
double t_0 = (((double) M_PI) / 4.0) * f;
double t_1 = exp(t_0);
double t_2 = exp(-t_0);
return -((1.0 / (((double) M_PI) / 4.0)) * log(((t_1 + t_2) / (t_1 - t_2))));
}
public static double code(double f) {
double t_0 = (Math.PI / 4.0) * f;
double t_1 = Math.exp(t_0);
double t_2 = Math.exp(-t_0);
return -((1.0 / (Math.PI / 4.0)) * Math.log(((t_1 + t_2) / (t_1 - t_2))));
}
def code(f): t_0 = (math.pi / 4.0) * f t_1 = math.exp(t_0) t_2 = math.exp(-t_0) return -((1.0 / (math.pi / 4.0)) * math.log(((t_1 + t_2) / (t_1 - t_2))))
function code(f) t_0 = Float64(Float64(pi / 4.0) * f) t_1 = exp(t_0) t_2 = exp(Float64(-t_0)) return Float64(-Float64(Float64(1.0 / Float64(pi / 4.0)) * log(Float64(Float64(t_1 + t_2) / Float64(t_1 - t_2))))) end
function tmp = code(f) t_0 = (pi / 4.0) * f; t_1 = exp(t_0); t_2 = exp(-t_0); tmp = -((1.0 / (pi / 4.0)) * log(((t_1 + t_2) / (t_1 - t_2)))); end
code[f_] := Block[{t$95$0 = N[(N[(Pi / 4.0), $MachinePrecision] * f), $MachinePrecision]}, Block[{t$95$1 = N[Exp[t$95$0], $MachinePrecision]}, Block[{t$95$2 = N[Exp[(-t$95$0)], $MachinePrecision]}, (-N[(N[(1.0 / N[(Pi / 4.0), $MachinePrecision]), $MachinePrecision] * N[Log[N[(N[(t$95$1 + t$95$2), $MachinePrecision] / N[(t$95$1 - t$95$2), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision])]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\pi}{4} \cdot f\\
t_1 := e^{t\_0}\\
t_2 := e^{-t\_0}\\
-\frac{1}{\frac{\pi}{4}} \cdot \log \left(\frac{t\_1 + t\_2}{t\_1 - t\_2}\right)
\end{array}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 11 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (f) :precision binary64 (let* ((t_0 (* (/ PI 4.0) f)) (t_1 (exp t_0)) (t_2 (exp (- t_0)))) (- (* (/ 1.0 (/ PI 4.0)) (log (/ (+ t_1 t_2) (- t_1 t_2)))))))
double code(double f) {
double t_0 = (((double) M_PI) / 4.0) * f;
double t_1 = exp(t_0);
double t_2 = exp(-t_0);
return -((1.0 / (((double) M_PI) / 4.0)) * log(((t_1 + t_2) / (t_1 - t_2))));
}
public static double code(double f) {
double t_0 = (Math.PI / 4.0) * f;
double t_1 = Math.exp(t_0);
double t_2 = Math.exp(-t_0);
return -((1.0 / (Math.PI / 4.0)) * Math.log(((t_1 + t_2) / (t_1 - t_2))));
}
def code(f): t_0 = (math.pi / 4.0) * f t_1 = math.exp(t_0) t_2 = math.exp(-t_0) return -((1.0 / (math.pi / 4.0)) * math.log(((t_1 + t_2) / (t_1 - t_2))))
function code(f) t_0 = Float64(Float64(pi / 4.0) * f) t_1 = exp(t_0) t_2 = exp(Float64(-t_0)) return Float64(-Float64(Float64(1.0 / Float64(pi / 4.0)) * log(Float64(Float64(t_1 + t_2) / Float64(t_1 - t_2))))) end
function tmp = code(f) t_0 = (pi / 4.0) * f; t_1 = exp(t_0); t_2 = exp(-t_0); tmp = -((1.0 / (pi / 4.0)) * log(((t_1 + t_2) / (t_1 - t_2)))); end
code[f_] := Block[{t$95$0 = N[(N[(Pi / 4.0), $MachinePrecision] * f), $MachinePrecision]}, Block[{t$95$1 = N[Exp[t$95$0], $MachinePrecision]}, Block[{t$95$2 = N[Exp[(-t$95$0)], $MachinePrecision]}, (-N[(N[(1.0 / N[(Pi / 4.0), $MachinePrecision]), $MachinePrecision] * N[Log[N[(N[(t$95$1 + t$95$2), $MachinePrecision] / N[(t$95$1 - t$95$2), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision])]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\pi}{4} \cdot f\\
t_1 := e^{t\_0}\\
t_2 := e^{-t\_0}\\
-\frac{1}{\frac{\pi}{4}} \cdot \log \left(\frac{t\_1 + t\_2}{t\_1 - t\_2}\right)
\end{array}
\end{array}
(FPCore (f) :precision binary64 (let* ((t_0 (* -1.0 (log 2.0))) (t_1 (* f (/ PI 4.0)))) (/ (- (- t_0 (log (cosh t_1))) (- t_0 (log (sinh t_1)))) (/ PI 4.0))))
double code(double f) {
double t_0 = -1.0 * log(2.0);
double t_1 = f * (((double) M_PI) / 4.0);
return ((t_0 - log(cosh(t_1))) - (t_0 - log(sinh(t_1)))) / (((double) M_PI) / 4.0);
}
public static double code(double f) {
double t_0 = -1.0 * Math.log(2.0);
double t_1 = f * (Math.PI / 4.0);
return ((t_0 - Math.log(Math.cosh(t_1))) - (t_0 - Math.log(Math.sinh(t_1)))) / (Math.PI / 4.0);
}
def code(f): t_0 = -1.0 * math.log(2.0) t_1 = f * (math.pi / 4.0) return ((t_0 - math.log(math.cosh(t_1))) - (t_0 - math.log(math.sinh(t_1)))) / (math.pi / 4.0)
function code(f) t_0 = Float64(-1.0 * log(2.0)) t_1 = Float64(f * Float64(pi / 4.0)) return Float64(Float64(Float64(t_0 - log(cosh(t_1))) - Float64(t_0 - log(sinh(t_1)))) / Float64(pi / 4.0)) end
function tmp = code(f) t_0 = -1.0 * log(2.0); t_1 = f * (pi / 4.0); tmp = ((t_0 - log(cosh(t_1))) - (t_0 - log(sinh(t_1)))) / (pi / 4.0); end
code[f_] := Block[{t$95$0 = N[(-1.0 * N[Log[2.0], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(f * N[(Pi / 4.0), $MachinePrecision]), $MachinePrecision]}, N[(N[(N[(t$95$0 - N[Log[N[Cosh[t$95$1], $MachinePrecision]], $MachinePrecision]), $MachinePrecision] - N[(t$95$0 - N[Log[N[Sinh[t$95$1], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(Pi / 4.0), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := -1 \cdot \log 2\\
t_1 := f \cdot \frac{\pi}{4}\\
\frac{\left(t\_0 - \log \cosh t\_1\right) - \left(t\_0 - \log \sinh t\_1\right)}{\frac{\pi}{4}}
\end{array}
\end{array}
Initial program 8.1%
Applied rewrites97.5%
Final simplification97.5%
(FPCore (f) :precision binary64 (/ (+ (- (* -1.0 (log 2.0)) (log (cosh (* f (/ PI 4.0))))) (log (* (sinh (* (/ PI 4.0) f)) 2.0))) (/ PI 4.0)))
double code(double f) {
return (((-1.0 * log(2.0)) - log(cosh((f * (((double) M_PI) / 4.0))))) + log((sinh(((((double) M_PI) / 4.0) * f)) * 2.0))) / (((double) M_PI) / 4.0);
}
public static double code(double f) {
return (((-1.0 * Math.log(2.0)) - Math.log(Math.cosh((f * (Math.PI / 4.0))))) + Math.log((Math.sinh(((Math.PI / 4.0) * f)) * 2.0))) / (Math.PI / 4.0);
}
def code(f): return (((-1.0 * math.log(2.0)) - math.log(math.cosh((f * (math.pi / 4.0))))) + math.log((math.sinh(((math.pi / 4.0) * f)) * 2.0))) / (math.pi / 4.0)
function code(f) return Float64(Float64(Float64(Float64(-1.0 * log(2.0)) - log(cosh(Float64(f * Float64(pi / 4.0))))) + log(Float64(sinh(Float64(Float64(pi / 4.0) * f)) * 2.0))) / Float64(pi / 4.0)) end
function tmp = code(f) tmp = (((-1.0 * log(2.0)) - log(cosh((f * (pi / 4.0))))) + log((sinh(((pi / 4.0) * f)) * 2.0))) / (pi / 4.0); end
code[f_] := N[(N[(N[(N[(-1.0 * N[Log[2.0], $MachinePrecision]), $MachinePrecision] - N[Log[N[Cosh[N[(f * N[(Pi / 4.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision] + N[Log[N[(N[Sinh[N[(N[(Pi / 4.0), $MachinePrecision] * f), $MachinePrecision]], $MachinePrecision] * 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[(Pi / 4.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{\left(-1 \cdot \log 2 - \log \cosh \left(f \cdot \frac{\pi}{4}\right)\right) + \log \left(\sinh \left(\frac{\pi}{4} \cdot f\right) \cdot 2\right)}{\frac{\pi}{4}}
\end{array}
Initial program 8.1%
Applied rewrites97.5%
lift-+.f64N/A
lift-log.f64N/A
lift-log.f64N/A
lift-sinh.f64N/A
lift-*.f64N/A
lift-PI.f64N/A
lift-/.f64N/A
+-commutativeN/A
sum-logN/A
lower-log.f64N/A
lower-*.f64N/A
lift-/.f64N/A
lift-PI.f64N/A
lift-*.f64N/A
lift-sinh.f6497.4
lift-*.f64N/A
*-commutativeN/A
lower-*.f6497.4
Applied rewrites97.4%
Final simplification97.4%
(FPCore (f)
:precision binary64
(let* ((t_0 (* (/ PI 4.0) f)))
(*
(* -1.0 (/ 1.0 (/ PI 4.0)))
(log
(/ (+ (exp t_0) (exp (* -1.0 t_0))) (* 2.0 (sinh (* f (/ PI 4.0)))))))))
double code(double f) {
double t_0 = (((double) M_PI) / 4.0) * f;
return (-1.0 * (1.0 / (((double) M_PI) / 4.0))) * log(((exp(t_0) + exp((-1.0 * t_0))) / (2.0 * sinh((f * (((double) M_PI) / 4.0))))));
}
public static double code(double f) {
double t_0 = (Math.PI / 4.0) * f;
return (-1.0 * (1.0 / (Math.PI / 4.0))) * Math.log(((Math.exp(t_0) + Math.exp((-1.0 * t_0))) / (2.0 * Math.sinh((f * (Math.PI / 4.0))))));
}
def code(f): t_0 = (math.pi / 4.0) * f return (-1.0 * (1.0 / (math.pi / 4.0))) * math.log(((math.exp(t_0) + math.exp((-1.0 * t_0))) / (2.0 * math.sinh((f * (math.pi / 4.0))))))
function code(f) t_0 = Float64(Float64(pi / 4.0) * f) return Float64(Float64(-1.0 * Float64(1.0 / Float64(pi / 4.0))) * log(Float64(Float64(exp(t_0) + exp(Float64(-1.0 * t_0))) / Float64(2.0 * sinh(Float64(f * Float64(pi / 4.0))))))) end
function tmp = code(f) t_0 = (pi / 4.0) * f; tmp = (-1.0 * (1.0 / (pi / 4.0))) * log(((exp(t_0) + exp((-1.0 * t_0))) / (2.0 * sinh((f * (pi / 4.0)))))); end
code[f_] := Block[{t$95$0 = N[(N[(Pi / 4.0), $MachinePrecision] * f), $MachinePrecision]}, N[(N[(-1.0 * N[(1.0 / N[(Pi / 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[Log[N[(N[(N[Exp[t$95$0], $MachinePrecision] + N[Exp[N[(-1.0 * t$95$0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[(2.0 * N[Sinh[N[(f * N[(Pi / 4.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\pi}{4} \cdot f\\
\left(-1 \cdot \frac{1}{\frac{\pi}{4}}\right) \cdot \log \left(\frac{e^{t\_0} + e^{-1 \cdot t\_0}}{2 \cdot \sinh \left(f \cdot \frac{\pi}{4}\right)}\right)
\end{array}
\end{array}
Initial program 8.1%
lift--.f64N/A
lift-exp.f64N/A
lift-exp.f64N/A
lift-neg.f64N/A
sinh-undefN/A
lower-*.f64N/A
lower-sinh.f6497.0
lift-*.f64N/A
*-commutativeN/A
lower-*.f6497.0
Applied rewrites97.0%
Final simplification97.0%
(FPCore (f)
:precision binary64
(let* ((t_0 (* (* PI PI) PI))
(t_1 (* t_0 0.005208333333333333))
(t_2 (* (/ PI (* PI 0.5)) 0.0))
(t_3 (pow (* PI 0.5) 2.0))
(t_4
(-
(* (/ (* PI PI) PI) 0.125)
(/ (fma t_0 0.005208333333333333 t_1) t_3)))
(t_5 (pow t_2 2.0)))
(*
(* -1.0 (/ 1.0 (/ PI 4.0)))
(+
(fma
(fma
(fma
(* 0.16666666666666666 f)
(fma
(* -1.5 t_2)
(* t_4 t_3)
(fma
(* 3.0 (* PI 0.5))
(- (/ (* t_0 0.0) (* PI 0.5)) (* (* -1.0 (/ t_1 PI)) (/ t_2 0.5)))
(* (* 0.25 (pow t_5 1.5)) (* t_0 0.125))))
(* 0.5 (fma t_4 (* PI 0.5) (* (* -0.25 t_5) t_3))))
f
(* (* 0.5 t_2) (* PI 0.5)))
f
(* (log f) -1.0))
(log (* (pow (* PI 0.5) -1.0) 2.0))))))
double code(double f) {
double t_0 = (((double) M_PI) * ((double) M_PI)) * ((double) M_PI);
double t_1 = t_0 * 0.005208333333333333;
double t_2 = (((double) M_PI) / (((double) M_PI) * 0.5)) * 0.0;
double t_3 = pow((((double) M_PI) * 0.5), 2.0);
double t_4 = (((((double) M_PI) * ((double) M_PI)) / ((double) M_PI)) * 0.125) - (fma(t_0, 0.005208333333333333, t_1) / t_3);
double t_5 = pow(t_2, 2.0);
return (-1.0 * (1.0 / (((double) M_PI) / 4.0))) * (fma(fma(fma((0.16666666666666666 * f), fma((-1.5 * t_2), (t_4 * t_3), fma((3.0 * (((double) M_PI) * 0.5)), (((t_0 * 0.0) / (((double) M_PI) * 0.5)) - ((-1.0 * (t_1 / ((double) M_PI))) * (t_2 / 0.5))), ((0.25 * pow(t_5, 1.5)) * (t_0 * 0.125)))), (0.5 * fma(t_4, (((double) M_PI) * 0.5), ((-0.25 * t_5) * t_3)))), f, ((0.5 * t_2) * (((double) M_PI) * 0.5))), f, (log(f) * -1.0)) + log((pow((((double) M_PI) * 0.5), -1.0) * 2.0)));
}
function code(f) t_0 = Float64(Float64(pi * pi) * pi) t_1 = Float64(t_0 * 0.005208333333333333) t_2 = Float64(Float64(pi / Float64(pi * 0.5)) * 0.0) t_3 = Float64(pi * 0.5) ^ 2.0 t_4 = Float64(Float64(Float64(Float64(pi * pi) / pi) * 0.125) - Float64(fma(t_0, 0.005208333333333333, t_1) / t_3)) t_5 = t_2 ^ 2.0 return Float64(Float64(-1.0 * Float64(1.0 / Float64(pi / 4.0))) * Float64(fma(fma(fma(Float64(0.16666666666666666 * f), fma(Float64(-1.5 * t_2), Float64(t_4 * t_3), fma(Float64(3.0 * Float64(pi * 0.5)), Float64(Float64(Float64(t_0 * 0.0) / Float64(pi * 0.5)) - Float64(Float64(-1.0 * Float64(t_1 / pi)) * Float64(t_2 / 0.5))), Float64(Float64(0.25 * (t_5 ^ 1.5)) * Float64(t_0 * 0.125)))), Float64(0.5 * fma(t_4, Float64(pi * 0.5), Float64(Float64(-0.25 * t_5) * t_3)))), f, Float64(Float64(0.5 * t_2) * Float64(pi * 0.5))), f, Float64(log(f) * -1.0)) + log(Float64((Float64(pi * 0.5) ^ -1.0) * 2.0)))) end
code[f_] := Block[{t$95$0 = N[(N[(Pi * Pi), $MachinePrecision] * Pi), $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 * 0.005208333333333333), $MachinePrecision]}, Block[{t$95$2 = N[(N[(Pi / N[(Pi * 0.5), $MachinePrecision]), $MachinePrecision] * 0.0), $MachinePrecision]}, Block[{t$95$3 = N[Power[N[(Pi * 0.5), $MachinePrecision], 2.0], $MachinePrecision]}, Block[{t$95$4 = N[(N[(N[(N[(Pi * Pi), $MachinePrecision] / Pi), $MachinePrecision] * 0.125), $MachinePrecision] - N[(N[(t$95$0 * 0.005208333333333333 + t$95$1), $MachinePrecision] / t$95$3), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$5 = N[Power[t$95$2, 2.0], $MachinePrecision]}, N[(N[(-1.0 * N[(1.0 / N[(Pi / 4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(N[(N[(N[(N[(0.16666666666666666 * f), $MachinePrecision] * N[(N[(-1.5 * t$95$2), $MachinePrecision] * N[(t$95$4 * t$95$3), $MachinePrecision] + N[(N[(3.0 * N[(Pi * 0.5), $MachinePrecision]), $MachinePrecision] * N[(N[(N[(t$95$0 * 0.0), $MachinePrecision] / N[(Pi * 0.5), $MachinePrecision]), $MachinePrecision] - N[(N[(-1.0 * N[(t$95$1 / Pi), $MachinePrecision]), $MachinePrecision] * N[(t$95$2 / 0.5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(0.25 * N[Power[t$95$5, 1.5], $MachinePrecision]), $MachinePrecision] * N[(t$95$0 * 0.125), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(0.5 * N[(t$95$4 * N[(Pi * 0.5), $MachinePrecision] + N[(N[(-0.25 * t$95$5), $MachinePrecision] * t$95$3), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * f + N[(N[(0.5 * t$95$2), $MachinePrecision] * N[(Pi * 0.5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * f + N[(N[Log[f], $MachinePrecision] * -1.0), $MachinePrecision]), $MachinePrecision] + N[Log[N[(N[Power[N[(Pi * 0.5), $MachinePrecision], -1.0], $MachinePrecision] * 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(\pi \cdot \pi\right) \cdot \pi\\
t_1 := t\_0 \cdot 0.005208333333333333\\
t_2 := \frac{\pi}{\pi \cdot 0.5} \cdot 0\\
t_3 := {\left(\pi \cdot 0.5\right)}^{2}\\
t_4 := \frac{\pi \cdot \pi}{\pi} \cdot 0.125 - \frac{\mathsf{fma}\left(t\_0, 0.005208333333333333, t\_1\right)}{t\_3}\\
t_5 := {t\_2}^{2}\\
\left(-1 \cdot \frac{1}{\frac{\pi}{4}}\right) \cdot \left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(0.16666666666666666 \cdot f, \mathsf{fma}\left(-1.5 \cdot t\_2, t\_4 \cdot t\_3, \mathsf{fma}\left(3 \cdot \left(\pi \cdot 0.5\right), \frac{t\_0 \cdot 0}{\pi \cdot 0.5} - \left(-1 \cdot \frac{t\_1}{\pi}\right) \cdot \frac{t\_2}{0.5}, \left(0.25 \cdot {t\_5}^{1.5}\right) \cdot \left(t\_0 \cdot 0.125\right)\right)\right), 0.5 \cdot \mathsf{fma}\left(t\_4, \pi \cdot 0.5, \left(-0.25 \cdot t\_5\right) \cdot t\_3\right)\right), f, \left(0.5 \cdot t\_2\right) \cdot \left(\pi \cdot 0.5\right)\right), f, \log f \cdot -1\right) + \log \left({\left(\pi \cdot 0.5\right)}^{-1} \cdot 2\right)\right)
\end{array}
\end{array}
Initial program 8.1%
Taylor expanded in f around 0
Applied rewrites96.6%
Final simplification96.6%
(FPCore (f)
:precision binary64
(let* ((t_0 (/ (* PI 0.5) PI))
(t_1 (* (* PI PI) PI))
(t_2 (* (/ PI (* PI 0.5)) 0.0))
(t_3 (* t_1 0.005208333333333333))
(t_4 (pow (* PI 0.5) 2.0))
(t_5
(-
(* (/ (* PI PI) PI) 0.125)
(/ (fma t_1 0.005208333333333333 t_3) t_4)))
(t_6 (pow t_2 2.0)))
(*
-1.0
(fma
(fma
(/
(fma
0.6666666666666666
(*
(fma
(* -1.5 t_2)
(* t_5 t_4)
(fma
(* 3.0 (* PI 0.5))
(- (/ (* t_1 0.0) (* PI 0.5)) (* (* -1.0 (/ t_3 PI)) (/ t_2 0.5)))
(* (* 0.25 (pow t_6 1.5)) (* t_1 0.125))))
f)
(* 2.0 (fma t_5 (* PI 0.5) (* (* -0.25 t_6) t_4))))
PI)
f
(fma t_2 t_0 (* t_2 t_0)))
f
(/
(* (/ 4.0 (pow PI 0.5)) (fma (log f) -1.0 (log (/ 2.0 (* 0.5 PI)))))
(pow PI 0.5))))))
double code(double f) {
double t_0 = (((double) M_PI) * 0.5) / ((double) M_PI);
double t_1 = (((double) M_PI) * ((double) M_PI)) * ((double) M_PI);
double t_2 = (((double) M_PI) / (((double) M_PI) * 0.5)) * 0.0;
double t_3 = t_1 * 0.005208333333333333;
double t_4 = pow((((double) M_PI) * 0.5), 2.0);
double t_5 = (((((double) M_PI) * ((double) M_PI)) / ((double) M_PI)) * 0.125) - (fma(t_1, 0.005208333333333333, t_3) / t_4);
double t_6 = pow(t_2, 2.0);
return -1.0 * fma(fma((fma(0.6666666666666666, (fma((-1.5 * t_2), (t_5 * t_4), fma((3.0 * (((double) M_PI) * 0.5)), (((t_1 * 0.0) / (((double) M_PI) * 0.5)) - ((-1.0 * (t_3 / ((double) M_PI))) * (t_2 / 0.5))), ((0.25 * pow(t_6, 1.5)) * (t_1 * 0.125)))) * f), (2.0 * fma(t_5, (((double) M_PI) * 0.5), ((-0.25 * t_6) * t_4)))) / ((double) M_PI)), f, fma(t_2, t_0, (t_2 * t_0))), f, (((4.0 / pow(((double) M_PI), 0.5)) * fma(log(f), -1.0, log((2.0 / (0.5 * ((double) M_PI)))))) / pow(((double) M_PI), 0.5)));
}
function code(f) t_0 = Float64(Float64(pi * 0.5) / pi) t_1 = Float64(Float64(pi * pi) * pi) t_2 = Float64(Float64(pi / Float64(pi * 0.5)) * 0.0) t_3 = Float64(t_1 * 0.005208333333333333) t_4 = Float64(pi * 0.5) ^ 2.0 t_5 = Float64(Float64(Float64(Float64(pi * pi) / pi) * 0.125) - Float64(fma(t_1, 0.005208333333333333, t_3) / t_4)) t_6 = t_2 ^ 2.0 return Float64(-1.0 * fma(fma(Float64(fma(0.6666666666666666, Float64(fma(Float64(-1.5 * t_2), Float64(t_5 * t_4), fma(Float64(3.0 * Float64(pi * 0.5)), Float64(Float64(Float64(t_1 * 0.0) / Float64(pi * 0.5)) - Float64(Float64(-1.0 * Float64(t_3 / pi)) * Float64(t_2 / 0.5))), Float64(Float64(0.25 * (t_6 ^ 1.5)) * Float64(t_1 * 0.125)))) * f), Float64(2.0 * fma(t_5, Float64(pi * 0.5), Float64(Float64(-0.25 * t_6) * t_4)))) / pi), f, fma(t_2, t_0, Float64(t_2 * t_0))), f, Float64(Float64(Float64(4.0 / (pi ^ 0.5)) * fma(log(f), -1.0, log(Float64(2.0 / Float64(0.5 * pi))))) / (pi ^ 0.5)))) end
code[f_] := Block[{t$95$0 = N[(N[(Pi * 0.5), $MachinePrecision] / Pi), $MachinePrecision]}, Block[{t$95$1 = N[(N[(Pi * Pi), $MachinePrecision] * Pi), $MachinePrecision]}, Block[{t$95$2 = N[(N[(Pi / N[(Pi * 0.5), $MachinePrecision]), $MachinePrecision] * 0.0), $MachinePrecision]}, Block[{t$95$3 = N[(t$95$1 * 0.005208333333333333), $MachinePrecision]}, Block[{t$95$4 = N[Power[N[(Pi * 0.5), $MachinePrecision], 2.0], $MachinePrecision]}, Block[{t$95$5 = N[(N[(N[(N[(Pi * Pi), $MachinePrecision] / Pi), $MachinePrecision] * 0.125), $MachinePrecision] - N[(N[(t$95$1 * 0.005208333333333333 + t$95$3), $MachinePrecision] / t$95$4), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$6 = N[Power[t$95$2, 2.0], $MachinePrecision]}, N[(-1.0 * N[(N[(N[(N[(0.6666666666666666 * N[(N[(N[(-1.5 * t$95$2), $MachinePrecision] * N[(t$95$5 * t$95$4), $MachinePrecision] + N[(N[(3.0 * N[(Pi * 0.5), $MachinePrecision]), $MachinePrecision] * N[(N[(N[(t$95$1 * 0.0), $MachinePrecision] / N[(Pi * 0.5), $MachinePrecision]), $MachinePrecision] - N[(N[(-1.0 * N[(t$95$3 / Pi), $MachinePrecision]), $MachinePrecision] * N[(t$95$2 / 0.5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(0.25 * N[Power[t$95$6, 1.5], $MachinePrecision]), $MachinePrecision] * N[(t$95$1 * 0.125), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * f), $MachinePrecision] + N[(2.0 * N[(t$95$5 * N[(Pi * 0.5), $MachinePrecision] + N[(N[(-0.25 * t$95$6), $MachinePrecision] * t$95$4), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Pi), $MachinePrecision] * f + N[(t$95$2 * t$95$0 + N[(t$95$2 * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * f + N[(N[(N[(4.0 / N[Power[Pi, 0.5], $MachinePrecision]), $MachinePrecision] * N[(N[Log[f], $MachinePrecision] * -1.0 + N[Log[N[(2.0 / N[(0.5 * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[Power[Pi, 0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\pi \cdot 0.5}{\pi}\\
t_1 := \left(\pi \cdot \pi\right) \cdot \pi\\
t_2 := \frac{\pi}{\pi \cdot 0.5} \cdot 0\\
t_3 := t\_1 \cdot 0.005208333333333333\\
t_4 := {\left(\pi \cdot 0.5\right)}^{2}\\
t_5 := \frac{\pi \cdot \pi}{\pi} \cdot 0.125 - \frac{\mathsf{fma}\left(t\_1, 0.005208333333333333, t\_3\right)}{t\_4}\\
t_6 := {t\_2}^{2}\\
-1 \cdot \mathsf{fma}\left(\mathsf{fma}\left(\frac{\mathsf{fma}\left(0.6666666666666666, \mathsf{fma}\left(-1.5 \cdot t\_2, t\_5 \cdot t\_4, \mathsf{fma}\left(3 \cdot \left(\pi \cdot 0.5\right), \frac{t\_1 \cdot 0}{\pi \cdot 0.5} - \left(-1 \cdot \frac{t\_3}{\pi}\right) \cdot \frac{t\_2}{0.5}, \left(0.25 \cdot {t\_6}^{1.5}\right) \cdot \left(t\_1 \cdot 0.125\right)\right)\right) \cdot f, 2 \cdot \mathsf{fma}\left(t\_5, \pi \cdot 0.5, \left(-0.25 \cdot t\_6\right) \cdot t\_4\right)\right)}{\pi}, f, \mathsf{fma}\left(t\_2, t\_0, t\_2 \cdot t\_0\right)\right), f, \frac{\frac{4}{{\pi}^{0.5}} \cdot \mathsf{fma}\left(\log f, -1, \log \left(\frac{2}{0.5 \cdot \pi}\right)\right)}{{\pi}^{0.5}}\right)
\end{array}
\end{array}
Initial program 8.1%
Taylor expanded in f around 0
Applied rewrites96.5%
lift-*.f64N/A
lift-/.f64N/A
lift-log.f64N/A
lift-fma.f64N/A
lift-log.f64N/A
lift-*.f64N/A
lift-pow.f64N/A
lift-PI.f64N/A
lift-*.f64N/A
associate-*r/N/A
Applied rewrites96.6%
Final simplification96.6%
(FPCore (f)
:precision binary64
(let* ((t_0 (/ (* PI 0.5) PI))
(t_1 (* (* PI PI) PI))
(t_2 (* (/ PI (* PI 0.5)) 0.0))
(t_3 (* t_1 0.005208333333333333))
(t_4 (pow (* PI 0.5) 2.0))
(t_5
(-
(* (/ (* PI PI) PI) 0.125)
(/ (fma t_1 0.005208333333333333 t_3) t_4)))
(t_6 (pow t_2 2.0)))
(*
-1.0
(fma
(fma
(/
(fma
0.6666666666666666
(*
(fma
(* -1.5 t_2)
(* t_5 t_4)
(fma
(* 3.0 (* PI 0.5))
(- (/ (* t_1 0.0) (* PI 0.5)) (* (* -1.0 (/ t_3 PI)) (/ t_2 0.5)))
(* (* 0.25 (pow t_6 1.5)) (* t_1 0.125))))
f)
(* 2.0 (fma t_5 (* PI 0.5) (* (* -0.25 t_6) t_4))))
PI)
f
(fma t_2 t_0 (* t_2 t_0)))
f
(*
(/ 4.0 (pow PI 0.5))
(/
(fma (log f) -1.0 (log (* (pow (* PI 0.5) -1.0) 2.0)))
(pow PI 0.5)))))))
double code(double f) {
double t_0 = (((double) M_PI) * 0.5) / ((double) M_PI);
double t_1 = (((double) M_PI) * ((double) M_PI)) * ((double) M_PI);
double t_2 = (((double) M_PI) / (((double) M_PI) * 0.5)) * 0.0;
double t_3 = t_1 * 0.005208333333333333;
double t_4 = pow((((double) M_PI) * 0.5), 2.0);
double t_5 = (((((double) M_PI) * ((double) M_PI)) / ((double) M_PI)) * 0.125) - (fma(t_1, 0.005208333333333333, t_3) / t_4);
double t_6 = pow(t_2, 2.0);
return -1.0 * fma(fma((fma(0.6666666666666666, (fma((-1.5 * t_2), (t_5 * t_4), fma((3.0 * (((double) M_PI) * 0.5)), (((t_1 * 0.0) / (((double) M_PI) * 0.5)) - ((-1.0 * (t_3 / ((double) M_PI))) * (t_2 / 0.5))), ((0.25 * pow(t_6, 1.5)) * (t_1 * 0.125)))) * f), (2.0 * fma(t_5, (((double) M_PI) * 0.5), ((-0.25 * t_6) * t_4)))) / ((double) M_PI)), f, fma(t_2, t_0, (t_2 * t_0))), f, ((4.0 / pow(((double) M_PI), 0.5)) * (fma(log(f), -1.0, log((pow((((double) M_PI) * 0.5), -1.0) * 2.0))) / pow(((double) M_PI), 0.5))));
}
function code(f) t_0 = Float64(Float64(pi * 0.5) / pi) t_1 = Float64(Float64(pi * pi) * pi) t_2 = Float64(Float64(pi / Float64(pi * 0.5)) * 0.0) t_3 = Float64(t_1 * 0.005208333333333333) t_4 = Float64(pi * 0.5) ^ 2.0 t_5 = Float64(Float64(Float64(Float64(pi * pi) / pi) * 0.125) - Float64(fma(t_1, 0.005208333333333333, t_3) / t_4)) t_6 = t_2 ^ 2.0 return Float64(-1.0 * fma(fma(Float64(fma(0.6666666666666666, Float64(fma(Float64(-1.5 * t_2), Float64(t_5 * t_4), fma(Float64(3.0 * Float64(pi * 0.5)), Float64(Float64(Float64(t_1 * 0.0) / Float64(pi * 0.5)) - Float64(Float64(-1.0 * Float64(t_3 / pi)) * Float64(t_2 / 0.5))), Float64(Float64(0.25 * (t_6 ^ 1.5)) * Float64(t_1 * 0.125)))) * f), Float64(2.0 * fma(t_5, Float64(pi * 0.5), Float64(Float64(-0.25 * t_6) * t_4)))) / pi), f, fma(t_2, t_0, Float64(t_2 * t_0))), f, Float64(Float64(4.0 / (pi ^ 0.5)) * Float64(fma(log(f), -1.0, log(Float64((Float64(pi * 0.5) ^ -1.0) * 2.0))) / (pi ^ 0.5))))) end
code[f_] := Block[{t$95$0 = N[(N[(Pi * 0.5), $MachinePrecision] / Pi), $MachinePrecision]}, Block[{t$95$1 = N[(N[(Pi * Pi), $MachinePrecision] * Pi), $MachinePrecision]}, Block[{t$95$2 = N[(N[(Pi / N[(Pi * 0.5), $MachinePrecision]), $MachinePrecision] * 0.0), $MachinePrecision]}, Block[{t$95$3 = N[(t$95$1 * 0.005208333333333333), $MachinePrecision]}, Block[{t$95$4 = N[Power[N[(Pi * 0.5), $MachinePrecision], 2.0], $MachinePrecision]}, Block[{t$95$5 = N[(N[(N[(N[(Pi * Pi), $MachinePrecision] / Pi), $MachinePrecision] * 0.125), $MachinePrecision] - N[(N[(t$95$1 * 0.005208333333333333 + t$95$3), $MachinePrecision] / t$95$4), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$6 = N[Power[t$95$2, 2.0], $MachinePrecision]}, N[(-1.0 * N[(N[(N[(N[(0.6666666666666666 * N[(N[(N[(-1.5 * t$95$2), $MachinePrecision] * N[(t$95$5 * t$95$4), $MachinePrecision] + N[(N[(3.0 * N[(Pi * 0.5), $MachinePrecision]), $MachinePrecision] * N[(N[(N[(t$95$1 * 0.0), $MachinePrecision] / N[(Pi * 0.5), $MachinePrecision]), $MachinePrecision] - N[(N[(-1.0 * N[(t$95$3 / Pi), $MachinePrecision]), $MachinePrecision] * N[(t$95$2 / 0.5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(0.25 * N[Power[t$95$6, 1.5], $MachinePrecision]), $MachinePrecision] * N[(t$95$1 * 0.125), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * f), $MachinePrecision] + N[(2.0 * N[(t$95$5 * N[(Pi * 0.5), $MachinePrecision] + N[(N[(-0.25 * t$95$6), $MachinePrecision] * t$95$4), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Pi), $MachinePrecision] * f + N[(t$95$2 * t$95$0 + N[(t$95$2 * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * f + N[(N[(4.0 / N[Power[Pi, 0.5], $MachinePrecision]), $MachinePrecision] * N[(N[(N[Log[f], $MachinePrecision] * -1.0 + N[Log[N[(N[Power[N[(Pi * 0.5), $MachinePrecision], -1.0], $MachinePrecision] * 2.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[Power[Pi, 0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\pi \cdot 0.5}{\pi}\\
t_1 := \left(\pi \cdot \pi\right) \cdot \pi\\
t_2 := \frac{\pi}{\pi \cdot 0.5} \cdot 0\\
t_3 := t\_1 \cdot 0.005208333333333333\\
t_4 := {\left(\pi \cdot 0.5\right)}^{2}\\
t_5 := \frac{\pi \cdot \pi}{\pi} \cdot 0.125 - \frac{\mathsf{fma}\left(t\_1, 0.005208333333333333, t\_3\right)}{t\_4}\\
t_6 := {t\_2}^{2}\\
-1 \cdot \mathsf{fma}\left(\mathsf{fma}\left(\frac{\mathsf{fma}\left(0.6666666666666666, \mathsf{fma}\left(-1.5 \cdot t\_2, t\_5 \cdot t\_4, \mathsf{fma}\left(3 \cdot \left(\pi \cdot 0.5\right), \frac{t\_1 \cdot 0}{\pi \cdot 0.5} - \left(-1 \cdot \frac{t\_3}{\pi}\right) \cdot \frac{t\_2}{0.5}, \left(0.25 \cdot {t\_6}^{1.5}\right) \cdot \left(t\_1 \cdot 0.125\right)\right)\right) \cdot f, 2 \cdot \mathsf{fma}\left(t\_5, \pi \cdot 0.5, \left(-0.25 \cdot t\_6\right) \cdot t\_4\right)\right)}{\pi}, f, \mathsf{fma}\left(t\_2, t\_0, t\_2 \cdot t\_0\right)\right), f, \frac{4}{{\pi}^{0.5}} \cdot \frac{\mathsf{fma}\left(\log f, -1, \log \left({\left(\pi \cdot 0.5\right)}^{-1} \cdot 2\right)\right)}{{\pi}^{0.5}}\right)
\end{array}
\end{array}
Initial program 8.1%
Taylor expanded in f around 0
Applied rewrites96.5%
Final simplification96.5%
(FPCore (f)
:precision binary64
(let* ((t_0 (/ (* PI 0.5) PI))
(t_1 (* (* PI PI) PI))
(t_2 (* (/ PI (* PI 0.5)) 0.0))
(t_3 (* t_1 0.005208333333333333))
(t_4 (pow (* PI 0.5) 2.0))
(t_5
(-
(* (/ (* PI PI) PI) 0.125)
(/ (fma t_1 0.005208333333333333 t_3) t_4)))
(t_6 (pow t_2 2.0)))
(*
-1.0
(fma
(fma
(/
(fma
0.6666666666666666
(*
(fma
(* -1.5 t_2)
(* t_5 t_4)
(fma
(* 3.0 (* PI 0.5))
(- (/ (* t_1 0.0) (* PI 0.5)) (* (* -1.0 (/ t_3 PI)) (/ t_2 0.5)))
(* (* 0.25 (pow t_6 1.5)) (* t_1 0.125))))
f)
(* 2.0 (fma t_5 (* PI 0.5) (* (* -0.25 t_6) t_4))))
PI)
f
(fma t_2 t_0 (* t_2 t_0)))
f
(*
(/ 4.0 (pow PI 0.5))
(*
(pow (pow PI -1.0) 0.5)
(fma (log f) -1.0 (- (log 4.0) (log PI)))))))))
double code(double f) {
double t_0 = (((double) M_PI) * 0.5) / ((double) M_PI);
double t_1 = (((double) M_PI) * ((double) M_PI)) * ((double) M_PI);
double t_2 = (((double) M_PI) / (((double) M_PI) * 0.5)) * 0.0;
double t_3 = t_1 * 0.005208333333333333;
double t_4 = pow((((double) M_PI) * 0.5), 2.0);
double t_5 = (((((double) M_PI) * ((double) M_PI)) / ((double) M_PI)) * 0.125) - (fma(t_1, 0.005208333333333333, t_3) / t_4);
double t_6 = pow(t_2, 2.0);
return -1.0 * fma(fma((fma(0.6666666666666666, (fma((-1.5 * t_2), (t_5 * t_4), fma((3.0 * (((double) M_PI) * 0.5)), (((t_1 * 0.0) / (((double) M_PI) * 0.5)) - ((-1.0 * (t_3 / ((double) M_PI))) * (t_2 / 0.5))), ((0.25 * pow(t_6, 1.5)) * (t_1 * 0.125)))) * f), (2.0 * fma(t_5, (((double) M_PI) * 0.5), ((-0.25 * t_6) * t_4)))) / ((double) M_PI)), f, fma(t_2, t_0, (t_2 * t_0))), f, ((4.0 / pow(((double) M_PI), 0.5)) * (pow(pow(((double) M_PI), -1.0), 0.5) * fma(log(f), -1.0, (log(4.0) - log(((double) M_PI)))))));
}
function code(f) t_0 = Float64(Float64(pi * 0.5) / pi) t_1 = Float64(Float64(pi * pi) * pi) t_2 = Float64(Float64(pi / Float64(pi * 0.5)) * 0.0) t_3 = Float64(t_1 * 0.005208333333333333) t_4 = Float64(pi * 0.5) ^ 2.0 t_5 = Float64(Float64(Float64(Float64(pi * pi) / pi) * 0.125) - Float64(fma(t_1, 0.005208333333333333, t_3) / t_4)) t_6 = t_2 ^ 2.0 return Float64(-1.0 * fma(fma(Float64(fma(0.6666666666666666, Float64(fma(Float64(-1.5 * t_2), Float64(t_5 * t_4), fma(Float64(3.0 * Float64(pi * 0.5)), Float64(Float64(Float64(t_1 * 0.0) / Float64(pi * 0.5)) - Float64(Float64(-1.0 * Float64(t_3 / pi)) * Float64(t_2 / 0.5))), Float64(Float64(0.25 * (t_6 ^ 1.5)) * Float64(t_1 * 0.125)))) * f), Float64(2.0 * fma(t_5, Float64(pi * 0.5), Float64(Float64(-0.25 * t_6) * t_4)))) / pi), f, fma(t_2, t_0, Float64(t_2 * t_0))), f, Float64(Float64(4.0 / (pi ^ 0.5)) * Float64(((pi ^ -1.0) ^ 0.5) * fma(log(f), -1.0, Float64(log(4.0) - log(pi))))))) end
code[f_] := Block[{t$95$0 = N[(N[(Pi * 0.5), $MachinePrecision] / Pi), $MachinePrecision]}, Block[{t$95$1 = N[(N[(Pi * Pi), $MachinePrecision] * Pi), $MachinePrecision]}, Block[{t$95$2 = N[(N[(Pi / N[(Pi * 0.5), $MachinePrecision]), $MachinePrecision] * 0.0), $MachinePrecision]}, Block[{t$95$3 = N[(t$95$1 * 0.005208333333333333), $MachinePrecision]}, Block[{t$95$4 = N[Power[N[(Pi * 0.5), $MachinePrecision], 2.0], $MachinePrecision]}, Block[{t$95$5 = N[(N[(N[(N[(Pi * Pi), $MachinePrecision] / Pi), $MachinePrecision] * 0.125), $MachinePrecision] - N[(N[(t$95$1 * 0.005208333333333333 + t$95$3), $MachinePrecision] / t$95$4), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$6 = N[Power[t$95$2, 2.0], $MachinePrecision]}, N[(-1.0 * N[(N[(N[(N[(0.6666666666666666 * N[(N[(N[(-1.5 * t$95$2), $MachinePrecision] * N[(t$95$5 * t$95$4), $MachinePrecision] + N[(N[(3.0 * N[(Pi * 0.5), $MachinePrecision]), $MachinePrecision] * N[(N[(N[(t$95$1 * 0.0), $MachinePrecision] / N[(Pi * 0.5), $MachinePrecision]), $MachinePrecision] - N[(N[(-1.0 * N[(t$95$3 / Pi), $MachinePrecision]), $MachinePrecision] * N[(t$95$2 / 0.5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(0.25 * N[Power[t$95$6, 1.5], $MachinePrecision]), $MachinePrecision] * N[(t$95$1 * 0.125), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * f), $MachinePrecision] + N[(2.0 * N[(t$95$5 * N[(Pi * 0.5), $MachinePrecision] + N[(N[(-0.25 * t$95$6), $MachinePrecision] * t$95$4), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / Pi), $MachinePrecision] * f + N[(t$95$2 * t$95$0 + N[(t$95$2 * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * f + N[(N[(4.0 / N[Power[Pi, 0.5], $MachinePrecision]), $MachinePrecision] * N[(N[Power[N[Power[Pi, -1.0], $MachinePrecision], 0.5], $MachinePrecision] * N[(N[Log[f], $MachinePrecision] * -1.0 + N[(N[Log[4.0], $MachinePrecision] - N[Log[Pi], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\pi \cdot 0.5}{\pi}\\
t_1 := \left(\pi \cdot \pi\right) \cdot \pi\\
t_2 := \frac{\pi}{\pi \cdot 0.5} \cdot 0\\
t_3 := t\_1 \cdot 0.005208333333333333\\
t_4 := {\left(\pi \cdot 0.5\right)}^{2}\\
t_5 := \frac{\pi \cdot \pi}{\pi} \cdot 0.125 - \frac{\mathsf{fma}\left(t\_1, 0.005208333333333333, t\_3\right)}{t\_4}\\
t_6 := {t\_2}^{2}\\
-1 \cdot \mathsf{fma}\left(\mathsf{fma}\left(\frac{\mathsf{fma}\left(0.6666666666666666, \mathsf{fma}\left(-1.5 \cdot t\_2, t\_5 \cdot t\_4, \mathsf{fma}\left(3 \cdot \left(\pi \cdot 0.5\right), \frac{t\_1 \cdot 0}{\pi \cdot 0.5} - \left(-1 \cdot \frac{t\_3}{\pi}\right) \cdot \frac{t\_2}{0.5}, \left(0.25 \cdot {t\_6}^{1.5}\right) \cdot \left(t\_1 \cdot 0.125\right)\right)\right) \cdot f, 2 \cdot \mathsf{fma}\left(t\_5, \pi \cdot 0.5, \left(-0.25 \cdot t\_6\right) \cdot t\_4\right)\right)}{\pi}, f, \mathsf{fma}\left(t\_2, t\_0, t\_2 \cdot t\_0\right)\right), f, \frac{4}{{\pi}^{0.5}} \cdot \left({\left({\pi}^{-1}\right)}^{0.5} \cdot \mathsf{fma}\left(\log f, -1, \log 4 - \log \pi\right)\right)\right)
\end{array}
\end{array}
Initial program 8.1%
Taylor expanded in f around 0
Applied rewrites96.5%
Taylor expanded in f around 0
lower-*.f64N/A
pow1/2N/A
lower-pow.f64N/A
inv-powN/A
lower-pow.f64N/A
lift-PI.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
lift-log.f64N/A
log-divN/A
lower--.f64N/A
lower-log.f64N/A
lower-log.f64N/A
lift-PI.f6496.5
Applied rewrites96.5%
Final simplification96.5%
(FPCore (f)
:precision binary64
(let* ((t_0 (* (* PI PI) PI))
(t_1 (* (* PI PI) 0.25))
(t_2
(- (/ (* (* PI PI) 0.125) PI) (/ (* t_0 0.010416666666666666) t_1)))
(t_3
(*
(fma
(/
(fma
(*
0.6666666666666666
(fma
(* t_1 t_2)
0.0
(fma
(-
(* (/ t_0 PI) 0.0)
(* (* (* -1.0 t_0) (/ 0.005208333333333333 PI)) 0.0))
(* (* 3.0 PI) 0.5)
0.0)))
f
(* (fma (* 0.5 PI) t_2 0.0) 2.0))
PI)
f
(/ 0.0 PI))
f))
(t_4
(*
(/ (fma (log f) -1.0 (log (/ 2.0 (* 0.5 PI)))) (pow PI 0.5))
(/ 4.0 (pow PI 0.5)))))
(*
-1.0
(/
(+ (pow t_3 3.0) (pow t_4 3.0))
(+ (* t_3 t_3) (- (* t_4 t_4) (* t_3 t_4)))))))
double code(double f) {
double t_0 = (((double) M_PI) * ((double) M_PI)) * ((double) M_PI);
double t_1 = (((double) M_PI) * ((double) M_PI)) * 0.25;
double t_2 = (((((double) M_PI) * ((double) M_PI)) * 0.125) / ((double) M_PI)) - ((t_0 * 0.010416666666666666) / t_1);
double t_3 = fma((fma((0.6666666666666666 * fma((t_1 * t_2), 0.0, fma((((t_0 / ((double) M_PI)) * 0.0) - (((-1.0 * t_0) * (0.005208333333333333 / ((double) M_PI))) * 0.0)), ((3.0 * ((double) M_PI)) * 0.5), 0.0))), f, (fma((0.5 * ((double) M_PI)), t_2, 0.0) * 2.0)) / ((double) M_PI)), f, (0.0 / ((double) M_PI))) * f;
double t_4 = (fma(log(f), -1.0, log((2.0 / (0.5 * ((double) M_PI))))) / pow(((double) M_PI), 0.5)) * (4.0 / pow(((double) M_PI), 0.5));
return -1.0 * ((pow(t_3, 3.0) + pow(t_4, 3.0)) / ((t_3 * t_3) + ((t_4 * t_4) - (t_3 * t_4))));
}
function code(f) t_0 = Float64(Float64(pi * pi) * pi) t_1 = Float64(Float64(pi * pi) * 0.25) t_2 = Float64(Float64(Float64(Float64(pi * pi) * 0.125) / pi) - Float64(Float64(t_0 * 0.010416666666666666) / t_1)) t_3 = Float64(fma(Float64(fma(Float64(0.6666666666666666 * fma(Float64(t_1 * t_2), 0.0, fma(Float64(Float64(Float64(t_0 / pi) * 0.0) - Float64(Float64(Float64(-1.0 * t_0) * Float64(0.005208333333333333 / pi)) * 0.0)), Float64(Float64(3.0 * pi) * 0.5), 0.0))), f, Float64(fma(Float64(0.5 * pi), t_2, 0.0) * 2.0)) / pi), f, Float64(0.0 / pi)) * f) t_4 = Float64(Float64(fma(log(f), -1.0, log(Float64(2.0 / Float64(0.5 * pi)))) / (pi ^ 0.5)) * Float64(4.0 / (pi ^ 0.5))) return Float64(-1.0 * Float64(Float64((t_3 ^ 3.0) + (t_4 ^ 3.0)) / Float64(Float64(t_3 * t_3) + Float64(Float64(t_4 * t_4) - Float64(t_3 * t_4))))) end
code[f_] := Block[{t$95$0 = N[(N[(Pi * Pi), $MachinePrecision] * Pi), $MachinePrecision]}, Block[{t$95$1 = N[(N[(Pi * Pi), $MachinePrecision] * 0.25), $MachinePrecision]}, Block[{t$95$2 = N[(N[(N[(N[(Pi * Pi), $MachinePrecision] * 0.125), $MachinePrecision] / Pi), $MachinePrecision] - N[(N[(t$95$0 * 0.010416666666666666), $MachinePrecision] / t$95$1), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$3 = N[(N[(N[(N[(N[(0.6666666666666666 * N[(N[(t$95$1 * t$95$2), $MachinePrecision] * 0.0 + N[(N[(N[(N[(t$95$0 / Pi), $MachinePrecision] * 0.0), $MachinePrecision] - N[(N[(N[(-1.0 * t$95$0), $MachinePrecision] * N[(0.005208333333333333 / Pi), $MachinePrecision]), $MachinePrecision] * 0.0), $MachinePrecision]), $MachinePrecision] * N[(N[(3.0 * Pi), $MachinePrecision] * 0.5), $MachinePrecision] + 0.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * f + N[(N[(N[(0.5 * Pi), $MachinePrecision] * t$95$2 + 0.0), $MachinePrecision] * 2.0), $MachinePrecision]), $MachinePrecision] / Pi), $MachinePrecision] * f + N[(0.0 / Pi), $MachinePrecision]), $MachinePrecision] * f), $MachinePrecision]}, Block[{t$95$4 = N[(N[(N[(N[Log[f], $MachinePrecision] * -1.0 + N[Log[N[(2.0 / N[(0.5 * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[Power[Pi, 0.5], $MachinePrecision]), $MachinePrecision] * N[(4.0 / N[Power[Pi, 0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(-1.0 * N[(N[(N[Power[t$95$3, 3.0], $MachinePrecision] + N[Power[t$95$4, 3.0], $MachinePrecision]), $MachinePrecision] / N[(N[(t$95$3 * t$95$3), $MachinePrecision] + N[(N[(t$95$4 * t$95$4), $MachinePrecision] - N[(t$95$3 * t$95$4), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(\pi \cdot \pi\right) \cdot \pi\\
t_1 := \left(\pi \cdot \pi\right) \cdot 0.25\\
t_2 := \frac{\left(\pi \cdot \pi\right) \cdot 0.125}{\pi} - \frac{t\_0 \cdot 0.010416666666666666}{t\_1}\\
t_3 := \mathsf{fma}\left(\frac{\mathsf{fma}\left(0.6666666666666666 \cdot \mathsf{fma}\left(t\_1 \cdot t\_2, 0, \mathsf{fma}\left(\frac{t\_0}{\pi} \cdot 0 - \left(\left(-1 \cdot t\_0\right) \cdot \frac{0.005208333333333333}{\pi}\right) \cdot 0, \left(3 \cdot \pi\right) \cdot 0.5, 0\right)\right), f, \mathsf{fma}\left(0.5 \cdot \pi, t\_2, 0\right) \cdot 2\right)}{\pi}, f, \frac{0}{\pi}\right) \cdot f\\
t_4 := \frac{\mathsf{fma}\left(\log f, -1, \log \left(\frac{2}{0.5 \cdot \pi}\right)\right)}{{\pi}^{0.5}} \cdot \frac{4}{{\pi}^{0.5}}\\
-1 \cdot \frac{{t\_3}^{3} + {t\_4}^{3}}{t\_3 \cdot t\_3 + \left(t\_4 \cdot t\_4 - t\_3 \cdot t\_4\right)}
\end{array}
\end{array}
Initial program 8.1%
Taylor expanded in f around 0
Applied rewrites96.5%
Applied rewrites96.4%
Final simplification96.4%
(FPCore (f)
:precision binary64
(let* ((t_0 (* (* PI PI) PI))
(t_1
(*
(/ (fma (log f) -1.0 (log (/ 2.0 (* 0.5 PI)))) (pow PI 0.5))
(/ 4.0 (pow PI 0.5))))
(t_2 (* (* PI PI) 0.25))
(t_3
(- (/ (* (* PI PI) 0.125) PI) (/ (* t_0 0.010416666666666666) t_2)))
(t_4
(*
(fma
(/
(fma
(*
0.6666666666666666
(fma
(* t_2 t_3)
0.0
(fma
(-
(* (/ t_0 PI) 0.0)
(* (* (* -1.0 t_0) (/ 0.005208333333333333 PI)) 0.0))
(* (* 3.0 PI) 0.5)
0.0)))
f
(* (fma (* 0.5 PI) t_3 0.0) 2.0))
PI)
f
(/ 0.0 PI))
f)))
(*
-1.0
(/
(* 64.0 (/ (pow (- (- (log 4.0) (log PI)) (log f)) 3.0) t_0))
(+ (* t_4 t_4) (- (* t_1 t_1) (* t_4 t_1)))))))
double code(double f) {
double t_0 = (((double) M_PI) * ((double) M_PI)) * ((double) M_PI);
double t_1 = (fma(log(f), -1.0, log((2.0 / (0.5 * ((double) M_PI))))) / pow(((double) M_PI), 0.5)) * (4.0 / pow(((double) M_PI), 0.5));
double t_2 = (((double) M_PI) * ((double) M_PI)) * 0.25;
double t_3 = (((((double) M_PI) * ((double) M_PI)) * 0.125) / ((double) M_PI)) - ((t_0 * 0.010416666666666666) / t_2);
double t_4 = fma((fma((0.6666666666666666 * fma((t_2 * t_3), 0.0, fma((((t_0 / ((double) M_PI)) * 0.0) - (((-1.0 * t_0) * (0.005208333333333333 / ((double) M_PI))) * 0.0)), ((3.0 * ((double) M_PI)) * 0.5), 0.0))), f, (fma((0.5 * ((double) M_PI)), t_3, 0.0) * 2.0)) / ((double) M_PI)), f, (0.0 / ((double) M_PI))) * f;
return -1.0 * ((64.0 * (pow(((log(4.0) - log(((double) M_PI))) - log(f)), 3.0) / t_0)) / ((t_4 * t_4) + ((t_1 * t_1) - (t_4 * t_1))));
}
function code(f) t_0 = Float64(Float64(pi * pi) * pi) t_1 = Float64(Float64(fma(log(f), -1.0, log(Float64(2.0 / Float64(0.5 * pi)))) / (pi ^ 0.5)) * Float64(4.0 / (pi ^ 0.5))) t_2 = Float64(Float64(pi * pi) * 0.25) t_3 = Float64(Float64(Float64(Float64(pi * pi) * 0.125) / pi) - Float64(Float64(t_0 * 0.010416666666666666) / t_2)) t_4 = Float64(fma(Float64(fma(Float64(0.6666666666666666 * fma(Float64(t_2 * t_3), 0.0, fma(Float64(Float64(Float64(t_0 / pi) * 0.0) - Float64(Float64(Float64(-1.0 * t_0) * Float64(0.005208333333333333 / pi)) * 0.0)), Float64(Float64(3.0 * pi) * 0.5), 0.0))), f, Float64(fma(Float64(0.5 * pi), t_3, 0.0) * 2.0)) / pi), f, Float64(0.0 / pi)) * f) return Float64(-1.0 * Float64(Float64(64.0 * Float64((Float64(Float64(log(4.0) - log(pi)) - log(f)) ^ 3.0) / t_0)) / Float64(Float64(t_4 * t_4) + Float64(Float64(t_1 * t_1) - Float64(t_4 * t_1))))) end
code[f_] := Block[{t$95$0 = N[(N[(Pi * Pi), $MachinePrecision] * Pi), $MachinePrecision]}, Block[{t$95$1 = N[(N[(N[(N[Log[f], $MachinePrecision] * -1.0 + N[Log[N[(2.0 / N[(0.5 * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[Power[Pi, 0.5], $MachinePrecision]), $MachinePrecision] * N[(4.0 / N[Power[Pi, 0.5], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(Pi * Pi), $MachinePrecision] * 0.25), $MachinePrecision]}, Block[{t$95$3 = N[(N[(N[(N[(Pi * Pi), $MachinePrecision] * 0.125), $MachinePrecision] / Pi), $MachinePrecision] - N[(N[(t$95$0 * 0.010416666666666666), $MachinePrecision] / t$95$2), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$4 = N[(N[(N[(N[(N[(0.6666666666666666 * N[(N[(t$95$2 * t$95$3), $MachinePrecision] * 0.0 + N[(N[(N[(N[(t$95$0 / Pi), $MachinePrecision] * 0.0), $MachinePrecision] - N[(N[(N[(-1.0 * t$95$0), $MachinePrecision] * N[(0.005208333333333333 / Pi), $MachinePrecision]), $MachinePrecision] * 0.0), $MachinePrecision]), $MachinePrecision] * N[(N[(3.0 * Pi), $MachinePrecision] * 0.5), $MachinePrecision] + 0.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * f + N[(N[(N[(0.5 * Pi), $MachinePrecision] * t$95$3 + 0.0), $MachinePrecision] * 2.0), $MachinePrecision]), $MachinePrecision] / Pi), $MachinePrecision] * f + N[(0.0 / Pi), $MachinePrecision]), $MachinePrecision] * f), $MachinePrecision]}, N[(-1.0 * N[(N[(64.0 * N[(N[Power[N[(N[(N[Log[4.0], $MachinePrecision] - N[Log[Pi], $MachinePrecision]), $MachinePrecision] - N[Log[f], $MachinePrecision]), $MachinePrecision], 3.0], $MachinePrecision] / t$95$0), $MachinePrecision]), $MachinePrecision] / N[(N[(t$95$4 * t$95$4), $MachinePrecision] + N[(N[(t$95$1 * t$95$1), $MachinePrecision] - N[(t$95$4 * t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(\pi \cdot \pi\right) \cdot \pi\\
t_1 := \frac{\mathsf{fma}\left(\log f, -1, \log \left(\frac{2}{0.5 \cdot \pi}\right)\right)}{{\pi}^{0.5}} \cdot \frac{4}{{\pi}^{0.5}}\\
t_2 := \left(\pi \cdot \pi\right) \cdot 0.25\\
t_3 := \frac{\left(\pi \cdot \pi\right) \cdot 0.125}{\pi} - \frac{t\_0 \cdot 0.010416666666666666}{t\_2}\\
t_4 := \mathsf{fma}\left(\frac{\mathsf{fma}\left(0.6666666666666666 \cdot \mathsf{fma}\left(t\_2 \cdot t\_3, 0, \mathsf{fma}\left(\frac{t\_0}{\pi} \cdot 0 - \left(\left(-1 \cdot t\_0\right) \cdot \frac{0.005208333333333333}{\pi}\right) \cdot 0, \left(3 \cdot \pi\right) \cdot 0.5, 0\right)\right), f, \mathsf{fma}\left(0.5 \cdot \pi, t\_3, 0\right) \cdot 2\right)}{\pi}, f, \frac{0}{\pi}\right) \cdot f\\
-1 \cdot \frac{64 \cdot \frac{{\left(\left(\log 4 - \log \pi\right) - \log f\right)}^{3}}{t\_0}}{t\_4 \cdot t\_4 + \left(t\_1 \cdot t\_1 - t\_4 \cdot t\_1\right)}
\end{array}
\end{array}
Initial program 8.1%
Taylor expanded in f around 0
Applied rewrites96.5%
Applied rewrites96.4%
Taylor expanded in f around 0
Applied rewrites95.8%
lift-pow.f64N/A
lift-PI.f64N/A
lift-/.f64N/A
lift-+.f64N/A
lift--.f64N/A
lift-log.f64N/A
lift-PI.f64N/A
lift-log.f64N/A
lift-*.f64N/A
lift-log.f64N/A
cube-divN/A
Applied rewrites96.0%
Final simplification96.0%
(FPCore (f) :precision binary64 (let* ((t_0 (* f (/ PI 4.0)))) (log (pow (/ (cosh t_0) (sinh t_0)) (* -1.0 (pow (/ PI 4.0) -1.0))))))
double code(double f) {
double t_0 = f * (((double) M_PI) / 4.0);
return log(pow((cosh(t_0) / sinh(t_0)), (-1.0 * pow((((double) M_PI) / 4.0), -1.0))));
}
public static double code(double f) {
double t_0 = f * (Math.PI / 4.0);
return Math.log(Math.pow((Math.cosh(t_0) / Math.sinh(t_0)), (-1.0 * Math.pow((Math.PI / 4.0), -1.0))));
}
def code(f): t_0 = f * (math.pi / 4.0) return math.log(math.pow((math.cosh(t_0) / math.sinh(t_0)), (-1.0 * math.pow((math.pi / 4.0), -1.0))))
function code(f) t_0 = Float64(f * Float64(pi / 4.0)) return log((Float64(cosh(t_0) / sinh(t_0)) ^ Float64(-1.0 * (Float64(pi / 4.0) ^ -1.0)))) end
function tmp = code(f) t_0 = f * (pi / 4.0); tmp = log(((cosh(t_0) / sinh(t_0)) ^ (-1.0 * ((pi / 4.0) ^ -1.0)))); end
code[f_] := Block[{t$95$0 = N[(f * N[(Pi / 4.0), $MachinePrecision]), $MachinePrecision]}, N[Log[N[Power[N[(N[Cosh[t$95$0], $MachinePrecision] / N[Sinh[t$95$0], $MachinePrecision]), $MachinePrecision], N[(-1.0 * N[Power[N[(Pi / 4.0), $MachinePrecision], -1.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := f \cdot \frac{\pi}{4}\\
\log \left({\left(\frac{\cosh t\_0}{\sinh t\_0}\right)}^{\left(-1 \cdot {\left(\frac{\pi}{4}\right)}^{-1}\right)}\right)
\end{array}
\end{array}
Initial program 8.1%
Applied rewrites81.0%
Final simplification81.0%
(FPCore (f) :precision binary64 (let* ((t_0 (* f (/ PI 4.0))) (t_1 (* (- (log PI) (log 4.0)) -1.0))) (log (pow (/ (cosh t_0) (sinh t_0)) (* -1.0 (+ (cosh t_1) (sinh t_1)))))))
double code(double f) {
double t_0 = f * (((double) M_PI) / 4.0);
double t_1 = (log(((double) M_PI)) - log(4.0)) * -1.0;
return log(pow((cosh(t_0) / sinh(t_0)), (-1.0 * (cosh(t_1) + sinh(t_1)))));
}
public static double code(double f) {
double t_0 = f * (Math.PI / 4.0);
double t_1 = (Math.log(Math.PI) - Math.log(4.0)) * -1.0;
return Math.log(Math.pow((Math.cosh(t_0) / Math.sinh(t_0)), (-1.0 * (Math.cosh(t_1) + Math.sinh(t_1)))));
}
def code(f): t_0 = f * (math.pi / 4.0) t_1 = (math.log(math.pi) - math.log(4.0)) * -1.0 return math.log(math.pow((math.cosh(t_0) / math.sinh(t_0)), (-1.0 * (math.cosh(t_1) + math.sinh(t_1)))))
function code(f) t_0 = Float64(f * Float64(pi / 4.0)) t_1 = Float64(Float64(log(pi) - log(4.0)) * -1.0) return log((Float64(cosh(t_0) / sinh(t_0)) ^ Float64(-1.0 * Float64(cosh(t_1) + sinh(t_1))))) end
function tmp = code(f) t_0 = f * (pi / 4.0); t_1 = (log(pi) - log(4.0)) * -1.0; tmp = log(((cosh(t_0) / sinh(t_0)) ^ (-1.0 * (cosh(t_1) + sinh(t_1))))); end
code[f_] := Block[{t$95$0 = N[(f * N[(Pi / 4.0), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(N[Log[Pi], $MachinePrecision] - N[Log[4.0], $MachinePrecision]), $MachinePrecision] * -1.0), $MachinePrecision]}, N[Log[N[Power[N[(N[Cosh[t$95$0], $MachinePrecision] / N[Sinh[t$95$0], $MachinePrecision]), $MachinePrecision], N[(-1.0 * N[(N[Cosh[t$95$1], $MachinePrecision] + N[Sinh[t$95$1], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := f \cdot \frac{\pi}{4}\\
t_1 := \left(\log \pi - \log 4\right) \cdot -1\\
\log \left({\left(\frac{\cosh t\_0}{\sinh t\_0}\right)}^{\left(-1 \cdot \left(\cosh t\_1 + \sinh t\_1\right)\right)}\right)
\end{array}
\end{array}
Initial program 8.1%
Applied rewrites81.0%
lift-pow.f64N/A
pow-to-expN/A
sinh-+-cosh-revN/A
lower-+.f64N/A
lower-cosh.f64N/A
lower-*.f64N/A
lift-PI.f64N/A
lift-/.f64N/A
log-divN/A
lower--.f64N/A
lower-log.f64N/A
lift-PI.f64N/A
lower-log.f64N/A
lower-sinh.f64N/A
lower-*.f64N/A
Applied rewrites80.7%
Final simplification80.7%
herbie shell --seed 2025065
(FPCore (f)
:name "VandenBroeck and Keller, Equation (20)"
:precision binary64
(- (* (/ 1.0 (/ PI 4.0)) (log (/ (+ (exp (* (/ PI 4.0) f)) (exp (- (* (/ PI 4.0) f)))) (- (exp (* (/ PI 4.0) f)) (exp (- (* (/ PI 4.0) f)))))))))