| Alternative 1 | |
|---|---|
| Accuracy | 98.3% |
| Cost | 1092 |
\[\begin{array}{l}
\mathbf{if}\;x \leq -1.6:\\
\;\;\;\;-1\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \left(x \cdot \left(x \cdot 0.3333333333333333\right) + 2\right)}{2 + x \cdot x}\\
\end{array}
\]
(FPCore (x) :precision binary64 (/ (- (exp x) (exp (- x))) (+ (exp x) (exp (- x)))))
(FPCore (x)
:precision binary64
(if (<= x -1.25)
-1.0
(+
(* -0.3333333333333333 (pow x 3.0))
(+ x (* 0.13333333333333333 (pow x 5.0))))))double code(double x) {
return (exp(x) - exp(-x)) / (exp(x) + exp(-x));
}
double code(double x) {
double tmp;
if (x <= -1.25) {
tmp = -1.0;
} else {
tmp = (-0.3333333333333333 * pow(x, 3.0)) + (x + (0.13333333333333333 * pow(x, 5.0)));
}
return tmp;
}
real(8) function code(x)
real(8), intent (in) :: x
code = (exp(x) - exp(-x)) / (exp(x) + exp(-x))
end function
real(8) function code(x)
real(8), intent (in) :: x
real(8) :: tmp
if (x <= (-1.25d0)) then
tmp = -1.0d0
else
tmp = ((-0.3333333333333333d0) * (x ** 3.0d0)) + (x + (0.13333333333333333d0 * (x ** 5.0d0)))
end if
code = tmp
end function
public static double code(double x) {
return (Math.exp(x) - Math.exp(-x)) / (Math.exp(x) + Math.exp(-x));
}
public static double code(double x) {
double tmp;
if (x <= -1.25) {
tmp = -1.0;
} else {
tmp = (-0.3333333333333333 * Math.pow(x, 3.0)) + (x + (0.13333333333333333 * Math.pow(x, 5.0)));
}
return tmp;
}
def code(x): return (math.exp(x) - math.exp(-x)) / (math.exp(x) + math.exp(-x))
def code(x): tmp = 0 if x <= -1.25: tmp = -1.0 else: tmp = (-0.3333333333333333 * math.pow(x, 3.0)) + (x + (0.13333333333333333 * math.pow(x, 5.0))) return tmp
function code(x) return Float64(Float64(exp(x) - exp(Float64(-x))) / Float64(exp(x) + exp(Float64(-x)))) end
function code(x) tmp = 0.0 if (x <= -1.25) tmp = -1.0; else tmp = Float64(Float64(-0.3333333333333333 * (x ^ 3.0)) + Float64(x + Float64(0.13333333333333333 * (x ^ 5.0)))); end return tmp end
function tmp = code(x) tmp = (exp(x) - exp(-x)) / (exp(x) + exp(-x)); end
function tmp_2 = code(x) tmp = 0.0; if (x <= -1.25) tmp = -1.0; else tmp = (-0.3333333333333333 * (x ^ 3.0)) + (x + (0.13333333333333333 * (x ^ 5.0))); end tmp_2 = tmp; end
code[x_] := N[(N[(N[Exp[x], $MachinePrecision] - N[Exp[(-x)], $MachinePrecision]), $MachinePrecision] / N[(N[Exp[x], $MachinePrecision] + N[Exp[(-x)], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[x_] := If[LessEqual[x, -1.25], -1.0, N[(N[(-0.3333333333333333 * N[Power[x, 3.0], $MachinePrecision]), $MachinePrecision] + N[(x + N[(0.13333333333333333 * N[Power[x, 5.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}
\begin{array}{l}
\mathbf{if}\;x \leq -1.25:\\
\;\;\;\;-1\\
\mathbf{else}:\\
\;\;\;\;-0.3333333333333333 \cdot {x}^{3} + \left(x + 0.13333333333333333 \cdot {x}^{5}\right)\\
\end{array}
Results
if x < -1.25Initial program 30.7%
Taylor expanded in x around 0 3.8%
Simplified3.8%
[Start]3.8 | \[ \frac{e^{x} - e^{-x}}{2 + {x}^{2}}
\] |
|---|---|
unpow2 [=>]3.8 | \[ \frac{e^{x} - e^{-x}}{2 + \color{blue}{x \cdot x}}
\] |
Applied egg-rr92.3%
[Start]3.8 | \[ \frac{e^{x} - e^{-x}}{2 + x \cdot x}
\] |
|---|
if -1.25 < x Initial program 9.0%
Taylor expanded in x around 0 98.5%
Final simplification98.4%
| Alternative 1 | |
|---|---|
| Accuracy | 98.3% |
| Cost | 1092 |
| Alternative 2 | |
|---|---|
| Accuracy | 97.8% |
| Cost | 708 |
| Alternative 3 | |
|---|---|
| Accuracy | 7.6% |
| Cost | 196 |
| Alternative 4 | |
|---|---|
| Accuracy | 97.7% |
| Cost | 196 |
| Alternative 5 | |
|---|---|
| Accuracy | 4.9% |
| Cost | 64 |
herbie shell --seed 2023135
(FPCore (x)
:name "Hyperbolic tangent"
:precision binary64
(/ (- (exp x) (exp (- x))) (+ (exp x) (exp (- x)))))