
(FPCore (x) :precision binary64 (/ (exp x) (- (exp x) 1.0)))
double code(double x) {
return exp(x) / (exp(x) - 1.0);
}
real(8) function code(x)
real(8), intent (in) :: x
code = exp(x) / (exp(x) - 1.0d0)
end function
public static double code(double x) {
return Math.exp(x) / (Math.exp(x) - 1.0);
}
def code(x): return math.exp(x) / (math.exp(x) - 1.0)
function code(x) return Float64(exp(x) / Float64(exp(x) - 1.0)) end
function tmp = code(x) tmp = exp(x) / (exp(x) - 1.0); end
code[x_] := N[(N[Exp[x], $MachinePrecision] / N[(N[Exp[x], $MachinePrecision] - 1.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{e^{x}}{e^{x} - 1}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 16 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x) :precision binary64 (/ (exp x) (- (exp x) 1.0)))
double code(double x) {
return exp(x) / (exp(x) - 1.0);
}
real(8) function code(x)
real(8), intent (in) :: x
code = exp(x) / (exp(x) - 1.0d0)
end function
public static double code(double x) {
return Math.exp(x) / (Math.exp(x) - 1.0);
}
def code(x): return math.exp(x) / (math.exp(x) - 1.0)
function code(x) return Float64(exp(x) / Float64(exp(x) - 1.0)) end
function tmp = code(x) tmp = exp(x) / (exp(x) - 1.0); end
code[x_] := N[(N[Exp[x], $MachinePrecision] / N[(N[Exp[x], $MachinePrecision] - 1.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{e^{x}}{e^{x} - 1}
\end{array}
(FPCore (x) :precision binary64 (/ -1.0 (expm1 (- 0.0 x))))
double code(double x) {
return -1.0 / expm1((0.0 - x));
}
public static double code(double x) {
return -1.0 / Math.expm1((0.0 - x));
}
def code(x): return -1.0 / math.expm1((0.0 - x))
function code(x) return Float64(-1.0 / expm1(Float64(0.0 - x))) end
code[x_] := N[(-1.0 / N[(Exp[N[(0.0 - x), $MachinePrecision]] - 1), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{-1}{\mathsf{expm1}\left(0 - x\right)}
\end{array}
Initial program 36.6%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Final simplification100.0%
(FPCore (x) :precision binary64 (/ (exp x) x))
double code(double x) {
return exp(x) / x;
}
real(8) function code(x)
real(8), intent (in) :: x
code = exp(x) / x
end function
public static double code(double x) {
return Math.exp(x) / x;
}
def code(x): return math.exp(x) / x
function code(x) return Float64(exp(x) / x) end
function tmp = code(x) tmp = exp(x) / x; end
code[x_] := N[(N[Exp[x], $MachinePrecision] / x), $MachinePrecision]
\begin{array}{l}
\\
\frac{e^{x}}{x}
\end{array}
Initial program 36.6%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
Taylor expanded in x around 0
Simplified98.9%
(FPCore (x)
:precision binary64
(let* ((t_0
(*
(* x x)
(+ 0.5 (* x (+ -0.16666666666666666 (* x 0.041666666666666664))))))
(t_1 (* x (* x x)))
(t_2 (* x (* (* x x) 7.233796296296296e-5))))
(if (<= x -2e+77)
(/ -24.0 (* x t_1))
(if (<= x -1e+40)
(/ -1.0 (/ (- (* t_0 t_0) (* x x)) (+ x t_0)))
(/
(/
-1.0
(+
-1.0
(*
x
(+
0.5
(/
(*
x
(+
-9.92290301275212e-8
(* t_1 (* (* t_1 t_1) 3.785287098980759e-13))))
(*
(+ 2.143347050754458e-5 (* t_2 (+ t_2 0.004629629629629629)))
(+
0.027777777777777776
(*
0.041666666666666664
(*
x
(+ (* x 0.041666666666666664) 0.16666666666666666))))))))))
x)))))
double code(double x) {
double t_0 = (x * x) * (0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664))));
double t_1 = x * (x * x);
double t_2 = x * ((x * x) * 7.233796296296296e-5);
double tmp;
if (x <= -2e+77) {
tmp = -24.0 / (x * t_1);
} else if (x <= -1e+40) {
tmp = -1.0 / (((t_0 * t_0) - (x * x)) / (x + t_0));
} else {
tmp = (-1.0 / (-1.0 + (x * (0.5 + ((x * (-9.92290301275212e-8 + (t_1 * ((t_1 * t_1) * 3.785287098980759e-13)))) / ((2.143347050754458e-5 + (t_2 * (t_2 + 0.004629629629629629))) * (0.027777777777777776 + (0.041666666666666664 * (x * ((x * 0.041666666666666664) + 0.16666666666666666)))))))))) / x;
}
return tmp;
}
real(8) function code(x)
real(8), intent (in) :: x
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = (x * x) * (0.5d0 + (x * ((-0.16666666666666666d0) + (x * 0.041666666666666664d0))))
t_1 = x * (x * x)
t_2 = x * ((x * x) * 7.233796296296296d-5)
if (x <= (-2d+77)) then
tmp = (-24.0d0) / (x * t_1)
else if (x <= (-1d+40)) then
tmp = (-1.0d0) / (((t_0 * t_0) - (x * x)) / (x + t_0))
else
tmp = ((-1.0d0) / ((-1.0d0) + (x * (0.5d0 + ((x * ((-9.92290301275212d-8) + (t_1 * ((t_1 * t_1) * 3.785287098980759d-13)))) / ((2.143347050754458d-5 + (t_2 * (t_2 + 0.004629629629629629d0))) * (0.027777777777777776d0 + (0.041666666666666664d0 * (x * ((x * 0.041666666666666664d0) + 0.16666666666666666d0)))))))))) / x
end if
code = tmp
end function
public static double code(double x) {
double t_0 = (x * x) * (0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664))));
double t_1 = x * (x * x);
double t_2 = x * ((x * x) * 7.233796296296296e-5);
double tmp;
if (x <= -2e+77) {
tmp = -24.0 / (x * t_1);
} else if (x <= -1e+40) {
tmp = -1.0 / (((t_0 * t_0) - (x * x)) / (x + t_0));
} else {
tmp = (-1.0 / (-1.0 + (x * (0.5 + ((x * (-9.92290301275212e-8 + (t_1 * ((t_1 * t_1) * 3.785287098980759e-13)))) / ((2.143347050754458e-5 + (t_2 * (t_2 + 0.004629629629629629))) * (0.027777777777777776 + (0.041666666666666664 * (x * ((x * 0.041666666666666664) + 0.16666666666666666)))))))))) / x;
}
return tmp;
}
def code(x): t_0 = (x * x) * (0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664)))) t_1 = x * (x * x) t_2 = x * ((x * x) * 7.233796296296296e-5) tmp = 0 if x <= -2e+77: tmp = -24.0 / (x * t_1) elif x <= -1e+40: tmp = -1.0 / (((t_0 * t_0) - (x * x)) / (x + t_0)) else: tmp = (-1.0 / (-1.0 + (x * (0.5 + ((x * (-9.92290301275212e-8 + (t_1 * ((t_1 * t_1) * 3.785287098980759e-13)))) / ((2.143347050754458e-5 + (t_2 * (t_2 + 0.004629629629629629))) * (0.027777777777777776 + (0.041666666666666664 * (x * ((x * 0.041666666666666664) + 0.16666666666666666)))))))))) / x return tmp
function code(x) t_0 = Float64(Float64(x * x) * Float64(0.5 + Float64(x * Float64(-0.16666666666666666 + Float64(x * 0.041666666666666664))))) t_1 = Float64(x * Float64(x * x)) t_2 = Float64(x * Float64(Float64(x * x) * 7.233796296296296e-5)) tmp = 0.0 if (x <= -2e+77) tmp = Float64(-24.0 / Float64(x * t_1)); elseif (x <= -1e+40) tmp = Float64(-1.0 / Float64(Float64(Float64(t_0 * t_0) - Float64(x * x)) / Float64(x + t_0))); else tmp = Float64(Float64(-1.0 / Float64(-1.0 + Float64(x * Float64(0.5 + Float64(Float64(x * Float64(-9.92290301275212e-8 + Float64(t_1 * Float64(Float64(t_1 * t_1) * 3.785287098980759e-13)))) / Float64(Float64(2.143347050754458e-5 + Float64(t_2 * Float64(t_2 + 0.004629629629629629))) * Float64(0.027777777777777776 + Float64(0.041666666666666664 * Float64(x * Float64(Float64(x * 0.041666666666666664) + 0.16666666666666666)))))))))) / x); end return tmp end
function tmp_2 = code(x) t_0 = (x * x) * (0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664)))); t_1 = x * (x * x); t_2 = x * ((x * x) * 7.233796296296296e-5); tmp = 0.0; if (x <= -2e+77) tmp = -24.0 / (x * t_1); elseif (x <= -1e+40) tmp = -1.0 / (((t_0 * t_0) - (x * x)) / (x + t_0)); else tmp = (-1.0 / (-1.0 + (x * (0.5 + ((x * (-9.92290301275212e-8 + (t_1 * ((t_1 * t_1) * 3.785287098980759e-13)))) / ((2.143347050754458e-5 + (t_2 * (t_2 + 0.004629629629629629))) * (0.027777777777777776 + (0.041666666666666664 * (x * ((x * 0.041666666666666664) + 0.16666666666666666)))))))))) / x; end tmp_2 = tmp; end
code[x_] := Block[{t$95$0 = N[(N[(x * x), $MachinePrecision] * N[(0.5 + N[(x * N[(-0.16666666666666666 + N[(x * 0.041666666666666664), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(x * N[(x * x), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(x * N[(N[(x * x), $MachinePrecision] * 7.233796296296296e-5), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[x, -2e+77], N[(-24.0 / N[(x * t$95$1), $MachinePrecision]), $MachinePrecision], If[LessEqual[x, -1e+40], N[(-1.0 / N[(N[(N[(t$95$0 * t$95$0), $MachinePrecision] - N[(x * x), $MachinePrecision]), $MachinePrecision] / N[(x + t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(-1.0 / N[(-1.0 + N[(x * N[(0.5 + N[(N[(x * N[(-9.92290301275212e-8 + N[(t$95$1 * N[(N[(t$95$1 * t$95$1), $MachinePrecision] * 3.785287098980759e-13), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(N[(2.143347050754458e-5 + N[(t$95$2 * N[(t$95$2 + 0.004629629629629629), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(0.027777777777777776 + N[(0.041666666666666664 * N[(x * N[(N[(x * 0.041666666666666664), $MachinePrecision] + 0.16666666666666666), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / x), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(x \cdot x\right) \cdot \left(0.5 + x \cdot \left(-0.16666666666666666 + x \cdot 0.041666666666666664\right)\right)\\
t_1 := x \cdot \left(x \cdot x\right)\\
t_2 := x \cdot \left(\left(x \cdot x\right) \cdot 7.233796296296296 \cdot 10^{-5}\right)\\
\mathbf{if}\;x \leq -2 \cdot 10^{+77}:\\
\;\;\;\;\frac{-24}{x \cdot t\_1}\\
\mathbf{elif}\;x \leq -1 \cdot 10^{+40}:\\
\;\;\;\;\frac{-1}{\frac{t\_0 \cdot t\_0 - x \cdot x}{x + t\_0}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{-1}{-1 + x \cdot \left(0.5 + \frac{x \cdot \left(-9.92290301275212 \cdot 10^{-8} + t\_1 \cdot \left(\left(t\_1 \cdot t\_1\right) \cdot 3.785287098980759 \cdot 10^{-13}\right)\right)}{\left(2.143347050754458 \cdot 10^{-5} + t\_2 \cdot \left(t\_2 + 0.004629629629629629\right)\right) \cdot \left(0.027777777777777776 + 0.041666666666666664 \cdot \left(x \cdot \left(x \cdot 0.041666666666666664 + 0.16666666666666666\right)\right)\right)}\right)}}{x}\\
\end{array}
\end{array}
if x < -1.99999999999999997e77Initial program 100.0%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f64100.0%
Simplified100.0%
Taylor expanded in x around inf
/-lowering-/.f64N/A
metadata-evalN/A
pow-plusN/A
*-lowering-*.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64100.0%
Simplified100.0%
if -1.99999999999999997e77 < x < -1.00000000000000003e40Initial program 100.0%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f645.9%
Simplified5.9%
distribute-rgt-inN/A
neg-mul-1N/A
flip-+N/A
/-lowering-/.f64N/A
Applied egg-rr100.0%
if -1.00000000000000003e40 < x Initial program 14.5%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6490.3%
Simplified90.3%
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f6490.3%
Applied egg-rr90.3%
Applied egg-rr92.8%
Final simplification94.7%
(FPCore (x)
:precision binary64
(let* ((t_0 (+ 0.5 (* x (+ -0.16666666666666666 (* x 0.041666666666666664)))))
(t_1 (* x t_0)))
(if (<= x -6.8e+51)
(/
-1.0
(*
x
(+
-1.0
(*
x
(+
0.5
(/
(*
x
(+ -0.004629629629629629 (* (* x (* x x)) 7.233796296296296e-5)))
(+ 0.027777777777777776 (* x 0.006944444444444444))))))))
(/
-1.0
(/
(* x (+ -1.0 (* t_1 (* (* x x) (* t_0 t_0)))))
(+ (* t_1 (+ t_1 1.0)) 1.0))))))
double code(double x) {
double t_0 = 0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664)));
double t_1 = x * t_0;
double tmp;
if (x <= -6.8e+51) {
tmp = -1.0 / (x * (-1.0 + (x * (0.5 + ((x * (-0.004629629629629629 + ((x * (x * x)) * 7.233796296296296e-5))) / (0.027777777777777776 + (x * 0.006944444444444444)))))));
} else {
tmp = -1.0 / ((x * (-1.0 + (t_1 * ((x * x) * (t_0 * t_0))))) / ((t_1 * (t_1 + 1.0)) + 1.0));
}
return tmp;
}
real(8) function code(x)
real(8), intent (in) :: x
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = 0.5d0 + (x * ((-0.16666666666666666d0) + (x * 0.041666666666666664d0)))
t_1 = x * t_0
if (x <= (-6.8d+51)) then
tmp = (-1.0d0) / (x * ((-1.0d0) + (x * (0.5d0 + ((x * ((-0.004629629629629629d0) + ((x * (x * x)) * 7.233796296296296d-5))) / (0.027777777777777776d0 + (x * 0.006944444444444444d0)))))))
else
tmp = (-1.0d0) / ((x * ((-1.0d0) + (t_1 * ((x * x) * (t_0 * t_0))))) / ((t_1 * (t_1 + 1.0d0)) + 1.0d0))
end if
code = tmp
end function
public static double code(double x) {
double t_0 = 0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664)));
double t_1 = x * t_0;
double tmp;
if (x <= -6.8e+51) {
tmp = -1.0 / (x * (-1.0 + (x * (0.5 + ((x * (-0.004629629629629629 + ((x * (x * x)) * 7.233796296296296e-5))) / (0.027777777777777776 + (x * 0.006944444444444444)))))));
} else {
tmp = -1.0 / ((x * (-1.0 + (t_1 * ((x * x) * (t_0 * t_0))))) / ((t_1 * (t_1 + 1.0)) + 1.0));
}
return tmp;
}
def code(x): t_0 = 0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664))) t_1 = x * t_0 tmp = 0 if x <= -6.8e+51: tmp = -1.0 / (x * (-1.0 + (x * (0.5 + ((x * (-0.004629629629629629 + ((x * (x * x)) * 7.233796296296296e-5))) / (0.027777777777777776 + (x * 0.006944444444444444))))))) else: tmp = -1.0 / ((x * (-1.0 + (t_1 * ((x * x) * (t_0 * t_0))))) / ((t_1 * (t_1 + 1.0)) + 1.0)) return tmp
function code(x) t_0 = Float64(0.5 + Float64(x * Float64(-0.16666666666666666 + Float64(x * 0.041666666666666664)))) t_1 = Float64(x * t_0) tmp = 0.0 if (x <= -6.8e+51) tmp = Float64(-1.0 / Float64(x * Float64(-1.0 + Float64(x * Float64(0.5 + Float64(Float64(x * Float64(-0.004629629629629629 + Float64(Float64(x * Float64(x * x)) * 7.233796296296296e-5))) / Float64(0.027777777777777776 + Float64(x * 0.006944444444444444)))))))); else tmp = Float64(-1.0 / Float64(Float64(x * Float64(-1.0 + Float64(t_1 * Float64(Float64(x * x) * Float64(t_0 * t_0))))) / Float64(Float64(t_1 * Float64(t_1 + 1.0)) + 1.0))); end return tmp end
function tmp_2 = code(x) t_0 = 0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664))); t_1 = x * t_0; tmp = 0.0; if (x <= -6.8e+51) tmp = -1.0 / (x * (-1.0 + (x * (0.5 + ((x * (-0.004629629629629629 + ((x * (x * x)) * 7.233796296296296e-5))) / (0.027777777777777776 + (x * 0.006944444444444444))))))); else tmp = -1.0 / ((x * (-1.0 + (t_1 * ((x * x) * (t_0 * t_0))))) / ((t_1 * (t_1 + 1.0)) + 1.0)); end tmp_2 = tmp; end
code[x_] := Block[{t$95$0 = N[(0.5 + N[(x * N[(-0.16666666666666666 + N[(x * 0.041666666666666664), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(x * t$95$0), $MachinePrecision]}, If[LessEqual[x, -6.8e+51], N[(-1.0 / N[(x * N[(-1.0 + N[(x * N[(0.5 + N[(N[(x * N[(-0.004629629629629629 + N[(N[(x * N[(x * x), $MachinePrecision]), $MachinePrecision] * 7.233796296296296e-5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(0.027777777777777776 + N[(x * 0.006944444444444444), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(-1.0 / N[(N[(x * N[(-1.0 + N[(t$95$1 * N[(N[(x * x), $MachinePrecision] * N[(t$95$0 * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(N[(t$95$1 * N[(t$95$1 + 1.0), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 + x \cdot \left(-0.16666666666666666 + x \cdot 0.041666666666666664\right)\\
t_1 := x \cdot t\_0\\
\mathbf{if}\;x \leq -6.8 \cdot 10^{+51}:\\
\;\;\;\;\frac{-1}{x \cdot \left(-1 + x \cdot \left(0.5 + \frac{x \cdot \left(-0.004629629629629629 + \left(x \cdot \left(x \cdot x\right)\right) \cdot 7.233796296296296 \cdot 10^{-5}\right)}{0.027777777777777776 + x \cdot 0.006944444444444444}\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1}{\frac{x \cdot \left(-1 + t\_1 \cdot \left(\left(x \cdot x\right) \cdot \left(t\_0 \cdot t\_0\right)\right)\right)}{t\_1 \cdot \left(t\_1 + 1\right) + 1}}\\
\end{array}
\end{array}
if x < -6.79999999999999969e51Initial program 100.0%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6490.8%
Simplified90.8%
*-commutativeN/A
flip3-+N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
metadata-evalN/A
unpow-prod-downN/A
cube-unmultN/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
+-lowering-+.f64N/A
metadata-evalN/A
distribute-rgt-out--N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
--lowering--.f64N/A
Applied egg-rr28.5%
Taylor expanded in x around 0
*-commutativeN/A
*-lowering-*.f6494.0%
Simplified94.0%
if -6.79999999999999969e51 < x Initial program 16.7%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6488.1%
Simplified88.1%
*-commutativeN/A
flip3-+N/A
associate-*l/N/A
/-lowering-/.f64N/A
Applied egg-rr93.0%
Final simplification93.2%
(FPCore (x)
:precision binary64
(let* ((t_0
(*
(* x x)
(+ 0.5 (* x (+ -0.16666666666666666 (* x 0.041666666666666664)))))))
(if (<= x -2e+77)
(/ -24.0 (* x (* x (* x x))))
(if (<= x -5e-7)
(/ -1.0 (/ (- (* t_0 t_0) (* x x)) (+ x t_0)))
(+
(/ (+ (* x 0.5) 1.0) x)
(* x (+ 0.08333333333333333 (* (* x x) -0.001388888888888889))))))))
double code(double x) {
double t_0 = (x * x) * (0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664))));
double tmp;
if (x <= -2e+77) {
tmp = -24.0 / (x * (x * (x * x)));
} else if (x <= -5e-7) {
tmp = -1.0 / (((t_0 * t_0) - (x * x)) / (x + t_0));
} else {
tmp = (((x * 0.5) + 1.0) / x) + (x * (0.08333333333333333 + ((x * x) * -0.001388888888888889)));
}
return tmp;
}
real(8) function code(x)
real(8), intent (in) :: x
real(8) :: t_0
real(8) :: tmp
t_0 = (x * x) * (0.5d0 + (x * ((-0.16666666666666666d0) + (x * 0.041666666666666664d0))))
if (x <= (-2d+77)) then
tmp = (-24.0d0) / (x * (x * (x * x)))
else if (x <= (-5d-7)) then
tmp = (-1.0d0) / (((t_0 * t_0) - (x * x)) / (x + t_0))
else
tmp = (((x * 0.5d0) + 1.0d0) / x) + (x * (0.08333333333333333d0 + ((x * x) * (-0.001388888888888889d0))))
end if
code = tmp
end function
public static double code(double x) {
double t_0 = (x * x) * (0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664))));
double tmp;
if (x <= -2e+77) {
tmp = -24.0 / (x * (x * (x * x)));
} else if (x <= -5e-7) {
tmp = -1.0 / (((t_0 * t_0) - (x * x)) / (x + t_0));
} else {
tmp = (((x * 0.5) + 1.0) / x) + (x * (0.08333333333333333 + ((x * x) * -0.001388888888888889)));
}
return tmp;
}
def code(x): t_0 = (x * x) * (0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664)))) tmp = 0 if x <= -2e+77: tmp = -24.0 / (x * (x * (x * x))) elif x <= -5e-7: tmp = -1.0 / (((t_0 * t_0) - (x * x)) / (x + t_0)) else: tmp = (((x * 0.5) + 1.0) / x) + (x * (0.08333333333333333 + ((x * x) * -0.001388888888888889))) return tmp
function code(x) t_0 = Float64(Float64(x * x) * Float64(0.5 + Float64(x * Float64(-0.16666666666666666 + Float64(x * 0.041666666666666664))))) tmp = 0.0 if (x <= -2e+77) tmp = Float64(-24.0 / Float64(x * Float64(x * Float64(x * x)))); elseif (x <= -5e-7) tmp = Float64(-1.0 / Float64(Float64(Float64(t_0 * t_0) - Float64(x * x)) / Float64(x + t_0))); else tmp = Float64(Float64(Float64(Float64(x * 0.5) + 1.0) / x) + Float64(x * Float64(0.08333333333333333 + Float64(Float64(x * x) * -0.001388888888888889)))); end return tmp end
function tmp_2 = code(x) t_0 = (x * x) * (0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664)))); tmp = 0.0; if (x <= -2e+77) tmp = -24.0 / (x * (x * (x * x))); elseif (x <= -5e-7) tmp = -1.0 / (((t_0 * t_0) - (x * x)) / (x + t_0)); else tmp = (((x * 0.5) + 1.0) / x) + (x * (0.08333333333333333 + ((x * x) * -0.001388888888888889))); end tmp_2 = tmp; end
code[x_] := Block[{t$95$0 = N[(N[(x * x), $MachinePrecision] * N[(0.5 + N[(x * N[(-0.16666666666666666 + N[(x * 0.041666666666666664), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[x, -2e+77], N[(-24.0 / N[(x * N[(x * N[(x * x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[x, -5e-7], N[(-1.0 / N[(N[(N[(t$95$0 * t$95$0), $MachinePrecision] - N[(x * x), $MachinePrecision]), $MachinePrecision] / N[(x + t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[(N[(x * 0.5), $MachinePrecision] + 1.0), $MachinePrecision] / x), $MachinePrecision] + N[(x * N[(0.08333333333333333 + N[(N[(x * x), $MachinePrecision] * -0.001388888888888889), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(x \cdot x\right) \cdot \left(0.5 + x \cdot \left(-0.16666666666666666 + x \cdot 0.041666666666666664\right)\right)\\
\mathbf{if}\;x \leq -2 \cdot 10^{+77}:\\
\;\;\;\;\frac{-24}{x \cdot \left(x \cdot \left(x \cdot x\right)\right)}\\
\mathbf{elif}\;x \leq -5 \cdot 10^{-7}:\\
\;\;\;\;\frac{-1}{\frac{t\_0 \cdot t\_0 - x \cdot x}{x + t\_0}}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot 0.5 + 1}{x} + x \cdot \left(0.08333333333333333 + \left(x \cdot x\right) \cdot -0.001388888888888889\right)\\
\end{array}
\end{array}
if x < -1.99999999999999997e77Initial program 100.0%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f64100.0%
Simplified100.0%
Taylor expanded in x around inf
/-lowering-/.f64N/A
metadata-evalN/A
pow-plusN/A
*-lowering-*.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64100.0%
Simplified100.0%
if -1.99999999999999997e77 < x < -4.99999999999999977e-7Initial program 99.1%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f647.8%
Simplified7.8%
distribute-rgt-inN/A
neg-mul-1N/A
flip-+N/A
/-lowering-/.f64N/A
Applied egg-rr45.6%
if -4.99999999999999977e-7 < x Initial program 5.2%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
Taylor expanded in x around 0
*-lft-identityN/A
associate-/l*N/A
associate-*l/N/A
distribute-lft-inN/A
*-commutativeN/A
associate-+r+N/A
distribute-lft-inN/A
associate-*l/N/A
*-lft-identityN/A
+-lowering-+.f64N/A
Simplified99.6%
flip3-+N/A
/-lowering-/.f64N/A
+-lowering-+.f64N/A
cube-divN/A
metadata-evalN/A
/-lowering-/.f64N/A
cube-unmultN/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
+-lowering-+.f64N/A
frac-timesN/A
metadata-evalN/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
--lowering--.f64N/A
metadata-evalN/A
associate-*l/N/A
metadata-evalN/A
/-lowering-/.f6424.4%
Applied egg-rr24.4%
Taylor expanded in x around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6499.6%
Simplified99.6%
Final simplification93.3%
(FPCore (x)
:precision binary64
(let* ((t_0
(+ 0.5 (* x (+ -0.16666666666666666 (* x 0.041666666666666664))))))
(if (<= x -1e+106)
(/ -24.0 (* x (* x (* x x))))
(/ -1.0 (/ (* x (- 1.0 (* (* x x) (* t_0 t_0)))) (- -1.0 (* x t_0)))))))
double code(double x) {
double t_0 = 0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664)));
double tmp;
if (x <= -1e+106) {
tmp = -24.0 / (x * (x * (x * x)));
} else {
tmp = -1.0 / ((x * (1.0 - ((x * x) * (t_0 * t_0)))) / (-1.0 - (x * t_0)));
}
return tmp;
}
real(8) function code(x)
real(8), intent (in) :: x
real(8) :: t_0
real(8) :: tmp
t_0 = 0.5d0 + (x * ((-0.16666666666666666d0) + (x * 0.041666666666666664d0)))
if (x <= (-1d+106)) then
tmp = (-24.0d0) / (x * (x * (x * x)))
else
tmp = (-1.0d0) / ((x * (1.0d0 - ((x * x) * (t_0 * t_0)))) / ((-1.0d0) - (x * t_0)))
end if
code = tmp
end function
public static double code(double x) {
double t_0 = 0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664)));
double tmp;
if (x <= -1e+106) {
tmp = -24.0 / (x * (x * (x * x)));
} else {
tmp = -1.0 / ((x * (1.0 - ((x * x) * (t_0 * t_0)))) / (-1.0 - (x * t_0)));
}
return tmp;
}
def code(x): t_0 = 0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664))) tmp = 0 if x <= -1e+106: tmp = -24.0 / (x * (x * (x * x))) else: tmp = -1.0 / ((x * (1.0 - ((x * x) * (t_0 * t_0)))) / (-1.0 - (x * t_0))) return tmp
function code(x) t_0 = Float64(0.5 + Float64(x * Float64(-0.16666666666666666 + Float64(x * 0.041666666666666664)))) tmp = 0.0 if (x <= -1e+106) tmp = Float64(-24.0 / Float64(x * Float64(x * Float64(x * x)))); else tmp = Float64(-1.0 / Float64(Float64(x * Float64(1.0 - Float64(Float64(x * x) * Float64(t_0 * t_0)))) / Float64(-1.0 - Float64(x * t_0)))); end return tmp end
function tmp_2 = code(x) t_0 = 0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664))); tmp = 0.0; if (x <= -1e+106) tmp = -24.0 / (x * (x * (x * x))); else tmp = -1.0 / ((x * (1.0 - ((x * x) * (t_0 * t_0)))) / (-1.0 - (x * t_0))); end tmp_2 = tmp; end
code[x_] := Block[{t$95$0 = N[(0.5 + N[(x * N[(-0.16666666666666666 + N[(x * 0.041666666666666664), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[x, -1e+106], N[(-24.0 / N[(x * N[(x * N[(x * x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(-1.0 / N[(N[(x * N[(1.0 - N[(N[(x * x), $MachinePrecision] * N[(t$95$0 * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(-1.0 - N[(x * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 + x \cdot \left(-0.16666666666666666 + x \cdot 0.041666666666666664\right)\\
\mathbf{if}\;x \leq -1 \cdot 10^{+106}:\\
\;\;\;\;\frac{-24}{x \cdot \left(x \cdot \left(x \cdot x\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1}{\frac{x \cdot \left(1 - \left(x \cdot x\right) \cdot \left(t\_0 \cdot t\_0\right)\right)}{-1 - x \cdot t\_0}}\\
\end{array}
\end{array}
if x < -1.00000000000000009e106Initial program 100.0%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f64100.0%
Simplified100.0%
Taylor expanded in x around inf
/-lowering-/.f64N/A
metadata-evalN/A
pow-plusN/A
*-lowering-*.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64100.0%
Simplified100.0%
if -1.00000000000000009e106 < x Initial program 21.2%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6486.0%
Simplified86.0%
*-commutativeN/A
flip-+N/A
associate-*l/N/A
/-lowering-/.f64N/A
Applied egg-rr89.2%
Final simplification91.3%
(FPCore (x)
:precision binary64
(/
-1.0
(*
x
(+
-1.0
(*
x
(+
0.5
(/
(* x (+ -0.004629629629629629 (* (* x (* x x)) 7.233796296296296e-5)))
(+ 0.027777777777777776 (* x 0.006944444444444444)))))))))
double code(double x) {
return -1.0 / (x * (-1.0 + (x * (0.5 + ((x * (-0.004629629629629629 + ((x * (x * x)) * 7.233796296296296e-5))) / (0.027777777777777776 + (x * 0.006944444444444444)))))));
}
real(8) function code(x)
real(8), intent (in) :: x
code = (-1.0d0) / (x * ((-1.0d0) + (x * (0.5d0 + ((x * ((-0.004629629629629629d0) + ((x * (x * x)) * 7.233796296296296d-5))) / (0.027777777777777776d0 + (x * 0.006944444444444444d0)))))))
end function
public static double code(double x) {
return -1.0 / (x * (-1.0 + (x * (0.5 + ((x * (-0.004629629629629629 + ((x * (x * x)) * 7.233796296296296e-5))) / (0.027777777777777776 + (x * 0.006944444444444444)))))));
}
def code(x): return -1.0 / (x * (-1.0 + (x * (0.5 + ((x * (-0.004629629629629629 + ((x * (x * x)) * 7.233796296296296e-5))) / (0.027777777777777776 + (x * 0.006944444444444444)))))))
function code(x) return Float64(-1.0 / Float64(x * Float64(-1.0 + Float64(x * Float64(0.5 + Float64(Float64(x * Float64(-0.004629629629629629 + Float64(Float64(x * Float64(x * x)) * 7.233796296296296e-5))) / Float64(0.027777777777777776 + Float64(x * 0.006944444444444444)))))))) end
function tmp = code(x) tmp = -1.0 / (x * (-1.0 + (x * (0.5 + ((x * (-0.004629629629629629 + ((x * (x * x)) * 7.233796296296296e-5))) / (0.027777777777777776 + (x * 0.006944444444444444))))))); end
code[x_] := N[(-1.0 / N[(x * N[(-1.0 + N[(x * N[(0.5 + N[(N[(x * N[(-0.004629629629629629 + N[(N[(x * N[(x * x), $MachinePrecision]), $MachinePrecision] * 7.233796296296296e-5), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(0.027777777777777776 + N[(x * 0.006944444444444444), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{-1}{x \cdot \left(-1 + x \cdot \left(0.5 + \frac{x \cdot \left(-0.004629629629629629 + \left(x \cdot \left(x \cdot x\right)\right) \cdot 7.233796296296296 \cdot 10^{-5}\right)}{0.027777777777777776 + x \cdot 0.006944444444444444}\right)\right)}
\end{array}
Initial program 36.6%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6488.8%
Simplified88.8%
*-commutativeN/A
flip3-+N/A
associate-*l/N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
metadata-evalN/A
unpow-prod-downN/A
cube-unmultN/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
+-lowering-+.f64N/A
metadata-evalN/A
distribute-rgt-out--N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
--lowering--.f64N/A
Applied egg-rr73.9%
Taylor expanded in x around 0
*-commutativeN/A
*-lowering-*.f6489.6%
Simplified89.6%
Final simplification89.6%
(FPCore (x)
:precision binary64
(if (<= x -3.95)
(/ (+ -24.0 (/ -96.0 x)) (* x (* x (* x x))))
(+
(* x (+ 0.08333333333333333 (* (* x x) -0.001388888888888889)))
(+ 0.5 (/ 1.0 x)))))
double code(double x) {
double tmp;
if (x <= -3.95) {
tmp = (-24.0 + (-96.0 / x)) / (x * (x * (x * x)));
} else {
tmp = (x * (0.08333333333333333 + ((x * x) * -0.001388888888888889))) + (0.5 + (1.0 / x));
}
return tmp;
}
real(8) function code(x)
real(8), intent (in) :: x
real(8) :: tmp
if (x <= (-3.95d0)) then
tmp = ((-24.0d0) + ((-96.0d0) / x)) / (x * (x * (x * x)))
else
tmp = (x * (0.08333333333333333d0 + ((x * x) * (-0.001388888888888889d0)))) + (0.5d0 + (1.0d0 / x))
end if
code = tmp
end function
public static double code(double x) {
double tmp;
if (x <= -3.95) {
tmp = (-24.0 + (-96.0 / x)) / (x * (x * (x * x)));
} else {
tmp = (x * (0.08333333333333333 + ((x * x) * -0.001388888888888889))) + (0.5 + (1.0 / x));
}
return tmp;
}
def code(x): tmp = 0 if x <= -3.95: tmp = (-24.0 + (-96.0 / x)) / (x * (x * (x * x))) else: tmp = (x * (0.08333333333333333 + ((x * x) * -0.001388888888888889))) + (0.5 + (1.0 / x)) return tmp
function code(x) tmp = 0.0 if (x <= -3.95) tmp = Float64(Float64(-24.0 + Float64(-96.0 / x)) / Float64(x * Float64(x * Float64(x * x)))); else tmp = Float64(Float64(x * Float64(0.08333333333333333 + Float64(Float64(x * x) * -0.001388888888888889))) + Float64(0.5 + Float64(1.0 / x))); end return tmp end
function tmp_2 = code(x) tmp = 0.0; if (x <= -3.95) tmp = (-24.0 + (-96.0 / x)) / (x * (x * (x * x))); else tmp = (x * (0.08333333333333333 + ((x * x) * -0.001388888888888889))) + (0.5 + (1.0 / x)); end tmp_2 = tmp; end
code[x_] := If[LessEqual[x, -3.95], N[(N[(-24.0 + N[(-96.0 / x), $MachinePrecision]), $MachinePrecision] / N[(x * N[(x * N[(x * x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(x * N[(0.08333333333333333 + N[(N[(x * x), $MachinePrecision] * -0.001388888888888889), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(0.5 + N[(1.0 / x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;x \leq -3.95:\\
\;\;\;\;\frac{-24 + \frac{-96}{x}}{x \cdot \left(x \cdot \left(x \cdot x\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \left(0.08333333333333333 + \left(x \cdot x\right) \cdot -0.001388888888888889\right) + \left(0.5 + \frac{1}{x}\right)\\
\end{array}
\end{array}
if x < -3.9500000000000002Initial program 100.0%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6467.1%
Simplified67.1%
Taylor expanded in x around inf
associate-*r/N/A
/-lowering-/.f64N/A
distribute-lft-inN/A
metadata-evalN/A
+-lowering-+.f64N/A
neg-mul-1N/A
associate-*r/N/A
metadata-evalN/A
distribute-neg-fracN/A
/-lowering-/.f64N/A
metadata-evalN/A
metadata-evalN/A
pow-plusN/A
*-lowering-*.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6467.1%
Simplified67.1%
if -3.9500000000000002 < x Initial program 5.6%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
Taylor expanded in x around 0
*-lft-identityN/A
associate-/l*N/A
associate-*l/N/A
distribute-lft-inN/A
*-commutativeN/A
associate-+r+N/A
distribute-lft-inN/A
associate-*l/N/A
*-lft-identityN/A
+-lowering-+.f64N/A
Simplified99.6%
Final simplification88.9%
(FPCore (x) :precision binary64 (if (<= x -4.2) (/ (+ -24.0 (/ -96.0 x)) (* x (* x (* x x)))) (/ (+ (* x (+ 0.5 (* x 0.08333333333333333))) 1.0) x)))
double code(double x) {
double tmp;
if (x <= -4.2) {
tmp = (-24.0 + (-96.0 / x)) / (x * (x * (x * x)));
} else {
tmp = ((x * (0.5 + (x * 0.08333333333333333))) + 1.0) / x;
}
return tmp;
}
real(8) function code(x)
real(8), intent (in) :: x
real(8) :: tmp
if (x <= (-4.2d0)) then
tmp = ((-24.0d0) + ((-96.0d0) / x)) / (x * (x * (x * x)))
else
tmp = ((x * (0.5d0 + (x * 0.08333333333333333d0))) + 1.0d0) / x
end if
code = tmp
end function
public static double code(double x) {
double tmp;
if (x <= -4.2) {
tmp = (-24.0 + (-96.0 / x)) / (x * (x * (x * x)));
} else {
tmp = ((x * (0.5 + (x * 0.08333333333333333))) + 1.0) / x;
}
return tmp;
}
def code(x): tmp = 0 if x <= -4.2: tmp = (-24.0 + (-96.0 / x)) / (x * (x * (x * x))) else: tmp = ((x * (0.5 + (x * 0.08333333333333333))) + 1.0) / x return tmp
function code(x) tmp = 0.0 if (x <= -4.2) tmp = Float64(Float64(-24.0 + Float64(-96.0 / x)) / Float64(x * Float64(x * Float64(x * x)))); else tmp = Float64(Float64(Float64(x * Float64(0.5 + Float64(x * 0.08333333333333333))) + 1.0) / x); end return tmp end
function tmp_2 = code(x) tmp = 0.0; if (x <= -4.2) tmp = (-24.0 + (-96.0 / x)) / (x * (x * (x * x))); else tmp = ((x * (0.5 + (x * 0.08333333333333333))) + 1.0) / x; end tmp_2 = tmp; end
code[x_] := If[LessEqual[x, -4.2], N[(N[(-24.0 + N[(-96.0 / x), $MachinePrecision]), $MachinePrecision] / N[(x * N[(x * N[(x * x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[(x * N[(0.5 + N[(x * 0.08333333333333333), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision] / x), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;x \leq -4.2:\\
\;\;\;\;\frac{-24 + \frac{-96}{x}}{x \cdot \left(x \cdot \left(x \cdot x\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \left(0.5 + x \cdot 0.08333333333333333\right) + 1}{x}\\
\end{array}
\end{array}
if x < -4.20000000000000018Initial program 100.0%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6467.1%
Simplified67.1%
Taylor expanded in x around inf
associate-*r/N/A
/-lowering-/.f64N/A
distribute-lft-inN/A
metadata-evalN/A
+-lowering-+.f64N/A
neg-mul-1N/A
associate-*r/N/A
metadata-evalN/A
distribute-neg-fracN/A
/-lowering-/.f64N/A
metadata-evalN/A
metadata-evalN/A
pow-plusN/A
*-lowering-*.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6467.1%
Simplified67.1%
if -4.20000000000000018 < x Initial program 5.6%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
Simplified99.4%
Final simplification88.8%
(FPCore (x)
:precision binary64
(/
(/
-1.0
(+
-1.0
(* x (+ 0.5 (* x (+ -0.16666666666666666 (* x 0.041666666666666664)))))))
x))
double code(double x) {
return (-1.0 / (-1.0 + (x * (0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664))))))) / x;
}
real(8) function code(x)
real(8), intent (in) :: x
code = ((-1.0d0) / ((-1.0d0) + (x * (0.5d0 + (x * ((-0.16666666666666666d0) + (x * 0.041666666666666664d0))))))) / x
end function
public static double code(double x) {
return (-1.0 / (-1.0 + (x * (0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664))))))) / x;
}
def code(x): return (-1.0 / (-1.0 + (x * (0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664))))))) / x
function code(x) return Float64(Float64(-1.0 / Float64(-1.0 + Float64(x * Float64(0.5 + Float64(x * Float64(-0.16666666666666666 + Float64(x * 0.041666666666666664))))))) / x) end
function tmp = code(x) tmp = (-1.0 / (-1.0 + (x * (0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664))))))) / x; end
code[x_] := N[(N[(-1.0 / N[(-1.0 + N[(x * N[(0.5 + N[(x * N[(-0.16666666666666666 + N[(x * 0.041666666666666664), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / x), $MachinePrecision]
\begin{array}{l}
\\
\frac{\frac{-1}{-1 + x \cdot \left(0.5 + x \cdot \left(-0.16666666666666666 + x \cdot 0.041666666666666664\right)\right)}}{x}
\end{array}
Initial program 36.6%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6488.8%
Simplified88.8%
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f6488.8%
Applied egg-rr88.8%
(FPCore (x)
:precision binary64
(/
-1.0
(*
x
(+
-1.0
(* x (+ 0.5 (* x (+ -0.16666666666666666 (* x 0.041666666666666664)))))))))
double code(double x) {
return -1.0 / (x * (-1.0 + (x * (0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664)))))));
}
real(8) function code(x)
real(8), intent (in) :: x
code = (-1.0d0) / (x * ((-1.0d0) + (x * (0.5d0 + (x * ((-0.16666666666666666d0) + (x * 0.041666666666666664d0)))))))
end function
public static double code(double x) {
return -1.0 / (x * (-1.0 + (x * (0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664)))))));
}
def code(x): return -1.0 / (x * (-1.0 + (x * (0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664)))))))
function code(x) return Float64(-1.0 / Float64(x * Float64(-1.0 + Float64(x * Float64(0.5 + Float64(x * Float64(-0.16666666666666666 + Float64(x * 0.041666666666666664)))))))) end
function tmp = code(x) tmp = -1.0 / (x * (-1.0 + (x * (0.5 + (x * (-0.16666666666666666 + (x * 0.041666666666666664))))))); end
code[x_] := N[(-1.0 / N[(x * N[(-1.0 + N[(x * N[(0.5 + N[(x * N[(-0.16666666666666666 + N[(x * 0.041666666666666664), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{-1}{x \cdot \left(-1 + x \cdot \left(0.5 + x \cdot \left(-0.16666666666666666 + x \cdot 0.041666666666666664\right)\right)\right)}
\end{array}
Initial program 36.6%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6488.8%
Simplified88.8%
(FPCore (x) :precision binary64 (if (<= x -4.0) (/ -24.0 (* x (* x (* x x)))) (/ (+ (* x (+ 0.5 (* x 0.08333333333333333))) 1.0) x)))
double code(double x) {
double tmp;
if (x <= -4.0) {
tmp = -24.0 / (x * (x * (x * x)));
} else {
tmp = ((x * (0.5 + (x * 0.08333333333333333))) + 1.0) / x;
}
return tmp;
}
real(8) function code(x)
real(8), intent (in) :: x
real(8) :: tmp
if (x <= (-4.0d0)) then
tmp = (-24.0d0) / (x * (x * (x * x)))
else
tmp = ((x * (0.5d0 + (x * 0.08333333333333333d0))) + 1.0d0) / x
end if
code = tmp
end function
public static double code(double x) {
double tmp;
if (x <= -4.0) {
tmp = -24.0 / (x * (x * (x * x)));
} else {
tmp = ((x * (0.5 + (x * 0.08333333333333333))) + 1.0) / x;
}
return tmp;
}
def code(x): tmp = 0 if x <= -4.0: tmp = -24.0 / (x * (x * (x * x))) else: tmp = ((x * (0.5 + (x * 0.08333333333333333))) + 1.0) / x return tmp
function code(x) tmp = 0.0 if (x <= -4.0) tmp = Float64(-24.0 / Float64(x * Float64(x * Float64(x * x)))); else tmp = Float64(Float64(Float64(x * Float64(0.5 + Float64(x * 0.08333333333333333))) + 1.0) / x); end return tmp end
function tmp_2 = code(x) tmp = 0.0; if (x <= -4.0) tmp = -24.0 / (x * (x * (x * x))); else tmp = ((x * (0.5 + (x * 0.08333333333333333))) + 1.0) / x; end tmp_2 = tmp; end
code[x_] := If[LessEqual[x, -4.0], N[(-24.0 / N[(x * N[(x * N[(x * x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[(x * N[(0.5 + N[(x * 0.08333333333333333), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision] / x), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;x \leq -4:\\
\;\;\;\;\frac{-24}{x \cdot \left(x \cdot \left(x \cdot x\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \left(0.5 + x \cdot 0.08333333333333333\right) + 1}{x}\\
\end{array}
\end{array}
if x < -4Initial program 100.0%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6467.1%
Simplified67.1%
Taylor expanded in x around inf
/-lowering-/.f64N/A
metadata-evalN/A
pow-plusN/A
*-lowering-*.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6467.1%
Simplified67.1%
if -4 < x Initial program 5.6%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
Simplified99.4%
Final simplification88.8%
(FPCore (x) :precision binary64 (/ (/ -1.0 (+ -1.0 (* x (+ 0.5 (* x (* x 0.041666666666666664)))))) x))
double code(double x) {
return (-1.0 / (-1.0 + (x * (0.5 + (x * (x * 0.041666666666666664)))))) / x;
}
real(8) function code(x)
real(8), intent (in) :: x
code = ((-1.0d0) / ((-1.0d0) + (x * (0.5d0 + (x * (x * 0.041666666666666664d0)))))) / x
end function
public static double code(double x) {
return (-1.0 / (-1.0 + (x * (0.5 + (x * (x * 0.041666666666666664)))))) / x;
}
def code(x): return (-1.0 / (-1.0 + (x * (0.5 + (x * (x * 0.041666666666666664)))))) / x
function code(x) return Float64(Float64(-1.0 / Float64(-1.0 + Float64(x * Float64(0.5 + Float64(x * Float64(x * 0.041666666666666664)))))) / x) end
function tmp = code(x) tmp = (-1.0 / (-1.0 + (x * (0.5 + (x * (x * 0.041666666666666664)))))) / x; end
code[x_] := N[(N[(-1.0 / N[(-1.0 + N[(x * N[(0.5 + N[(x * N[(x * 0.041666666666666664), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / x), $MachinePrecision]
\begin{array}{l}
\\
\frac{\frac{-1}{-1 + x \cdot \left(0.5 + x \cdot \left(x \cdot 0.041666666666666664\right)\right)}}{x}
\end{array}
Initial program 36.6%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6488.8%
Simplified88.8%
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f64N/A
/-lowering-/.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f6488.8%
Applied egg-rr88.8%
Taylor expanded in x around inf
unpow2N/A
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
*-commutativeN/A
*-lowering-*.f6488.5%
Simplified88.5%
(FPCore (x) :precision binary64 (if (<= x -4.0) (/ -24.0 (* x (* x (* x x)))) (+ (/ 1.0 x) (+ 0.5 (* x 0.08333333333333333)))))
double code(double x) {
double tmp;
if (x <= -4.0) {
tmp = -24.0 / (x * (x * (x * x)));
} else {
tmp = (1.0 / x) + (0.5 + (x * 0.08333333333333333));
}
return tmp;
}
real(8) function code(x)
real(8), intent (in) :: x
real(8) :: tmp
if (x <= (-4.0d0)) then
tmp = (-24.0d0) / (x * (x * (x * x)))
else
tmp = (1.0d0 / x) + (0.5d0 + (x * 0.08333333333333333d0))
end if
code = tmp
end function
public static double code(double x) {
double tmp;
if (x <= -4.0) {
tmp = -24.0 / (x * (x * (x * x)));
} else {
tmp = (1.0 / x) + (0.5 + (x * 0.08333333333333333));
}
return tmp;
}
def code(x): tmp = 0 if x <= -4.0: tmp = -24.0 / (x * (x * (x * x))) else: tmp = (1.0 / x) + (0.5 + (x * 0.08333333333333333)) return tmp
function code(x) tmp = 0.0 if (x <= -4.0) tmp = Float64(-24.0 / Float64(x * Float64(x * Float64(x * x)))); else tmp = Float64(Float64(1.0 / x) + Float64(0.5 + Float64(x * 0.08333333333333333))); end return tmp end
function tmp_2 = code(x) tmp = 0.0; if (x <= -4.0) tmp = -24.0 / (x * (x * (x * x))); else tmp = (1.0 / x) + (0.5 + (x * 0.08333333333333333)); end tmp_2 = tmp; end
code[x_] := If[LessEqual[x, -4.0], N[(-24.0 / N[(x * N[(x * N[(x * x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(1.0 / x), $MachinePrecision] + N[(0.5 + N[(x * 0.08333333333333333), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;x \leq -4:\\
\;\;\;\;\frac{-24}{x \cdot \left(x \cdot \left(x \cdot x\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{x} + \left(0.5 + x \cdot 0.08333333333333333\right)\\
\end{array}
\end{array}
if x < -4Initial program 100.0%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
clear-numN/A
frac-2negN/A
/-lowering-/.f64N/A
metadata-evalN/A
distribute-neg-fracN/A
neg-sub0N/A
associate-+l-N/A
neg-sub0N/A
+-commutativeN/A
sub-negN/A
div-subN/A
rec-expN/A
*-inversesN/A
accelerator-lowering-expm1.f64N/A
neg-lowering-neg.f64100.0%
Applied egg-rr100.0%
Taylor expanded in x around 0
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6467.1%
Simplified67.1%
Taylor expanded in x around inf
/-lowering-/.f64N/A
metadata-evalN/A
pow-plusN/A
*-lowering-*.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6467.1%
Simplified67.1%
if -4 < x Initial program 5.6%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
Taylor expanded in x around 0
*-lft-identityN/A
associate-/l*N/A
associate-*l/N/A
distribute-lft-inN/A
*-rgt-identityN/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
distribute-lft-inN/A
*-commutativeN/A
distribute-rgt-inN/A
*-commutativeN/A
associate-*r*N/A
lft-mult-inverseN/A
*-lft-identityN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
associate-*l*N/A
rgt-mult-inverseN/A
metadata-eval99.4%
Simplified99.4%
Final simplification88.8%
(FPCore (x) :precision binary64 (/ 1.0 x))
double code(double x) {
return 1.0 / x;
}
real(8) function code(x)
real(8), intent (in) :: x
code = 1.0d0 / x
end function
public static double code(double x) {
return 1.0 / x;
}
def code(x): return 1.0 / x
function code(x) return Float64(1.0 / x) end
function tmp = code(x) tmp = 1.0 / x; end
code[x_] := N[(1.0 / x), $MachinePrecision]
\begin{array}{l}
\\
\frac{1}{x}
\end{array}
Initial program 36.6%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
Taylor expanded in x around 0
/-lowering-/.f6467.8%
Simplified67.8%
(FPCore (x) :precision binary64 0.5)
double code(double x) {
return 0.5;
}
real(8) function code(x)
real(8), intent (in) :: x
code = 0.5d0
end function
public static double code(double x) {
return 0.5;
}
def code(x): return 0.5
function code(x) return 0.5 end
function tmp = code(x) tmp = 0.5; end
code[x_] := 0.5
\begin{array}{l}
\\
0.5
\end{array}
Initial program 36.6%
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
accelerator-lowering-expm1.f64100.0%
Simplified100.0%
Taylor expanded in x around 0
*-rgt-identityN/A
associate-/l*N/A
+-commutativeN/A
distribute-rgt1-inN/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
associate-*l*N/A
rgt-mult-inverseN/A
metadata-eval67.5%
Simplified67.5%
Taylor expanded in x around inf
Simplified3.2%
(FPCore (x) :precision binary64 (/ (- 1.0) (expm1 (- x))))
double code(double x) {
return -1.0 / expm1(-x);
}
public static double code(double x) {
return -1.0 / Math.expm1(-x);
}
def code(x): return -1.0 / math.expm1(-x)
function code(x) return Float64(Float64(-1.0) / expm1(Float64(-x))) end
code[x_] := N[((-1.0) / N[(Exp[(-x)] - 1), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{-1}{\mathsf{expm1}\left(-x\right)}
\end{array}
herbie shell --seed 2024191
(FPCore (x)
:name "expq2 (section 3.11)"
:precision binary64
:pre (> 710.0 x)
:alt
(! :herbie-platform default (/ (- 1) (expm1 (- x))))
(/ (exp x) (- (exp x) 1.0)))