| Alternative 1 | |
|---|---|
| Accuracy | 90.7% |
| Cost | 8008 |

(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 (* (* z 9.0) t)))
(if (<= t_1 4e-101)
(+ (* 0.5 (/ (* -9.0 (* z t)) a)) (* x (* y (/ 0.5 a))))
(if (<= t_1 1e+292)
(/ 1.0 (/ a (* 0.5 (fma x y (* z (* t -9.0))))))
(* -4.5 (* t (/ z a)))))))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 = (z * 9.0) * t;
double tmp;
if (t_1 <= 4e-101) {
tmp = (0.5 * ((-9.0 * (z * t)) / a)) + (x * (y * (0.5 / a)));
} else if (t_1 <= 1e+292) {
tmp = 1.0 / (a / (0.5 * fma(x, y, (z * (t * -9.0)))));
} else {
tmp = -4.5 * (t * (z / a));
}
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(z * 9.0) * t) tmp = 0.0 if (t_1 <= 4e-101) tmp = Float64(Float64(0.5 * Float64(Float64(-9.0 * Float64(z * t)) / a)) + Float64(x * Float64(y * Float64(0.5 / a)))); elseif (t_1 <= 1e+292) tmp = Float64(1.0 / Float64(a / Float64(0.5 * fma(x, y, Float64(z * Float64(t * -9.0)))))); else tmp = Float64(-4.5 * Float64(t * Float64(z / a))); end return 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[(z * 9.0), $MachinePrecision] * t), $MachinePrecision]}, If[LessEqual[t$95$1, 4e-101], N[(N[(0.5 * N[(N[(-9.0 * N[(z * t), $MachinePrecision]), $MachinePrecision] / a), $MachinePrecision]), $MachinePrecision] + N[(x * N[(y * N[(0.5 / a), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 1e+292], N[(1.0 / N[(a / N[(0.5 * N[(x * y + N[(z * N[(t * -9.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(-4.5 * N[(t * N[(z / a), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\frac{x \cdot y - \left(z \cdot 9\right) \cdot t}{a \cdot 2}
\begin{array}{l}
t_1 := \left(z \cdot 9\right) \cdot t\\
\mathbf{if}\;t_1 \leq 4 \cdot 10^{-101}:\\
\;\;\;\;0.5 \cdot \frac{-9 \cdot \left(z \cdot t\right)}{a} + x \cdot \left(y \cdot \frac{0.5}{a}\right)\\
\mathbf{elif}\;t_1 \leq 10^{+292}:\\
\;\;\;\;\frac{1}{\frac{a}{0.5 \cdot \mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right)}}\\
\mathbf{else}:\\
\;\;\;\;-4.5 \cdot \left(t \cdot \frac{z}{a}\right)\\
\end{array}
Herbie found 11 alternatives:
| Alternative | Accuracy | Speedup |
|---|
| Original | 91.4% |
|---|---|
| Target | 93.6% |
| Herbie | 90.7% |
if (*.f64 (*.f64 z 9) t) < 4.00000000000000021e-101Initial program 93.1%
Simplified93.6%
[Start]93.1% | \[ \frac{x \cdot y - \left(z \cdot 9\right) \cdot t}{a \cdot 2}
\] |
|---|---|
sub-neg [=>]93.1% | \[ \frac{\color{blue}{x \cdot y + \left(-\left(z \cdot 9\right) \cdot t\right)}}{a \cdot 2}
\] |
+-commutative [=>]93.1% | \[ \frac{\color{blue}{\left(-\left(z \cdot 9\right) \cdot t\right) + x \cdot y}}{a \cdot 2}
\] |
neg-sub0 [=>]93.1% | \[ \frac{\color{blue}{\left(0 - \left(z \cdot 9\right) \cdot t\right)} + x \cdot y}{a \cdot 2}
\] |
associate-+l- [=>]93.1% | \[ \frac{\color{blue}{0 - \left(\left(z \cdot 9\right) \cdot t - x \cdot y\right)}}{a \cdot 2}
\] |
sub0-neg [=>]93.1% | \[ \frac{\color{blue}{-\left(\left(z \cdot 9\right) \cdot t - x \cdot y\right)}}{a \cdot 2}
\] |
neg-mul-1 [=>]93.1% | \[ \frac{\color{blue}{-1 \cdot \left(\left(z \cdot 9\right) \cdot t - x \cdot y\right)}}{a \cdot 2}
\] |
associate-/l* [=>]93.0% | \[ \color{blue}{\frac{-1}{\frac{a \cdot 2}{\left(z \cdot 9\right) \cdot t - x \cdot y}}}
\] |
associate-/r/ [=>]93.0% | \[ \color{blue}{\frac{-1}{a \cdot 2} \cdot \left(\left(z \cdot 9\right) \cdot t - x \cdot y\right)}
\] |
*-commutative [=>]93.0% | \[ \color{blue}{\left(\left(z \cdot 9\right) \cdot t - x \cdot y\right) \cdot \frac{-1}{a \cdot 2}}
\] |
sub-neg [=>]93.0% | \[ \color{blue}{\left(\left(z \cdot 9\right) \cdot t + \left(-x \cdot y\right)\right)} \cdot \frac{-1}{a \cdot 2}
\] |
+-commutative [=>]93.0% | \[ \color{blue}{\left(\left(-x \cdot y\right) + \left(z \cdot 9\right) \cdot t\right)} \cdot \frac{-1}{a \cdot 2}
\] |
neg-sub0 [=>]93.0% | \[ \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- [=>]93.0% | \[ \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 [=>]93.0% | \[ \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 [=>]93.0% | \[ \color{blue}{-\left(x \cdot y - \left(z \cdot 9\right) \cdot t\right) \cdot \frac{-1}{a \cdot 2}}
\] |
distribute-rgt-neg-in [=>]93.0% | \[ \color{blue}{\left(x \cdot y - \left(z \cdot 9\right) \cdot t\right) \cdot \left(-\frac{-1}{a \cdot 2}\right)}
\] |
Applied egg-rr93.6%
[Start]93.6% | \[ \mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right) \cdot \frac{0.5}{a}
\] |
|---|---|
associate-*r/ [=>]93.7% | \[ \color{blue}{\frac{\mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right) \cdot 0.5}{a}}
\] |
clear-num [=>]93.6% | \[ \color{blue}{\frac{1}{\frac{a}{\mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right) \cdot 0.5}}}
\] |
*-commutative [=>]93.6% | \[ \frac{1}{\frac{a}{\color{blue}{0.5 \cdot \mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right)}}}
\] |
Applied egg-rr94.1%
[Start]93.6% | \[ \frac{1}{\frac{a}{0.5 \cdot \mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right)}}
\] |
|---|---|
clear-num [<=]93.7% | \[ \color{blue}{\frac{0.5 \cdot \mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right)}{a}}
\] |
*-commutative [=>]93.7% | \[ \frac{\color{blue}{\mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right) \cdot 0.5}}{a}
\] |
associate-*r/ [<=]93.6% | \[ \color{blue}{\mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right) \cdot \frac{0.5}{a}}
\] |
*-commutative [=>]93.6% | \[ \color{blue}{\frac{0.5}{a} \cdot \mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right)}
\] |
fma-udef [=>]93.0% | \[ \frac{0.5}{a} \cdot \color{blue}{\left(x \cdot y + z \cdot \left(t \cdot -9\right)\right)}
\] |
distribute-lft-out [<=]93.0% | \[ \color{blue}{\frac{0.5}{a} \cdot \left(x \cdot y\right) + \frac{0.5}{a} \cdot \left(z \cdot \left(t \cdot -9\right)\right)}
\] |
*-commutative [=>]93.0% | \[ \color{blue}{\left(x \cdot y\right) \cdot \frac{0.5}{a}} + \frac{0.5}{a} \cdot \left(z \cdot \left(t \cdot -9\right)\right)
\] |
associate-*l* [=>]94.0% | \[ \color{blue}{x \cdot \left(y \cdot \frac{0.5}{a}\right)} + \frac{0.5}{a} \cdot \left(z \cdot \left(t \cdot -9\right)\right)
\] |
associate-*l/ [=>]94.1% | \[ x \cdot \left(y \cdot \frac{0.5}{a}\right) + \color{blue}{\frac{0.5 \cdot \left(z \cdot \left(t \cdot -9\right)\right)}{a}}
\] |
*-un-lft-identity [=>]94.1% | \[ x \cdot \left(y \cdot \frac{0.5}{a}\right) + \frac{0.5 \cdot \left(z \cdot \left(t \cdot -9\right)\right)}{\color{blue}{1 \cdot a}}
\] |
times-frac [=>]94.1% | \[ x \cdot \left(y \cdot \frac{0.5}{a}\right) + \color{blue}{\frac{0.5}{1} \cdot \frac{z \cdot \left(t \cdot -9\right)}{a}}
\] |
metadata-eval [=>]94.1% | \[ x \cdot \left(y \cdot \frac{0.5}{a}\right) + \color{blue}{0.5} \cdot \frac{z \cdot \left(t \cdot -9\right)}{a}
\] |
*-commutative [=>]94.1% | \[ x \cdot \left(y \cdot \frac{0.5}{a}\right) + 0.5 \cdot \frac{\color{blue}{\left(t \cdot -9\right) \cdot z}}{a}
\] |
*-commutative [=>]94.1% | \[ x \cdot \left(y \cdot \frac{0.5}{a}\right) + 0.5 \cdot \frac{\color{blue}{\left(-9 \cdot t\right)} \cdot z}{a}
\] |
associate-*l* [=>]94.1% | \[ x \cdot \left(y \cdot \frac{0.5}{a}\right) + 0.5 \cdot \frac{\color{blue}{-9 \cdot \left(t \cdot z\right)}}{a}
\] |
if 4.00000000000000021e-101 < (*.f64 (*.f64 z 9) t) < 1e292Initial program 96.9%
Simplified98.1%
[Start]96.9% | \[ \frac{x \cdot y - \left(z \cdot 9\right) \cdot t}{a \cdot 2}
\] |
|---|---|
sub-neg [=>]96.9% | \[ \frac{\color{blue}{x \cdot y + \left(-\left(z \cdot 9\right) \cdot t\right)}}{a \cdot 2}
\] |
+-commutative [=>]96.9% | \[ \frac{\color{blue}{\left(-\left(z \cdot 9\right) \cdot t\right) + x \cdot y}}{a \cdot 2}
\] |
neg-sub0 [=>]96.9% | \[ \frac{\color{blue}{\left(0 - \left(z \cdot 9\right) \cdot t\right)} + x \cdot y}{a \cdot 2}
\] |
associate-+l- [=>]96.9% | \[ \frac{\color{blue}{0 - \left(\left(z \cdot 9\right) \cdot t - x \cdot y\right)}}{a \cdot 2}
\] |
sub0-neg [=>]96.9% | \[ \frac{\color{blue}{-\left(\left(z \cdot 9\right) \cdot t - x \cdot y\right)}}{a \cdot 2}
\] |
neg-mul-1 [=>]96.9% | \[ \frac{\color{blue}{-1 \cdot \left(\left(z \cdot 9\right) \cdot t - x \cdot y\right)}}{a \cdot 2}
\] |
associate-/l* [=>]96.9% | \[ \color{blue}{\frac{-1}{\frac{a \cdot 2}{\left(z \cdot 9\right) \cdot t - x \cdot y}}}
\] |
associate-/r/ [=>]96.7% | \[ \color{blue}{\frac{-1}{a \cdot 2} \cdot \left(\left(z \cdot 9\right) \cdot t - x \cdot y\right)}
\] |
*-commutative [=>]96.7% | \[ \color{blue}{\left(\left(z \cdot 9\right) \cdot t - x \cdot y\right) \cdot \frac{-1}{a \cdot 2}}
\] |
sub-neg [=>]96.7% | \[ \color{blue}{\left(\left(z \cdot 9\right) \cdot t + \left(-x \cdot y\right)\right)} \cdot \frac{-1}{a \cdot 2}
\] |
+-commutative [=>]96.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 [=>]96.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- [=>]96.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 [=>]96.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 [=>]96.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 [=>]96.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-rr98.3%
[Start]98.1% | \[ \mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right) \cdot \frac{0.5}{a}
\] |
|---|---|
associate-*r/ [=>]98.2% | \[ \color{blue}{\frac{\mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right) \cdot 0.5}{a}}
\] |
clear-num [=>]98.3% | \[ \color{blue}{\frac{1}{\frac{a}{\mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right) \cdot 0.5}}}
\] |
*-commutative [=>]98.3% | \[ \frac{1}{\frac{a}{\color{blue}{0.5 \cdot \mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right)}}}
\] |
if 1e292 < (*.f64 (*.f64 z 9) t) Initial program 50.6%
Simplified50.6%
[Start]50.6% | \[ \frac{x \cdot y - \left(z \cdot 9\right) \cdot t}{a \cdot 2}
\] |
|---|---|
sub-neg [=>]50.6% | \[ \frac{\color{blue}{x \cdot y + \left(-\left(z \cdot 9\right) \cdot t\right)}}{a \cdot 2}
\] |
+-commutative [=>]50.6% | \[ \frac{\color{blue}{\left(-\left(z \cdot 9\right) \cdot t\right) + x \cdot y}}{a \cdot 2}
\] |
neg-sub0 [=>]50.6% | \[ \frac{\color{blue}{\left(0 - \left(z \cdot 9\right) \cdot t\right)} + x \cdot y}{a \cdot 2}
\] |
associate-+l- [=>]50.6% | \[ \frac{\color{blue}{0 - \left(\left(z \cdot 9\right) \cdot t - x \cdot y\right)}}{a \cdot 2}
\] |
sub0-neg [=>]50.6% | \[ \frac{\color{blue}{-\left(\left(z \cdot 9\right) \cdot t - x \cdot y\right)}}{a \cdot 2}
\] |
neg-mul-1 [=>]50.6% | \[ \frac{\color{blue}{-1 \cdot \left(\left(z \cdot 9\right) \cdot t - x \cdot y\right)}}{a \cdot 2}
\] |
associate-/l* [=>]50.6% | \[ \color{blue}{\frac{-1}{\frac{a \cdot 2}{\left(z \cdot 9\right) \cdot t - x \cdot y}}}
\] |
associate-/r/ [=>]50.6% | \[ \color{blue}{\frac{-1}{a \cdot 2} \cdot \left(\left(z \cdot 9\right) \cdot t - x \cdot y\right)}
\] |
*-commutative [=>]50.6% | \[ \color{blue}{\left(\left(z \cdot 9\right) \cdot t - x \cdot y\right) \cdot \frac{-1}{a \cdot 2}}
\] |
sub-neg [=>]50.6% | \[ \color{blue}{\left(\left(z \cdot 9\right) \cdot t + \left(-x \cdot y\right)\right)} \cdot \frac{-1}{a \cdot 2}
\] |
+-commutative [=>]50.6% | \[ \color{blue}{\left(\left(-x \cdot y\right) + \left(z \cdot 9\right) \cdot t\right)} \cdot \frac{-1}{a \cdot 2}
\] |
neg-sub0 [=>]50.6% | \[ \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- [=>]50.6% | \[ \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 [=>]50.6% | \[ \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 [=>]50.6% | \[ \color{blue}{-\left(x \cdot y - \left(z \cdot 9\right) \cdot t\right) \cdot \frac{-1}{a \cdot 2}}
\] |
distribute-rgt-neg-in [=>]50.6% | \[ \color{blue}{\left(x \cdot y - \left(z \cdot 9\right) \cdot t\right) \cdot \left(-\frac{-1}{a \cdot 2}\right)}
\] |
Applied egg-rr50.6%
[Start]50.6% | \[ \mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right) \cdot \frac{0.5}{a}
\] |
|---|---|
associate-*r/ [=>]50.6% | \[ \color{blue}{\frac{\mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right) \cdot 0.5}{a}}
\] |
clear-num [=>]50.6% | \[ \color{blue}{\frac{1}{\frac{a}{\mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right) \cdot 0.5}}}
\] |
*-commutative [=>]50.6% | \[ \frac{1}{\frac{a}{\color{blue}{0.5 \cdot \mathsf{fma}\left(x, y, z \cdot \left(t \cdot -9\right)\right)}}}
\] |
Taylor expanded in x around 0 50.6%
Simplified100.0%
[Start]50.6% | \[ -4.5 \cdot \frac{t \cdot z}{a}
\] |
|---|---|
*-commutative [=>]50.6% | \[ -4.5 \cdot \frac{\color{blue}{z \cdot t}}{a}
\] |
associate-*l/ [<=]100.0% | \[ -4.5 \cdot \color{blue}{\left(\frac{z}{a} \cdot t\right)}
\] |
*-commutative [=>]100.0% | \[ -4.5 \cdot \color{blue}{\left(t \cdot \frac{z}{a}\right)}
\] |
Final simplification95.6%
| Alternative 1 | |
|---|---|
| Accuracy | 90.7% |
| Cost | 8008 |
| Alternative 2 | |
|---|---|
| Accuracy | 90.4% |
| Cost | 7880 |
| Alternative 3 | |
|---|---|
| Accuracy | 90.4% |
| Cost | 1608 |
| Alternative 4 | |
|---|---|
| Accuracy | 93.3% |
| Cost | 1220 |
| Alternative 5 | |
|---|---|
| Accuracy | 66.6% |
| Cost | 713 |
| Alternative 6 | |
|---|---|
| Accuracy | 68.7% |
| Cost | 713 |
| Alternative 7 | |
|---|---|
| Accuracy | 67.6% |
| Cost | 712 |
| Alternative 8 | |
|---|---|
| Accuracy | 67.6% |
| Cost | 712 |
| Alternative 9 | |
|---|---|
| Accuracy | 51.0% |
| Cost | 580 |
| Alternative 10 | |
|---|---|
| Accuracy | 50.9% |
| Cost | 580 |
| Alternative 11 | |
|---|---|
| Accuracy | 51.2% |
| Cost | 448 |
herbie shell --seed 2023272
(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)))