| Alternative 1 | |
|---|---|
| Accuracy | 92.6% |
| Cost | 1613 |
(FPCore (x y z t a) :precision binary64 (/ (- (* x y) (* (* z 9.0) t)) (* a 2.0)))
(FPCore (x y z t a)
:precision binary64
(let* ((t_1 (- (* x (* y (/ 0.5 a))) (* (/ z (/ a 9.0)) (/ t 2.0))))
(t_2 (- (* x y) (* (* z 9.0) t))))
(if (<= t_2 (- INFINITY))
t_1
(if (<= t_2 -2e-175)
(* (/ 0.5 a) (+ (* x y) (* z (* t -9.0))))
(if (or (<= t_2 5e-177) (not (<= t_2 5e+297)))
t_1
(/ t_2 (* a 2.0)))))))double code(double x, double y, double z, double t, double a) {
return ((x * y) - ((z * 9.0) * t)) / (a * 2.0);
}
double code(double x, double y, double z, double t, double a) {
double t_1 = (x * (y * (0.5 / a))) - ((z / (a / 9.0)) * (t / 2.0));
double t_2 = (x * y) - ((z * 9.0) * t);
double tmp;
if (t_2 <= -((double) INFINITY)) {
tmp = t_1;
} else if (t_2 <= -2e-175) {
tmp = (0.5 / a) * ((x * y) + (z * (t * -9.0)));
} else if ((t_2 <= 5e-177) || !(t_2 <= 5e+297)) {
tmp = t_1;
} else {
tmp = t_2 / (a * 2.0);
}
return tmp;
}
public static double code(double x, double y, double z, double t, double a) {
return ((x * y) - ((z * 9.0) * t)) / (a * 2.0);
}
public static double code(double x, double y, double z, double t, double a) {
double t_1 = (x * (y * (0.5 / a))) - ((z / (a / 9.0)) * (t / 2.0));
double t_2 = (x * y) - ((z * 9.0) * t);
double tmp;
if (t_2 <= -Double.POSITIVE_INFINITY) {
tmp = t_1;
} else if (t_2 <= -2e-175) {
tmp = (0.5 / a) * ((x * y) + (z * (t * -9.0)));
} else if ((t_2 <= 5e-177) || !(t_2 <= 5e+297)) {
tmp = t_1;
} else {
tmp = t_2 / (a * 2.0);
}
return tmp;
}
def code(x, y, z, t, a): return ((x * y) - ((z * 9.0) * t)) / (a * 2.0)
def code(x, y, z, t, a): t_1 = (x * (y * (0.5 / a))) - ((z / (a / 9.0)) * (t / 2.0)) t_2 = (x * y) - ((z * 9.0) * t) tmp = 0 if t_2 <= -math.inf: tmp = t_1 elif t_2 <= -2e-175: tmp = (0.5 / a) * ((x * y) + (z * (t * -9.0))) elif (t_2 <= 5e-177) or not (t_2 <= 5e+297): tmp = t_1 else: tmp = t_2 / (a * 2.0) return tmp
function code(x, y, z, t, a) return Float64(Float64(Float64(x * y) - Float64(Float64(z * 9.0) * t)) / Float64(a * 2.0)) end
function code(x, y, z, t, a) t_1 = Float64(Float64(x * Float64(y * Float64(0.5 / a))) - Float64(Float64(z / Float64(a / 9.0)) * Float64(t / 2.0))) t_2 = Float64(Float64(x * y) - Float64(Float64(z * 9.0) * t)) tmp = 0.0 if (t_2 <= Float64(-Inf)) tmp = t_1; elseif (t_2 <= -2e-175) tmp = Float64(Float64(0.5 / a) * Float64(Float64(x * y) + Float64(z * Float64(t * -9.0)))); elseif ((t_2 <= 5e-177) || !(t_2 <= 5e+297)) tmp = t_1; else tmp = Float64(t_2 / Float64(a * 2.0)); end return tmp end
function tmp = code(x, y, z, t, a) tmp = ((x * y) - ((z * 9.0) * t)) / (a * 2.0); end
function tmp_2 = code(x, y, z, t, a) t_1 = (x * (y * (0.5 / a))) - ((z / (a / 9.0)) * (t / 2.0)); t_2 = (x * y) - ((z * 9.0) * t); tmp = 0.0; if (t_2 <= -Inf) tmp = t_1; elseif (t_2 <= -2e-175) tmp = (0.5 / a) * ((x * y) + (z * (t * -9.0))); elseif ((t_2 <= 5e-177) || ~((t_2 <= 5e+297))) tmp = t_1; else tmp = t_2 / (a * 2.0); end tmp_2 = tmp; end
code[x_, y_, z_, t_, a_] := N[(N[(N[(x * y), $MachinePrecision] - N[(N[(z * 9.0), $MachinePrecision] * t), $MachinePrecision]), $MachinePrecision] / N[(a * 2.0), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_, t_, a_] := Block[{t$95$1 = N[(N[(x * N[(y * N[(0.5 / a), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(N[(z / N[(a / 9.0), $MachinePrecision]), $MachinePrecision] * N[(t / 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(x * y), $MachinePrecision] - N[(N[(z * 9.0), $MachinePrecision] * t), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$2, (-Infinity)], t$95$1, If[LessEqual[t$95$2, -2e-175], N[(N[(0.5 / a), $MachinePrecision] * N[(N[(x * y), $MachinePrecision] + N[(z * N[(t * -9.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[Or[LessEqual[t$95$2, 5e-177], N[Not[LessEqual[t$95$2, 5e+297]], $MachinePrecision]], t$95$1, N[(t$95$2 / N[(a * 2.0), $MachinePrecision]), $MachinePrecision]]]]]]
\frac{x \cdot y - \left(z \cdot 9\right) \cdot t}{a \cdot 2}
\begin{array}{l}
t_1 := x \cdot \left(y \cdot \frac{0.5}{a}\right) - \frac{z}{\frac{a}{9}} \cdot \frac{t}{2}\\
t_2 := x \cdot y - \left(z \cdot 9\right) \cdot t\\
\mathbf{if}\;t_2 \leq -\infty:\\
\;\;\;\;t_1\\
\mathbf{elif}\;t_2 \leq -2 \cdot 10^{-175}:\\
\;\;\;\;\frac{0.5}{a} \cdot \left(x \cdot y + z \cdot \left(t \cdot -9\right)\right)\\
\mathbf{elif}\;t_2 \leq 5 \cdot 10^{-177} \lor \neg \left(t_2 \leq 5 \cdot 10^{+297}\right):\\
\;\;\;\;t_1\\
\mathbf{else}:\\
\;\;\;\;\frac{t_2}{a \cdot 2}\\
\end{array}
Results
| Original | 91.1% |
|---|---|
| Target | 93.2% |
| Herbie | 97.4% |
if (-.f64 (*.f64 x y) (*.f64 (*.f64 z 9) t)) < -inf.0 or -2e-175 < (-.f64 (*.f64 x y) (*.f64 (*.f64 z 9) t)) < 5e-177 or 4.9999999999999998e297 < (-.f64 (*.f64 x y) (*.f64 (*.f64 z 9) t)) Initial program 72.1%
Applied egg-rr80.6%
[Start]72.1 | \[ \frac{x \cdot y - \left(z \cdot 9\right) \cdot t}{a \cdot 2}
\] |
|---|---|
div-sub [=>]67.9 | \[ \color{blue}{\frac{x \cdot y}{a \cdot 2} - \frac{\left(z \cdot 9\right) \cdot t}{a \cdot 2}}
\] |
sub-neg [=>]67.9 | \[ \color{blue}{\frac{x \cdot y}{a \cdot 2} + \left(-\frac{\left(z \cdot 9\right) \cdot t}{a \cdot 2}\right)}
\] |
div-inv [=>]67.9 | \[ \color{blue}{\left(x \cdot y\right) \cdot \frac{1}{a \cdot 2}} + \left(-\frac{\left(z \cdot 9\right) \cdot t}{a \cdot 2}\right)
\] |
*-commutative [=>]67.9 | \[ \left(x \cdot y\right) \cdot \frac{1}{\color{blue}{2 \cdot a}} + \left(-\frac{\left(z \cdot 9\right) \cdot t}{a \cdot 2}\right)
\] |
associate-/r* [=>]67.9 | \[ \left(x \cdot y\right) \cdot \color{blue}{\frac{\frac{1}{2}}{a}} + \left(-\frac{\left(z \cdot 9\right) \cdot t}{a \cdot 2}\right)
\] |
metadata-eval [=>]67.9 | \[ \left(x \cdot y\right) \cdot \frac{\color{blue}{0.5}}{a} + \left(-\frac{\left(z \cdot 9\right) \cdot t}{a \cdot 2}\right)
\] |
times-frac [=>]80.6 | \[ \left(x \cdot y\right) \cdot \frac{0.5}{a} + \left(-\color{blue}{\frac{z \cdot 9}{a} \cdot \frac{t}{2}}\right)
\] |
Simplified93.4%
[Start]80.6 | \[ \left(x \cdot y\right) \cdot \frac{0.5}{a} + \left(-\frac{z \cdot 9}{a} \cdot \frac{t}{2}\right)
\] |
|---|---|
sub-neg [<=]80.6 | \[ \color{blue}{\left(x \cdot y\right) \cdot \frac{0.5}{a} - \frac{z \cdot 9}{a} \cdot \frac{t}{2}}
\] |
associate-*l* [=>]93.4 | \[ \color{blue}{x \cdot \left(y \cdot \frac{0.5}{a}\right)} - \frac{z \cdot 9}{a} \cdot \frac{t}{2}
\] |
associate-/l* [=>]93.4 | \[ x \cdot \left(y \cdot \frac{0.5}{a}\right) - \color{blue}{\frac{z}{\frac{a}{9}}} \cdot \frac{t}{2}
\] |
if -inf.0 < (-.f64 (*.f64 x y) (*.f64 (*.f64 z 9) t)) < -2e-175Initial program 99.5%
Simplified99.7%
[Start]99.5 | \[ \frac{x \cdot y - \left(z \cdot 9\right) \cdot t}{a \cdot 2}
\] |
|---|---|
sub-neg [=>]99.5 | \[ \frac{\color{blue}{x \cdot y + \left(-\left(z \cdot 9\right) \cdot t\right)}}{a \cdot 2}
\] |
+-commutative [=>]99.5 | \[ \frac{\color{blue}{\left(-\left(z \cdot 9\right) \cdot t\right) + x \cdot y}}{a \cdot 2}
\] |
neg-sub0 [=>]99.5 | \[ \frac{\color{blue}{\left(0 - \left(z \cdot 9\right) \cdot t\right)} + x \cdot y}{a \cdot 2}
\] |
associate-+l- [=>]99.5 | \[ \frac{\color{blue}{0 - \left(\left(z \cdot 9\right) \cdot t - x \cdot y\right)}}{a \cdot 2}
\] |
sub0-neg [=>]99.5 | \[ \frac{\color{blue}{-\left(\left(z \cdot 9\right) \cdot t - x \cdot y\right)}}{a \cdot 2}
\] |
neg-mul-1 [=>]99.5 | \[ \frac{\color{blue}{-1 \cdot \left(\left(z \cdot 9\right) \cdot t - x \cdot y\right)}}{a \cdot 2}
\] |
associate-/l* [=>]99.2 | \[ \color{blue}{\frac{-1}{\frac{a \cdot 2}{\left(z \cdot 9\right) \cdot t - x \cdot y}}}
\] |
associate-/r/ [=>]99.7 | \[ \color{blue}{\frac{-1}{a \cdot 2} \cdot \left(\left(z \cdot 9\right) \cdot t - x \cdot y\right)}
\] |
*-commutative [=>]99.7 | \[ \color{blue}{\left(\left(z \cdot 9\right) \cdot t - x \cdot y\right) \cdot \frac{-1}{a \cdot 2}}
\] |
sub-neg [=>]99.7 | \[ \color{blue}{\left(\left(z \cdot 9\right) \cdot t + \left(-x \cdot y\right)\right)} \cdot \frac{-1}{a \cdot 2}
\] |
+-commutative [=>]99.7 | \[ \color{blue}{\left(\left(-x \cdot y\right) + \left(z \cdot 9\right) \cdot t\right)} \cdot \frac{-1}{a \cdot 2}
\] |
neg-sub0 [=>]99.7 | \[ \left(\color{blue}{\left(0 - x \cdot y\right)} + \left(z \cdot 9\right) \cdot t\right) \cdot \frac{-1}{a \cdot 2}
\] |
associate-+l- [=>]99.7 | \[ \color{blue}{\left(0 - \left(x \cdot y - \left(z \cdot 9\right) \cdot t\right)\right)} \cdot \frac{-1}{a \cdot 2}
\] |
sub0-neg [=>]99.7 | \[ \color{blue}{\left(-\left(x \cdot y - \left(z \cdot 9\right) \cdot t\right)\right)} \cdot \frac{-1}{a \cdot 2}
\] |
distribute-lft-neg-out [=>]99.7 | \[ \color{blue}{-\left(x \cdot y - \left(z \cdot 9\right) \cdot t\right) \cdot \frac{-1}{a \cdot 2}}
\] |
distribute-rgt-neg-in [=>]99.7 | \[ \color{blue}{\left(x \cdot y - \left(z \cdot 9\right) \cdot t\right) \cdot \left(-\frac{-1}{a \cdot 2}\right)}
\] |
Applied egg-rr99.7%
[Start]99.7 | \[ \mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right) \cdot \frac{0.5}{a}
\] |
|---|---|
fma-udef [=>]99.7 | \[ \color{blue}{\left(x \cdot y + z \cdot \left(t \cdot -9\right)\right)} \cdot \frac{0.5}{a}
\] |
+-commutative [=>]99.7 | \[ \color{blue}{\left(z \cdot \left(t \cdot -9\right) + x \cdot y\right)} \cdot \frac{0.5}{a}
\] |
if 5e-177 < (-.f64 (*.f64 x y) (*.f64 (*.f64 z 9) t)) < 4.9999999999999998e297Initial program 99.6%
Final simplification97.3%
| Alternative 1 | |
|---|---|
| Accuracy | 92.6% |
| Cost | 1613 |
| Alternative 2 | |
|---|---|
| Accuracy | 92.7% |
| Cost | 1612 |
| Alternative 3 | |
|---|---|
| Accuracy | 92.7% |
| Cost | 1612 |
| Alternative 4 | |
|---|---|
| Accuracy | 65.5% |
| Cost | 977 |
| Alternative 5 | |
|---|---|
| Accuracy | 65.4% |
| Cost | 977 |
| Alternative 6 | |
|---|---|
| Accuracy | 64.8% |
| Cost | 976 |
| Alternative 7 | |
|---|---|
| Accuracy | 52.0% |
| Cost | 844 |
| Alternative 8 | |
|---|---|
| Accuracy | 17.8% |
| Cost | 588 |
| Alternative 9 | |
|---|---|
| Accuracy | 51.2% |
| Cost | 580 |
| Alternative 10 | |
|---|---|
| Accuracy | 51.1% |
| Cost | 580 |
| Alternative 11 | |
|---|---|
| Accuracy | 10.8% |
| Cost | 456 |
| Alternative 12 | |
|---|---|
| Accuracy | 7.3% |
| Cost | 64 |
herbie shell --seed 2023160
(FPCore (x y z t a)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, I"
:precision binary64
:herbie-target
(if (< a -2.090464557976709e+86) (- (* 0.5 (/ (* y x) a)) (* 4.5 (/ t (/ a z)))) (if (< a 2.144030707833976e+99) (/ (- (* x y) (* z (* 9.0 t))) (* a 2.0)) (- (* (/ y a) (* x 0.5)) (* (/ t a) (* z 4.5)))))
(/ (- (* x y) (* (* z 9.0) t)) (* a 2.0)))