| Alternative 1 | |
|---|---|
| Accuracy | 99.7% |
| Cost | 7304 |

(FPCore (x y z t) :precision binary64 (/ x (- y (* z t))))
(FPCore (x y z t) :precision binary64 (if (<= (* z t) (- INFINITY)) (/ (/ (- x) t) z) (if (<= (* z t) 5e+231) (/ x (fma (- z) t y)) (/ (/ -1.0 t) (/ z x)))))
double code(double x, double y, double z, double t) {
return x / (y - (z * t));
}
double code(double x, double y, double z, double t) {
double tmp;
if ((z * t) <= -((double) INFINITY)) {
tmp = (-x / t) / z;
} else if ((z * t) <= 5e+231) {
tmp = x / fma(-z, t, y);
} else {
tmp = (-1.0 / t) / (z / x);
}
return tmp;
}
function code(x, y, z, t) return Float64(x / Float64(y - Float64(z * t))) end
function code(x, y, z, t) tmp = 0.0 if (Float64(z * t) <= Float64(-Inf)) tmp = Float64(Float64(Float64(-x) / t) / z); elseif (Float64(z * t) <= 5e+231) tmp = Float64(x / fma(Float64(-z), t, y)); else tmp = Float64(Float64(-1.0 / t) / Float64(z / x)); end return tmp end
code[x_, y_, z_, t_] := N[(x / N[(y - N[(z * t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_, t_] := If[LessEqual[N[(z * t), $MachinePrecision], (-Infinity)], N[(N[((-x) / t), $MachinePrecision] / z), $MachinePrecision], If[LessEqual[N[(z * t), $MachinePrecision], 5e+231], N[(x / N[((-z) * t + y), $MachinePrecision]), $MachinePrecision], N[(N[(-1.0 / t), $MachinePrecision] / N[(z / x), $MachinePrecision]), $MachinePrecision]]]
\frac{x}{y - z \cdot t}
\begin{array}{l}
\mathbf{if}\;z \cdot t \leq -\infty:\\
\;\;\;\;\frac{\frac{-x}{t}}{z}\\
\mathbf{elif}\;z \cdot t \leq 5 \cdot 10^{+231}:\\
\;\;\;\;\frac{x}{\mathsf{fma}\left(-z, t, y\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{-1}{t}}{\frac{z}{x}}\\
\end{array}
Herbie found 8 alternatives:
| Alternative | Accuracy | Speedup |
|---|
| Original | 95.8% |
|---|---|
| Target | 96.3% |
| Herbie | 99.7% |
if (*.f64 z t) < -inf.0Initial program 75.4%
Applied egg-rr75.4%
[Start]75.4% | \[ \frac{x}{y - z \cdot t}
\] |
|---|---|
clear-num [=>]75.4% | \[ \color{blue}{\frac{1}{\frac{y - z \cdot t}{x}}}
\] |
associate-/r/ [=>]75.4% | \[ \color{blue}{\frac{1}{y - z \cdot t} \cdot x}
\] |
Taylor expanded in y around 0 75.4%
Simplified100.0%
[Start]75.4% | \[ -1 \cdot \frac{x}{t \cdot z}
\] |
|---|---|
mul-1-neg [=>]75.4% | \[ \color{blue}{-\frac{x}{t \cdot z}}
\] |
associate-/r* [=>]100.0% | \[ -\color{blue}{\frac{\frac{x}{t}}{z}}
\] |
if -inf.0 < (*.f64 z t) < 5.00000000000000028e231Initial program 99.9%
Applied egg-rr99.9%
[Start]99.9% | \[ \frac{x}{y - z \cdot t}
\] |
|---|---|
sub-neg [=>]99.9% | \[ \frac{x}{\color{blue}{y + \left(-z \cdot t\right)}}
\] |
+-commutative [=>]99.9% | \[ \frac{x}{\color{blue}{\left(-z \cdot t\right) + y}}
\] |
distribute-lft-neg-in [=>]99.9% | \[ \frac{x}{\color{blue}{\left(-z\right) \cdot t} + y}
\] |
fma-def [=>]99.9% | \[ \frac{x}{\color{blue}{\mathsf{fma}\left(-z, t, y\right)}}
\] |
if 5.00000000000000028e231 < (*.f64 z t) Initial program 78.3%
Applied egg-rr52.4%
[Start]78.3% | \[ \frac{x}{y - z \cdot t}
\] |
|---|---|
add-sqr-sqrt [=>]52.5% | \[ \frac{\color{blue}{\sqrt{x} \cdot \sqrt{x}}}{y - z \cdot t}
\] |
*-un-lft-identity [=>]52.5% | \[ \frac{\sqrt{x} \cdot \sqrt{x}}{\color{blue}{1 \cdot \left(y - z \cdot t\right)}}
\] |
times-frac [=>]52.4% | \[ \color{blue}{\frac{\sqrt{x}}{1} \cdot \frac{\sqrt{x}}{y - z \cdot t}}
\] |
Taylor expanded in y around 0 52.4%
Simplified52.4%
[Start]52.4% | \[ \frac{\sqrt{x}}{1} \cdot \frac{\sqrt{x}}{-1 \cdot \left(t \cdot z\right)}
\] |
|---|---|
mul-1-neg [=>]52.4% | \[ \frac{\sqrt{x}}{1} \cdot \frac{\sqrt{x}}{\color{blue}{-t \cdot z}}
\] |
*-commutative [<=]52.4% | \[ \frac{\sqrt{x}}{1} \cdot \frac{\sqrt{x}}{-\color{blue}{z \cdot t}}
\] |
distribute-lft-neg-in [=>]52.4% | \[ \frac{\sqrt{x}}{1} \cdot \frac{\sqrt{x}}{\color{blue}{\left(-z\right) \cdot t}}
\] |
Applied egg-rr99.8%
[Start]52.4% | \[ \frac{\sqrt{x}}{1} \cdot \frac{\sqrt{x}}{\left(-z\right) \cdot t}
\] |
|---|---|
frac-times [=>]52.5% | \[ \color{blue}{\frac{\sqrt{x} \cdot \sqrt{x}}{1 \cdot \left(\left(-z\right) \cdot t\right)}}
\] |
add-sqr-sqrt [<=]78.3% | \[ \frac{\color{blue}{x}}{1 \cdot \left(\left(-z\right) \cdot t\right)}
\] |
*-un-lft-identity [<=]78.3% | \[ \frac{x}{\color{blue}{\left(-z\right) \cdot t}}
\] |
clear-num [=>]78.4% | \[ \color{blue}{\frac{1}{\frac{\left(-z\right) \cdot t}{x}}}
\] |
metadata-eval [<=]78.4% | \[ \frac{\color{blue}{--1}}{\frac{\left(-z\right) \cdot t}{x}}
\] |
distribute-lft-neg-out [=>]78.4% | \[ \frac{--1}{\frac{\color{blue}{-z \cdot t}}{x}}
\] |
*-commutative [<=]78.4% | \[ \frac{--1}{\frac{-\color{blue}{t \cdot z}}{x}}
\] |
distribute-neg-frac [<=]78.4% | \[ \frac{--1}{\color{blue}{-\frac{t \cdot z}{x}}}
\] |
*-commutative [=>]78.4% | \[ \frac{--1}{-\frac{\color{blue}{z \cdot t}}{x}}
\] |
associate-*l/ [<=]97.2% | \[ \frac{--1}{-\color{blue}{\frac{z}{x} \cdot t}}
\] |
frac-2neg [<=]97.2% | \[ \color{blue}{\frac{-1}{\frac{z}{x} \cdot t}}
\] |
*-commutative [=>]97.2% | \[ \frac{-1}{\color{blue}{t \cdot \frac{z}{x}}}
\] |
associate-/r* [=>]99.8% | \[ \color{blue}{\frac{\frac{-1}{t}}{\frac{z}{x}}}
\] |
Final simplification99.9%
| Alternative 1 | |
|---|---|
| Accuracy | 99.7% |
| Cost | 7304 |
| Alternative 2 | |
|---|---|
| Accuracy | 99.7% |
| Cost | 969 |
| Alternative 3 | |
|---|---|
| Accuracy | 99.7% |
| Cost | 968 |
| Alternative 4 | |
|---|---|
| Accuracy | 70.2% |
| Cost | 713 |
| Alternative 5 | |
|---|---|
| Accuracy | 71.2% |
| Cost | 649 |
| Alternative 6 | |
|---|---|
| Accuracy | 56.6% |
| Cost | 585 |
| Alternative 7 | |
|---|---|
| Accuracy | 56.8% |
| Cost | 584 |
| Alternative 8 | |
|---|---|
| Accuracy | 54.7% |
| Cost | 192 |
herbie shell --seed 2023271
(FPCore (x y z t)
:name "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, B"
:precision binary64
:herbie-target
(if (< x -1.618195973607049e+50) (/ 1.0 (- (/ y x) (* (/ z x) t))) (if (< x 2.1378306434876444e+131) (/ x (- y (* z t))) (/ 1.0 (- (/ y x) (* (/ z x) t)))))
(/ x (- y (* z t))))