
(FPCore (x) :precision binary64 (- (/ 2.0 (+ 1.0 (exp (* -2.0 x)))) 1.0))
double code(double x) {
return (2.0 / (1.0 + exp((-2.0 * x)))) - 1.0;
}
real(8) function code(x)
real(8), intent (in) :: x
code = (2.0d0 / (1.0d0 + exp(((-2.0d0) * x)))) - 1.0d0
end function
public static double code(double x) {
return (2.0 / (1.0 + Math.exp((-2.0 * x)))) - 1.0;
}
def code(x): return (2.0 / (1.0 + math.exp((-2.0 * x)))) - 1.0
function code(x) return Float64(Float64(2.0 / Float64(1.0 + exp(Float64(-2.0 * x)))) - 1.0) end
function tmp = code(x) tmp = (2.0 / (1.0 + exp((-2.0 * x)))) - 1.0; end
code[x_] := N[(N[(2.0 / N[(1.0 + N[Exp[N[(-2.0 * x), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - 1.0), $MachinePrecision]
\begin{array}{l}
\\
\frac{2}{1 + e^{-2 \cdot x}} - 1
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 10 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x) :precision binary64 (- (/ 2.0 (+ 1.0 (exp (* -2.0 x)))) 1.0))
double code(double x) {
return (2.0 / (1.0 + exp((-2.0 * x)))) - 1.0;
}
real(8) function code(x)
real(8), intent (in) :: x
code = (2.0d0 / (1.0d0 + exp(((-2.0d0) * x)))) - 1.0d0
end function
public static double code(double x) {
return (2.0 / (1.0 + Math.exp((-2.0 * x)))) - 1.0;
}
def code(x): return (2.0 / (1.0 + math.exp((-2.0 * x)))) - 1.0
function code(x) return Float64(Float64(2.0 / Float64(1.0 + exp(Float64(-2.0 * x)))) - 1.0) end
function tmp = code(x) tmp = (2.0 / (1.0 + exp((-2.0 * x)))) - 1.0; end
code[x_] := N[(N[(2.0 / N[(1.0 + N[Exp[N[(-2.0 * x), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - 1.0), $MachinePrecision]
\begin{array}{l}
\\
\frac{2}{1 + e^{-2 \cdot x}} - 1
\end{array}
(FPCore (x)
:precision binary64
(let* ((t_0 (+ 1.0 (pow (exp x) -2.0)))
(t_1 (+ 1.0 (exp (* -2.0 x))))
(t_2 (/ 2.0 t_1))
(t_3 (pow t_0 -2.0)))
(if (<= (* -2.0 x) -10000000.0)
(- t_2 1.0)
(if (<= (* -2.0 x) 1e-7)
(fma
(* (fma 0.13333333333333333 (* x x) -0.3333333333333333) (* x x))
x
x)
(fma
(/ 8.0 t_0)
(/ t_3 (fma 4.0 t_3 (- (/ 2.0 t_0) -1.0)))
(/ -1.0 (fma 4.0 (pow t_1 -2.0) (- t_2 -1.0))))))))
double code(double x) {
double t_0 = 1.0 + pow(exp(x), -2.0);
double t_1 = 1.0 + exp((-2.0 * x));
double t_2 = 2.0 / t_1;
double t_3 = pow(t_0, -2.0);
double tmp;
if ((-2.0 * x) <= -10000000.0) {
tmp = t_2 - 1.0;
} else if ((-2.0 * x) <= 1e-7) {
tmp = fma((fma(0.13333333333333333, (x * x), -0.3333333333333333) * (x * x)), x, x);
} else {
tmp = fma((8.0 / t_0), (t_3 / fma(4.0, t_3, ((2.0 / t_0) - -1.0))), (-1.0 / fma(4.0, pow(t_1, -2.0), (t_2 - -1.0))));
}
return tmp;
}
function code(x) t_0 = Float64(1.0 + (exp(x) ^ -2.0)) t_1 = Float64(1.0 + exp(Float64(-2.0 * x))) t_2 = Float64(2.0 / t_1) t_3 = t_0 ^ -2.0 tmp = 0.0 if (Float64(-2.0 * x) <= -10000000.0) tmp = Float64(t_2 - 1.0); elseif (Float64(-2.0 * x) <= 1e-7) tmp = fma(Float64(fma(0.13333333333333333, Float64(x * x), -0.3333333333333333) * Float64(x * x)), x, x); else tmp = fma(Float64(8.0 / t_0), Float64(t_3 / fma(4.0, t_3, Float64(Float64(2.0 / t_0) - -1.0))), Float64(-1.0 / fma(4.0, (t_1 ^ -2.0), Float64(t_2 - -1.0)))); end return tmp end
code[x_] := Block[{t$95$0 = N[(1.0 + N[Power[N[Exp[x], $MachinePrecision], -2.0], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(1.0 + N[Exp[N[(-2.0 * x), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(2.0 / t$95$1), $MachinePrecision]}, Block[{t$95$3 = N[Power[t$95$0, -2.0], $MachinePrecision]}, If[LessEqual[N[(-2.0 * x), $MachinePrecision], -10000000.0], N[(t$95$2 - 1.0), $MachinePrecision], If[LessEqual[N[(-2.0 * x), $MachinePrecision], 1e-7], N[(N[(N[(0.13333333333333333 * N[(x * x), $MachinePrecision] + -0.3333333333333333), $MachinePrecision] * N[(x * x), $MachinePrecision]), $MachinePrecision] * x + x), $MachinePrecision], N[(N[(8.0 / t$95$0), $MachinePrecision] * N[(t$95$3 / N[(4.0 * t$95$3 + N[(N[(2.0 / t$95$0), $MachinePrecision] - -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(-1.0 / N[(4.0 * N[Power[t$95$1, -2.0], $MachinePrecision] + N[(t$95$2 - -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 1 + {\left(e^{x}\right)}^{-2}\\
t_1 := 1 + e^{-2 \cdot x}\\
t_2 := \frac{2}{t\_1}\\
t_3 := {t\_0}^{-2}\\
\mathbf{if}\;-2 \cdot x \leq -10000000:\\
\;\;\;\;t\_2 - 1\\
\mathbf{elif}\;-2 \cdot x \leq 10^{-7}:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(0.13333333333333333, x \cdot x, -0.3333333333333333\right) \cdot \left(x \cdot x\right), x, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{8}{t\_0}, \frac{t\_3}{\mathsf{fma}\left(4, t\_3, \frac{2}{t\_0} - -1\right)}, \frac{-1}{\mathsf{fma}\left(4, {t\_1}^{-2}, t\_2 - -1\right)}\right)\\
\end{array}
\end{array}
if (*.f64 #s(literal -2 binary64) x) < -1e7Initial program 100.0%
if -1e7 < (*.f64 #s(literal -2 binary64) x) < 9.9999999999999995e-8Initial program 6.8%
Applied rewrites6.7%
Taylor expanded in x around 0
+-commutativeN/A
distribute-lft-inN/A
associate-*r*N/A
unpow2N/A
cube-multN/A
*-rgt-identityN/A
lower-fma.f64N/A
lower-pow.f64N/A
sub-negN/A
metadata-evalN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64100.0
Applied rewrites100.0%
Applied rewrites100.0%
if 9.9999999999999995e-8 < (*.f64 #s(literal -2 binary64) x) Initial program 99.9%
Applied rewrites100.0%
lift-fma.f64N/A
*-commutativeN/A
Applied rewrites100.0%
lift-pow.f64N/A
lift-exp.f64N/A
pow-expN/A
*-commutativeN/A
lower-exp.f64N/A
lower-*.f64100.0
Applied rewrites100.0%
lift-pow.f64N/A
lift-exp.f64N/A
pow-expN/A
*-commutativeN/A
lift-*.f64N/A
lift-exp.f64100.0
Applied rewrites100.0%
(FPCore (x)
:precision binary64
(if (or (<= (* -2.0 x) -10000000.0) (not (<= (* -2.0 x) 1e-7)))
(- (/ 2.0 (+ 1.0 (exp (* -2.0 x)))) 1.0)
(fma
(* (fma 0.13333333333333333 (* x x) -0.3333333333333333) (* x x))
x
x)))
double code(double x) {
double tmp;
if (((-2.0 * x) <= -10000000.0) || !((-2.0 * x) <= 1e-7)) {
tmp = (2.0 / (1.0 + exp((-2.0 * x)))) - 1.0;
} else {
tmp = fma((fma(0.13333333333333333, (x * x), -0.3333333333333333) * (x * x)), x, x);
}
return tmp;
}
function code(x) tmp = 0.0 if ((Float64(-2.0 * x) <= -10000000.0) || !(Float64(-2.0 * x) <= 1e-7)) tmp = Float64(Float64(2.0 / Float64(1.0 + exp(Float64(-2.0 * x)))) - 1.0); else tmp = fma(Float64(fma(0.13333333333333333, Float64(x * x), -0.3333333333333333) * Float64(x * x)), x, x); end return tmp end
code[x_] := If[Or[LessEqual[N[(-2.0 * x), $MachinePrecision], -10000000.0], N[Not[LessEqual[N[(-2.0 * x), $MachinePrecision], 1e-7]], $MachinePrecision]], N[(N[(2.0 / N[(1.0 + N[Exp[N[(-2.0 * x), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - 1.0), $MachinePrecision], N[(N[(N[(0.13333333333333333 * N[(x * x), $MachinePrecision] + -0.3333333333333333), $MachinePrecision] * N[(x * x), $MachinePrecision]), $MachinePrecision] * x + x), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;-2 \cdot x \leq -10000000 \lor \neg \left(-2 \cdot x \leq 10^{-7}\right):\\
\;\;\;\;\frac{2}{1 + e^{-2 \cdot x}} - 1\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(0.13333333333333333, x \cdot x, -0.3333333333333333\right) \cdot \left(x \cdot x\right), x, x\right)\\
\end{array}
\end{array}
if (*.f64 #s(literal -2 binary64) x) < -1e7 or 9.9999999999999995e-8 < (*.f64 #s(literal -2 binary64) x) Initial program 100.0%
if -1e7 < (*.f64 #s(literal -2 binary64) x) < 9.9999999999999995e-8Initial program 6.8%
Applied rewrites6.7%
Taylor expanded in x around 0
+-commutativeN/A
distribute-lft-inN/A
associate-*r*N/A
unpow2N/A
cube-multN/A
*-rgt-identityN/A
lower-fma.f64N/A
lower-pow.f64N/A
sub-negN/A
metadata-evalN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64100.0
Applied rewrites100.0%
Applied rewrites100.0%
Final simplification100.0%
(FPCore (x) :precision binary64 (if (<= (exp (* -2.0 x)) 2.0) (fma (* (fma 0.13333333333333333 (* x x) -0.3333333333333333) (* x x)) x x) (- (/ 2.0 (* (* (fma -1.3333333333333333 x 2.0) x) x)) 1.0)))
double code(double x) {
double tmp;
if (exp((-2.0 * x)) <= 2.0) {
tmp = fma((fma(0.13333333333333333, (x * x), -0.3333333333333333) * (x * x)), x, x);
} else {
tmp = (2.0 / ((fma(-1.3333333333333333, x, 2.0) * x) * x)) - 1.0;
}
return tmp;
}
function code(x) tmp = 0.0 if (exp(Float64(-2.0 * x)) <= 2.0) tmp = fma(Float64(fma(0.13333333333333333, Float64(x * x), -0.3333333333333333) * Float64(x * x)), x, x); else tmp = Float64(Float64(2.0 / Float64(Float64(fma(-1.3333333333333333, x, 2.0) * x) * x)) - 1.0); end return tmp end
code[x_] := If[LessEqual[N[Exp[N[(-2.0 * x), $MachinePrecision]], $MachinePrecision], 2.0], N[(N[(N[(0.13333333333333333 * N[(x * x), $MachinePrecision] + -0.3333333333333333), $MachinePrecision] * N[(x * x), $MachinePrecision]), $MachinePrecision] * x + x), $MachinePrecision], N[(N[(2.0 / N[(N[(N[(-1.3333333333333333 * x + 2.0), $MachinePrecision] * x), $MachinePrecision] * x), $MachinePrecision]), $MachinePrecision] - 1.0), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;e^{-2 \cdot x} \leq 2:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(0.13333333333333333, x \cdot x, -0.3333333333333333\right) \cdot \left(x \cdot x\right), x, x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{2}{\left(\mathsf{fma}\left(-1.3333333333333333, x, 2\right) \cdot x\right) \cdot x} - 1\\
\end{array}
\end{array}
if (exp.f64 (*.f64 #s(literal -2 binary64) x)) < 2Initial program 40.0%
Applied rewrites40.0%
Taylor expanded in x around 0
+-commutativeN/A
distribute-lft-inN/A
associate-*r*N/A
unpow2N/A
cube-multN/A
*-rgt-identityN/A
lower-fma.f64N/A
lower-pow.f64N/A
sub-negN/A
metadata-evalN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f6465.8
Applied rewrites65.8%
Applied rewrites65.8%
if 2 < (exp.f64 (*.f64 #s(literal -2 binary64) x)) Initial program 100.0%
Taylor expanded in x around 0
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
sub-negN/A
metadata-evalN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f6499.5
Applied rewrites99.5%
Taylor expanded in x around inf
Applied rewrites99.5%
(FPCore (x) :precision binary64 (if (<= (exp (* -2.0 x)) 2.0) (fma (* (fma 0.13333333333333333 (* x x) -0.3333333333333333) (* x x)) x x) (- (/ 2.0 (* (* (* -1.3333333333333333 x) x) x)) 1.0)))
double code(double x) {
double tmp;
if (exp((-2.0 * x)) <= 2.0) {
tmp = fma((fma(0.13333333333333333, (x * x), -0.3333333333333333) * (x * x)), x, x);
} else {
tmp = (2.0 / (((-1.3333333333333333 * x) * x) * x)) - 1.0;
}
return tmp;
}
function code(x) tmp = 0.0 if (exp(Float64(-2.0 * x)) <= 2.0) tmp = fma(Float64(fma(0.13333333333333333, Float64(x * x), -0.3333333333333333) * Float64(x * x)), x, x); else tmp = Float64(Float64(2.0 / Float64(Float64(Float64(-1.3333333333333333 * x) * x) * x)) - 1.0); end return tmp end
code[x_] := If[LessEqual[N[Exp[N[(-2.0 * x), $MachinePrecision]], $MachinePrecision], 2.0], N[(N[(N[(0.13333333333333333 * N[(x * x), $MachinePrecision] + -0.3333333333333333), $MachinePrecision] * N[(x * x), $MachinePrecision]), $MachinePrecision] * x + x), $MachinePrecision], N[(N[(2.0 / N[(N[(N[(-1.3333333333333333 * x), $MachinePrecision] * x), $MachinePrecision] * x), $MachinePrecision]), $MachinePrecision] - 1.0), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;e^{-2 \cdot x} \leq 2:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(0.13333333333333333, x \cdot x, -0.3333333333333333\right) \cdot \left(x \cdot x\right), x, x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{2}{\left(\left(-1.3333333333333333 \cdot x\right) \cdot x\right) \cdot x} - 1\\
\end{array}
\end{array}
if (exp.f64 (*.f64 #s(literal -2 binary64) x)) < 2Initial program 40.0%
Applied rewrites40.0%
Taylor expanded in x around 0
+-commutativeN/A
distribute-lft-inN/A
associate-*r*N/A
unpow2N/A
cube-multN/A
*-rgt-identityN/A
lower-fma.f64N/A
lower-pow.f64N/A
sub-negN/A
metadata-evalN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f6465.8
Applied rewrites65.8%
Applied rewrites65.8%
if 2 < (exp.f64 (*.f64 #s(literal -2 binary64) x)) Initial program 100.0%
Taylor expanded in x around 0
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
sub-negN/A
metadata-evalN/A
*-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f6499.5
Applied rewrites99.5%
Taylor expanded in x around inf
Applied rewrites99.5%
Taylor expanded in x around inf
Applied rewrites99.5%
(FPCore (x) :precision binary64 (if (<= (exp (* -2.0 x)) 2.0) (fma (* (fma 0.13333333333333333 (* x x) -0.3333333333333333) (* x x)) x x) (- (/ 2.0 (fma (fma 2.0 x -2.0) x 2.0)) 1.0)))
double code(double x) {
double tmp;
if (exp((-2.0 * x)) <= 2.0) {
tmp = fma((fma(0.13333333333333333, (x * x), -0.3333333333333333) * (x * x)), x, x);
} else {
tmp = (2.0 / fma(fma(2.0, x, -2.0), x, 2.0)) - 1.0;
}
return tmp;
}
function code(x) tmp = 0.0 if (exp(Float64(-2.0 * x)) <= 2.0) tmp = fma(Float64(fma(0.13333333333333333, Float64(x * x), -0.3333333333333333) * Float64(x * x)), x, x); else tmp = Float64(Float64(2.0 / fma(fma(2.0, x, -2.0), x, 2.0)) - 1.0); end return tmp end
code[x_] := If[LessEqual[N[Exp[N[(-2.0 * x), $MachinePrecision]], $MachinePrecision], 2.0], N[(N[(N[(0.13333333333333333 * N[(x * x), $MachinePrecision] + -0.3333333333333333), $MachinePrecision] * N[(x * x), $MachinePrecision]), $MachinePrecision] * x + x), $MachinePrecision], N[(N[(2.0 / N[(N[(2.0 * x + -2.0), $MachinePrecision] * x + 2.0), $MachinePrecision]), $MachinePrecision] - 1.0), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;e^{-2 \cdot x} \leq 2:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(0.13333333333333333, x \cdot x, -0.3333333333333333\right) \cdot \left(x \cdot x\right), x, x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{2}{\mathsf{fma}\left(\mathsf{fma}\left(2, x, -2\right), x, 2\right)} - 1\\
\end{array}
\end{array}
if (exp.f64 (*.f64 #s(literal -2 binary64) x)) < 2Initial program 40.0%
Applied rewrites40.0%
Taylor expanded in x around 0
+-commutativeN/A
distribute-lft-inN/A
associate-*r*N/A
unpow2N/A
cube-multN/A
*-rgt-identityN/A
lower-fma.f64N/A
lower-pow.f64N/A
sub-negN/A
metadata-evalN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f6465.8
Applied rewrites65.8%
Applied rewrites65.8%
if 2 < (exp.f64 (*.f64 #s(literal -2 binary64) x)) Initial program 100.0%
Taylor expanded in x around 0
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
sub-negN/A
metadata-evalN/A
lower-fma.f6498.8
Applied rewrites98.8%
(FPCore (x) :precision binary64 (if (<= (* -2.0 x) 0.2) (- (+ 1.0 x) 1.0) (- (/ 2.0 (* -2.0 x)) 1.0)))
double code(double x) {
double tmp;
if ((-2.0 * x) <= 0.2) {
tmp = (1.0 + x) - 1.0;
} else {
tmp = (2.0 / (-2.0 * x)) - 1.0;
}
return tmp;
}
real(8) function code(x)
real(8), intent (in) :: x
real(8) :: tmp
if (((-2.0d0) * x) <= 0.2d0) then
tmp = (1.0d0 + x) - 1.0d0
else
tmp = (2.0d0 / ((-2.0d0) * x)) - 1.0d0
end if
code = tmp
end function
public static double code(double x) {
double tmp;
if ((-2.0 * x) <= 0.2) {
tmp = (1.0 + x) - 1.0;
} else {
tmp = (2.0 / (-2.0 * x)) - 1.0;
}
return tmp;
}
def code(x): tmp = 0 if (-2.0 * x) <= 0.2: tmp = (1.0 + x) - 1.0 else: tmp = (2.0 / (-2.0 * x)) - 1.0 return tmp
function code(x) tmp = 0.0 if (Float64(-2.0 * x) <= 0.2) tmp = Float64(Float64(1.0 + x) - 1.0); else tmp = Float64(Float64(2.0 / Float64(-2.0 * x)) - 1.0); end return tmp end
function tmp_2 = code(x) tmp = 0.0; if ((-2.0 * x) <= 0.2) tmp = (1.0 + x) - 1.0; else tmp = (2.0 / (-2.0 * x)) - 1.0; end tmp_2 = tmp; end
code[x_] := If[LessEqual[N[(-2.0 * x), $MachinePrecision], 0.2], N[(N[(1.0 + x), $MachinePrecision] - 1.0), $MachinePrecision], N[(N[(2.0 / N[(-2.0 * x), $MachinePrecision]), $MachinePrecision] - 1.0), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;-2 \cdot x \leq 0.2:\\
\;\;\;\;\left(1 + x\right) - 1\\
\mathbf{else}:\\
\;\;\;\;\frac{2}{-2 \cdot x} - 1\\
\end{array}
\end{array}
if (*.f64 #s(literal -2 binary64) x) < 0.20000000000000001Initial program 40.0%
Taylor expanded in x around 0
lower-+.f646.4
Applied rewrites6.4%
if 0.20000000000000001 < (*.f64 #s(literal -2 binary64) x) Initial program 100.0%
Taylor expanded in x around 0
+-commutativeN/A
lower-fma.f6498.0
Applied rewrites98.0%
Taylor expanded in x around inf
Applied rewrites98.0%
(FPCore (x) :precision binary64 (- (/ 2.0 (fma (fma 2.0 x -2.0) x 2.0)) 1.0))
double code(double x) {
return (2.0 / fma(fma(2.0, x, -2.0), x, 2.0)) - 1.0;
}
function code(x) return Float64(Float64(2.0 / fma(fma(2.0, x, -2.0), x, 2.0)) - 1.0) end
code[x_] := N[(N[(2.0 / N[(N[(2.0 * x + -2.0), $MachinePrecision] * x + 2.0), $MachinePrecision]), $MachinePrecision] - 1.0), $MachinePrecision]
\begin{array}{l}
\\
\frac{2}{\mathsf{fma}\left(\mathsf{fma}\left(2, x, -2\right), x, 2\right)} - 1
\end{array}
Initial program 53.4%
Taylor expanded in x around 0
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
sub-negN/A
metadata-evalN/A
lower-fma.f6425.9
Applied rewrites25.9%
(FPCore (x) :precision binary64 (- (/ 2.0 (fma -2.0 x 2.0)) 1.0))
double code(double x) {
return (2.0 / fma(-2.0, x, 2.0)) - 1.0;
}
function code(x) return Float64(Float64(2.0 / fma(-2.0, x, 2.0)) - 1.0) end
code[x_] := N[(N[(2.0 / N[(-2.0 * x + 2.0), $MachinePrecision]), $MachinePrecision] - 1.0), $MachinePrecision]
\begin{array}{l}
\\
\frac{2}{\mathsf{fma}\left(-2, x, 2\right)} - 1
\end{array}
Initial program 53.4%
Taylor expanded in x around 0
+-commutativeN/A
lower-fma.f6425.7
Applied rewrites25.7%
(FPCore (x) :precision binary64 (- (+ 1.0 x) 1.0))
double code(double x) {
return (1.0 + x) - 1.0;
}
real(8) function code(x)
real(8), intent (in) :: x
code = (1.0d0 + x) - 1.0d0
end function
public static double code(double x) {
return (1.0 + x) - 1.0;
}
def code(x): return (1.0 + x) - 1.0
function code(x) return Float64(Float64(1.0 + x) - 1.0) end
function tmp = code(x) tmp = (1.0 + x) - 1.0; end
code[x_] := N[(N[(1.0 + x), $MachinePrecision] - 1.0), $MachinePrecision]
\begin{array}{l}
\\
\left(1 + x\right) - 1
\end{array}
Initial program 53.4%
Taylor expanded in x around 0
lower-+.f646.1
Applied rewrites6.1%
(FPCore (x) :precision binary64 (- 1.0 1.0))
double code(double x) {
return 1.0 - 1.0;
}
real(8) function code(x)
real(8), intent (in) :: x
code = 1.0d0 - 1.0d0
end function
public static double code(double x) {
return 1.0 - 1.0;
}
def code(x): return 1.0 - 1.0
function code(x) return Float64(1.0 - 1.0) end
function tmp = code(x) tmp = 1.0 - 1.0; end
code[x_] := N[(1.0 - 1.0), $MachinePrecision]
\begin{array}{l}
\\
1 - 1
\end{array}
Initial program 53.4%
Taylor expanded in x around 0
Applied rewrites4.3%
herbie shell --seed 2024327
(FPCore (x)
:name "Logistic function from Lakshay Garg"
:precision binary64
(- (/ 2.0 (+ 1.0 (exp (* -2.0 x)))) 1.0))