| Alternative 1 | |
|---|---|
| Accuracy | 92.3% |
| Cost | 2633 |
(FPCore (x y z t a) :precision binary64 (- (+ x y) (/ (* (- z t) y) (- a t))))
(FPCore (x y z t a)
:precision binary64
(let* ((t_1 (+ (+ x y) (/ (* y (- t z)) (- a t)))))
(if (<= t_1 -2e-219)
(- x (- (/ y (/ (- a t) (- z t))) y))
(if (<= t_1 1e-225)
(- x (/ (* y (- a z)) t))
(+ x (fma (- z t) (/ y (- t a)) y))))))double code(double x, double y, double z, double t, double a) {
return (x + y) - (((z - t) * y) / (a - t));
}
double code(double x, double y, double z, double t, double a) {
double t_1 = (x + y) + ((y * (t - z)) / (a - t));
double tmp;
if (t_1 <= -2e-219) {
tmp = x - ((y / ((a - t) / (z - t))) - y);
} else if (t_1 <= 1e-225) {
tmp = x - ((y * (a - z)) / t);
} else {
tmp = x + fma((z - t), (y / (t - a)), y);
}
return tmp;
}
function code(x, y, z, t, a) return Float64(Float64(x + y) - Float64(Float64(Float64(z - t) * y) / Float64(a - t))) end
function code(x, y, z, t, a) t_1 = Float64(Float64(x + y) + Float64(Float64(y * Float64(t - z)) / Float64(a - t))) tmp = 0.0 if (t_1 <= -2e-219) tmp = Float64(x - Float64(Float64(y / Float64(Float64(a - t) / Float64(z - t))) - y)); elseif (t_1 <= 1e-225) tmp = Float64(x - Float64(Float64(y * Float64(a - z)) / t)); else tmp = Float64(x + fma(Float64(z - t), Float64(y / Float64(t - a)), y)); end return tmp end
code[x_, y_, z_, t_, a_] := N[(N[(x + y), $MachinePrecision] - N[(N[(N[(z - t), $MachinePrecision] * y), $MachinePrecision] / N[(a - t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_, t_, a_] := Block[{t$95$1 = N[(N[(x + y), $MachinePrecision] + N[(N[(y * N[(t - z), $MachinePrecision]), $MachinePrecision] / N[(a - t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -2e-219], N[(x - N[(N[(y / N[(N[(a - t), $MachinePrecision] / N[(z - t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - y), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 1e-225], N[(x - N[(N[(y * N[(a - z), $MachinePrecision]), $MachinePrecision] / t), $MachinePrecision]), $MachinePrecision], N[(x + N[(N[(z - t), $MachinePrecision] * N[(y / N[(t - a), $MachinePrecision]), $MachinePrecision] + y), $MachinePrecision]), $MachinePrecision]]]]
\left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}
\begin{array}{l}
t_1 := \left(x + y\right) + \frac{y \cdot \left(t - z\right)}{a - t}\\
\mathbf{if}\;t_1 \leq -2 \cdot 10^{-219}:\\
\;\;\;\;x - \left(\frac{y}{\frac{a - t}{z - t}} - y\right)\\
\mathbf{elif}\;t_1 \leq 10^{-225}:\\
\;\;\;\;x - \frac{y \cdot \left(a - z\right)}{t}\\
\mathbf{else}:\\
\;\;\;\;x + \mathsf{fma}\left(z - t, \frac{y}{t - a}, y\right)\\
\end{array}
| Original | 74.3% |
|---|---|
| Target | 87.1% |
| Herbie | 90.2% |
if (-.f64 (+.f64 x y) (/.f64 (*.f64 (-.f64 z t) y) (-.f64 a t))) < -2.0000000000000001e-219Initial program 79.9%
Simplified92.2%
[Start]79.9 | \[ \left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}
\] |
|---|---|
+-rgt-identity [<=]79.9 | \[ \color{blue}{\left(\left(x + y\right) + 0\right)} - \frac{\left(z - t\right) \cdot y}{a - t}
\] |
associate-+l+ [=>]79.9 | \[ \color{blue}{\left(x + \left(y + 0\right)\right)} - \frac{\left(z - t\right) \cdot y}{a - t}
\] |
associate-+r- [<=]80.0 | \[ \color{blue}{x + \left(\left(y + 0\right) - \frac{\left(z - t\right) \cdot y}{a - t}\right)}
\] |
+-rgt-identity [=>]80.0 | \[ x + \left(\color{blue}{y} - \frac{\left(z - t\right) \cdot y}{a - t}\right)
\] |
*-commutative [=>]80.0 | \[ x + \left(y - \frac{\color{blue}{y \cdot \left(z - t\right)}}{a - t}\right)
\] |
associate-/l* [=>]92.2 | \[ x + \left(y - \color{blue}{\frac{y}{\frac{a - t}{z - t}}}\right)
\] |
if -2.0000000000000001e-219 < (-.f64 (+.f64 x y) (/.f64 (*.f64 (-.f64 z t) y) (-.f64 a t))) < 9.9999999999999996e-226Initial program 17.5%
Simplified53.1%
[Start]17.5 | \[ \left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}
\] |
|---|---|
+-rgt-identity [<=]17.5 | \[ \color{blue}{\left(\left(x + y\right) + 0\right)} - \frac{\left(z - t\right) \cdot y}{a - t}
\] |
associate-+l+ [=>]17.5 | \[ \color{blue}{\left(x + \left(y + 0\right)\right)} - \frac{\left(z - t\right) \cdot y}{a - t}
\] |
associate-+r- [<=]52.2 | \[ \color{blue}{x + \left(\left(y + 0\right) - \frac{\left(z - t\right) \cdot y}{a - t}\right)}
\] |
+-rgt-identity [=>]52.2 | \[ x + \left(\color{blue}{y} - \frac{\left(z - t\right) \cdot y}{a - t}\right)
\] |
*-commutative [=>]52.2 | \[ x + \left(y - \frac{\color{blue}{y \cdot \left(z - t\right)}}{a - t}\right)
\] |
associate-/l* [=>]53.1 | \[ x + \left(y - \color{blue}{\frac{y}{\frac{a - t}{z - t}}}\right)
\] |
Taylor expanded in t around inf 90.9%
Simplified90.9%
[Start]90.9 | \[ x + \frac{-1 \cdot \left(a \cdot y\right) - -1 \cdot \left(y \cdot z\right)}{t}
\] |
|---|---|
*-commutative [<=]90.9 | \[ x + \frac{-1 \cdot \color{blue}{\left(y \cdot a\right)} - -1 \cdot \left(y \cdot z\right)}{t}
\] |
distribute-lft-out-- [=>]90.9 | \[ x + \frac{\color{blue}{-1 \cdot \left(y \cdot a - y \cdot z\right)}}{t}
\] |
distribute-lft-out-- [=>]90.9 | \[ x + \frac{-1 \cdot \color{blue}{\left(y \cdot \left(a - z\right)\right)}}{t}
\] |
associate-*r* [=>]90.9 | \[ x + \frac{\color{blue}{\left(-1 \cdot y\right) \cdot \left(a - z\right)}}{t}
\] |
neg-mul-1 [<=]90.9 | \[ x + \frac{\color{blue}{\left(-y\right)} \cdot \left(a - z\right)}{t}
\] |
Taylor expanded in y around 0 90.9%
Simplified90.9%
[Start]90.9 | \[ x + \frac{-1 \cdot \left(y \cdot \left(a - z\right)\right)}{t}
\] |
|---|---|
mul-1-neg [=>]90.9 | \[ x + \frac{\color{blue}{-y \cdot \left(a - z\right)}}{t}
\] |
distribute-rgt-neg-in [=>]90.9 | \[ x + \frac{\color{blue}{y \cdot \left(-\left(a - z\right)\right)}}{t}
\] |
neg-sub0 [=>]90.9 | \[ x + \frac{y \cdot \color{blue}{\left(0 - \left(a - z\right)\right)}}{t}
\] |
sub-neg [=>]90.9 | \[ x + \frac{y \cdot \left(0 - \color{blue}{\left(a + \left(-z\right)\right)}\right)}{t}
\] |
+-commutative [<=]90.9 | \[ x + \frac{y \cdot \left(0 - \color{blue}{\left(\left(-z\right) + a\right)}\right)}{t}
\] |
associate--r+ [=>]90.9 | \[ x + \frac{y \cdot \color{blue}{\left(\left(0 - \left(-z\right)\right) - a\right)}}{t}
\] |
neg-sub0 [<=]90.9 | \[ x + \frac{y \cdot \left(\color{blue}{\left(-\left(-z\right)\right)} - a\right)}{t}
\] |
remove-double-neg [=>]90.9 | \[ x + \frac{y \cdot \left(\color{blue}{z} - a\right)}{t}
\] |
if 9.9999999999999996e-226 < (-.f64 (+.f64 x y) (/.f64 (*.f64 (-.f64 z t) y) (-.f64 a t))) Initial program 80.2%
Simplified88.1%
[Start]80.2 | \[ \left(x + y\right) - \frac{\left(z - t\right) \cdot y}{a - t}
\] |
|---|---|
associate--l+ [=>]80.4 | \[ \color{blue}{x + \left(y - \frac{\left(z - t\right) \cdot y}{a - t}\right)}
\] |
sub-neg [=>]80.4 | \[ x + \color{blue}{\left(y + \left(-\frac{\left(z - t\right) \cdot y}{a - t}\right)\right)}
\] |
+-commutative [=>]80.4 | \[ x + \color{blue}{\left(\left(-\frac{\left(z - t\right) \cdot y}{a - t}\right) + y\right)}
\] |
distribute-neg-frac [=>]80.4 | \[ x + \left(\color{blue}{\frac{-\left(z - t\right) \cdot y}{a - t}} + y\right)
\] |
distribute-rgt-neg-in [=>]80.4 | \[ x + \left(\frac{\color{blue}{\left(z - t\right) \cdot \left(-y\right)}}{a - t} + y\right)
\] |
associate-*r/ [<=]90.7 | \[ x + \left(\color{blue}{\left(z - t\right) \cdot \frac{-y}{a - t}} + y\right)
\] |
mul-1-neg [<=]90.7 | \[ x + \left(\left(z - t\right) \cdot \frac{\color{blue}{-1 \cdot y}}{a - t} + y\right)
\] |
associate-*r/ [<=]90.7 | \[ x + \left(\left(z - t\right) \cdot \color{blue}{\left(-1 \cdot \frac{y}{a - t}\right)} + y\right)
\] |
fma-def [=>]88.1 | \[ x + \color{blue}{\mathsf{fma}\left(z - t, -1 \cdot \frac{y}{a - t}, y\right)}
\] |
Final simplification90.2%
| Alternative 1 | |
|---|---|
| Accuracy | 92.3% |
| Cost | 2633 |
| Alternative 2 | |
|---|---|
| Accuracy | 90.2% |
| Cost | 2632 |
| Alternative 3 | |
|---|---|
| Accuracy | 73.6% |
| Cost | 1764 |
| Alternative 4 | |
|---|---|
| Accuracy | 79.2% |
| Cost | 841 |
| Alternative 5 | |
|---|---|
| Accuracy | 82.0% |
| Cost | 841 |
| Alternative 6 | |
|---|---|
| Accuracy | 83.1% |
| Cost | 840 |
| Alternative 7 | |
|---|---|
| Accuracy | 77.6% |
| Cost | 713 |
| Alternative 8 | |
|---|---|
| Accuracy | 68.3% |
| Cost | 456 |
| Alternative 9 | |
|---|---|
| Accuracy | 57.9% |
| Cost | 328 |
| Alternative 10 | |
|---|---|
| Accuracy | 2.8% |
| Cost | 64 |
| Alternative 11 | |
|---|---|
| Accuracy | 55.1% |
| Cost | 64 |
herbie shell --seed 2023138
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTick from plot-0.2.3.4, B"
:precision binary64
:herbie-target
(if (< (- (+ x y) (/ (* (- z t) y) (- a t))) -1.3664970889390727e-7) (- (+ y x) (* (* (- z t) (/ 1.0 (- a t))) y)) (if (< (- (+ x y) (/ (* (- z t) y) (- a t))) 1.4754293444577233e-239) (/ (- (* y (- a z)) (* x t)) (- a t)) (- (+ y x) (* (* (- z t) (/ 1.0 (- a t))) y))))
(- (+ x y) (/ (* (- z t) y) (- a t))))