| Alternative 1 | |
|---|---|
| Accuracy | 82.5% |
| Cost | 3532 |
(FPCore (x y z t a) :precision binary64 (+ x (/ (* (- y z) (- t x)) (- a z))))
(FPCore (x y z t a)
:precision binary64
(let* ((t_1 (+ x (/ (* (- y z) (- t x)) (- a z)))) (t_2 (<= t_1 0.0)))
(if t_2
(fma (/ (- y z) (- a z)) (- t x) x)
(if t_2
(+ t (/ (- a y) (- (/ z x))))
(if (<= t_1 2e+300) t_1 (+ t (/ (- a y) (/ z (- t x)))))))))double code(double x, double y, double z, double t, double a) {
return x + (((y - z) * (t - x)) / (a - z));
}
double code(double x, double y, double z, double t, double a) {
double t_1 = x + (((y - z) * (t - x)) / (a - z));
int t_2 = t_1 <= 0.0;
double tmp;
if (t_2) {
tmp = fma(((y - z) / (a - z)), (t - x), x);
} else if (t_2) {
tmp = t + ((a - y) / -(z / x));
} else if (t_1 <= 2e+300) {
tmp = t_1;
} else {
tmp = t + ((a - y) / (z / (t - x)));
}
return tmp;
}
function code(x, y, z, t, a) return Float64(x + Float64(Float64(Float64(y - z) * Float64(t - x)) / Float64(a - z))) end
function code(x, y, z, t, a) t_1 = Float64(x + Float64(Float64(Float64(y - z) * Float64(t - x)) / Float64(a - z))) t_2 = t_1 <= 0.0 tmp = 0.0 if (t_2) tmp = fma(Float64(Float64(y - z) / Float64(a - z)), Float64(t - x), x); elseif (t_2) tmp = Float64(t + Float64(Float64(a - y) / Float64(-Float64(z / x)))); elseif (t_1 <= 2e+300) tmp = t_1; else tmp = Float64(t + Float64(Float64(a - y) / Float64(z / Float64(t - x)))); end return tmp end
code[x_, y_, z_, t_, a_] := N[(x + N[(N[(N[(y - z), $MachinePrecision] * N[(t - x), $MachinePrecision]), $MachinePrecision] / N[(a - z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_, t_, a_] := Block[{t$95$1 = N[(x + N[(N[(N[(y - z), $MachinePrecision] * N[(t - x), $MachinePrecision]), $MachinePrecision] / N[(a - z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = LessEqual[t$95$1, 0.0]}, If[t$95$2, N[(N[(N[(y - z), $MachinePrecision] / N[(a - z), $MachinePrecision]), $MachinePrecision] * N[(t - x), $MachinePrecision] + x), $MachinePrecision], If[t$95$2, N[(t + N[(N[(a - y), $MachinePrecision] / (-N[(z / x), $MachinePrecision])), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 2e+300], t$95$1, N[(t + N[(N[(a - y), $MachinePrecision] / N[(z / N[(t - x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]
x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}
\begin{array}{l}
t_1 := x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}\\
t_2 := t_1 \leq 0\\
\mathbf{if}\;t_2:\\
\;\;\;\;\mathsf{fma}\left(\frac{y - z}{a - z}, t - x, x\right)\\
\mathbf{elif}\;t_2:\\
\;\;\;\;t + \frac{a - y}{-\frac{z}{x}}\\
\mathbf{elif}\;t_1 \leq 2 \cdot 10^{+300}:\\
\;\;\;\;t_1\\
\mathbf{else}:\\
\;\;\;\;t + \frac{a - y}{\frac{z}{t - x}}\\
\end{array}
| Original | 69.2% |
|---|---|
| Target | 84.2% |
| Herbie | 82.5% |
if (+.f64 x (/.f64 (*.f64 (-.f64 y z) (-.f64 t x)) (-.f64 a z))) < 0.0Initial program 64.8%
Simplified82.9%
[Start]64.8 | \[ x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}
\] |
|---|---|
+-commutative [=>]64.8 | \[ \color{blue}{\frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z} + x}
\] |
associate-*l/ [<=]82.8 | \[ \color{blue}{\frac{y - z}{a - z} \cdot \left(t - x\right)} + x
\] |
fma-def [=>]82.9 | \[ \color{blue}{\mathsf{fma}\left(\frac{y - z}{a - z}, t - x, x\right)}
\] |
if 0.0 < (+.f64 x (/.f64 (*.f64 (-.f64 y z) (-.f64 t x)) (-.f64 a z))) < 0.0Initial program 66.2%
Simplified82.9%
[Start]66.2 | \[ x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}
\] |
|---|---|
+-commutative [=>]66.2 | \[ \color{blue}{\frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z} + x}
\] |
associate-*l/ [<=]82.9 | \[ \color{blue}{\frac{y - z}{a - z} \cdot \left(t - x\right)} + x
\] |
fma-def [=>]82.9 | \[ \color{blue}{\mathsf{fma}\left(\frac{y - z}{a - z}, t - x, x\right)}
\] |
Taylor expanded in z around inf 46.0%
Simplified50.4%
[Start]46.0 | \[ \frac{\left(-1 \cdot y - -1 \cdot a\right) \cdot \left(t - x\right)}{z} + t
\] |
|---|---|
+-commutative [=>]46.0 | \[ \color{blue}{t + \frac{\left(-1 \cdot y - -1 \cdot a\right) \cdot \left(t - x\right)}{z}}
\] |
distribute-lft-out-- [=>]46.0 | \[ t + \frac{\color{blue}{\left(-1 \cdot \left(y - a\right)\right)} \cdot \left(t - x\right)}{z}
\] |
associate-*r* [<=]46.0 | \[ t + \frac{\color{blue}{-1 \cdot \left(\left(y - a\right) \cdot \left(t - x\right)\right)}}{z}
\] |
mul-1-neg [=>]46.0 | \[ t + \frac{\color{blue}{-\left(y - a\right) \cdot \left(t - x\right)}}{z}
\] |
distribute-neg-frac [<=]46.0 | \[ t + \color{blue}{\left(-\frac{\left(y - a\right) \cdot \left(t - x\right)}{z}\right)}
\] |
unsub-neg [=>]46.0 | \[ \color{blue}{t - \frac{\left(y - a\right) \cdot \left(t - x\right)}{z}}
\] |
associate-/l* [=>]50.4 | \[ t - \color{blue}{\frac{y - a}{\frac{z}{t - x}}}
\] |
Taylor expanded in t around 0 40.0%
Simplified40.0%
[Start]40.0 | \[ t - \frac{y - a}{-1 \cdot \frac{z}{x}}
\] |
|---|---|
associate-*r/ [=>]40.0 | \[ t - \frac{y - a}{\color{blue}{\frac{-1 \cdot z}{x}}}
\] |
neg-mul-1 [<=]40.0 | \[ t - \frac{y - a}{\frac{\color{blue}{-z}}{x}}
\] |
if 0.0 < (+.f64 x (/.f64 (*.f64 (-.f64 y z) (-.f64 t x)) (-.f64 a z))) < 2.0000000000000001e300Initial program 96.4%
if 2.0000000000000001e300 < (+.f64 x (/.f64 (*.f64 (-.f64 y z) (-.f64 t x)) (-.f64 a z))) Initial program 30.0%
Simplified66.9%
[Start]30.0 | \[ x + \frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z}
\] |
|---|---|
+-commutative [=>]30.0 | \[ \color{blue}{\frac{\left(y - z\right) \cdot \left(t - x\right)}{a - z} + x}
\] |
associate-*l/ [<=]66.9 | \[ \color{blue}{\frac{y - z}{a - z} \cdot \left(t - x\right)} + x
\] |
fma-def [=>]66.9 | \[ \color{blue}{\mathsf{fma}\left(\frac{y - z}{a - z}, t - x, x\right)}
\] |
Taylor expanded in z around inf 61.0%
Simplified78.9%
[Start]61.0 | \[ \frac{\left(-1 \cdot y - -1 \cdot a\right) \cdot \left(t - x\right)}{z} + t
\] |
|---|---|
+-commutative [=>]61.0 | \[ \color{blue}{t + \frac{\left(-1 \cdot y - -1 \cdot a\right) \cdot \left(t - x\right)}{z}}
\] |
distribute-lft-out-- [=>]61.0 | \[ t + \frac{\color{blue}{\left(-1 \cdot \left(y - a\right)\right)} \cdot \left(t - x\right)}{z}
\] |
associate-*r* [<=]61.0 | \[ t + \frac{\color{blue}{-1 \cdot \left(\left(y - a\right) \cdot \left(t - x\right)\right)}}{z}
\] |
mul-1-neg [=>]61.0 | \[ t + \frac{\color{blue}{-\left(y - a\right) \cdot \left(t - x\right)}}{z}
\] |
distribute-neg-frac [<=]61.0 | \[ t + \color{blue}{\left(-\frac{\left(y - a\right) \cdot \left(t - x\right)}{z}\right)}
\] |
unsub-neg [=>]61.0 | \[ \color{blue}{t - \frac{\left(y - a\right) \cdot \left(t - x\right)}{z}}
\] |
associate-/l* [=>]78.9 | \[ t - \color{blue}{\frac{y - a}{\frac{z}{t - x}}}
\] |
Final simplification85.5%
| Alternative 1 | |
|---|---|
| Accuracy | 82.5% |
| Cost | 3532 |
| Alternative 2 | |
|---|---|
| Accuracy | 42.9% |
| Cost | 1764 |
| Alternative 3 | |
|---|---|
| Accuracy | 24.8% |
| Cost | 1372 |
| Alternative 4 | |
|---|---|
| Accuracy | 41.0% |
| Cost | 1372 |
| Alternative 5 | |
|---|---|
| Accuracy | 41.1% |
| Cost | 1372 |
| Alternative 6 | |
|---|---|
| Accuracy | 24.8% |
| Cost | 1244 |
| Alternative 7 | |
|---|---|
| Accuracy | 24.8% |
| Cost | 1244 |
| Alternative 8 | |
|---|---|
| Accuracy | 24.7% |
| Cost | 1244 |
| Alternative 9 | |
|---|---|
| Accuracy | 24.7% |
| Cost | 1244 |
| Alternative 10 | |
|---|---|
| Accuracy | 25.0% |
| Cost | 1240 |
| Alternative 11 | |
|---|---|
| Accuracy | 32.2% |
| Cost | 1240 |
| Alternative 12 | |
|---|---|
| Accuracy | 51.4% |
| Cost | 1232 |
| Alternative 13 | |
|---|---|
| Accuracy | 52.7% |
| Cost | 1097 |
| Alternative 14 | |
|---|---|
| Accuracy | 41.0% |
| Cost | 976 |
| Alternative 15 | |
|---|---|
| Accuracy | 41.0% |
| Cost | 976 |
| Alternative 16 | |
|---|---|
| Accuracy | 39.7% |
| Cost | 973 |
| Alternative 17 | |
|---|---|
| Accuracy | 39.7% |
| Cost | 973 |
| Alternative 18 | |
|---|---|
| Accuracy | 52.6% |
| Cost | 969 |
| Alternative 19 | |
|---|---|
| Accuracy | 52.3% |
| Cost | 968 |
| Alternative 20 | |
|---|---|
| Accuracy | 48.4% |
| Cost | 904 |
| Alternative 21 | |
|---|---|
| Accuracy | 31.5% |
| Cost | 844 |
| Alternative 22 | |
|---|---|
| Accuracy | 30.5% |
| Cost | 844 |
| Alternative 23 | |
|---|---|
| Accuracy | 38.5% |
| Cost | 844 |
| Alternative 24 | |
|---|---|
| Accuracy | 46.9% |
| Cost | 840 |
| Alternative 25 | |
|---|---|
| Accuracy | 24.8% |
| Cost | 328 |
| Alternative 26 | |
|---|---|
| Accuracy | 24.8% |
| Cost | 64 |
herbie shell --seed 2023159
(FPCore (x y z t a)
:name "Graphics.Rendering.Chart.Axis.Types:invLinMap from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< z -1.2536131056095036e+188) (- t (* (/ y z) (- t x))) (if (< z 4.446702369113811e+64) (+ x (/ (- y z) (/ (- a z) (- t x)))) (- t (* (/ y z) (- t x)))))
(+ x (/ (* (- y z) (- t x)) (- a z))))