| Alternative 1 | |
|---|---|
| Accuracy | 97.6% |
| Cost | 7044 |
\[\begin{array}{l}
\mathbf{if}\;z \cdot t \leq -4 \cdot 10^{+214}:\\
\;\;\;\;\frac{\frac{-x}{t}}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\mathsf{fma}\left(-z, t, y\right)}\\
\end{array}
\]

(FPCore (x y z t) :precision binary64 (/ x (- y (* z t))))
(FPCore (x y z t) :precision binary64 (if (<= (* z t) -4e+214) (/ (/ (- x) t) z) (/ x (fma (- z) t y))))
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) <= -4e+214) {
tmp = (-x / t) / z;
} else {
tmp = x / fma(-z, t, y);
}
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) <= -4e+214) tmp = Float64(Float64(Float64(-x) / t) / z); else tmp = Float64(x / fma(Float64(-z), t, y)); 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], -4e+214], N[(N[((-x) / t), $MachinePrecision] / z), $MachinePrecision], N[(x / N[((-z) * t + y), $MachinePrecision]), $MachinePrecision]]
\frac{x}{y - z \cdot t}
\begin{array}{l}
\mathbf{if}\;z \cdot t \leq -4 \cdot 10^{+214}:\\
\;\;\;\;\frac{\frac{-x}{t}}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{\mathsf{fma}\left(-z, t, y\right)}\\
\end{array}
Herbie found 8 alternatives:
| Alternative | Accuracy | Speedup |
|---|
| Original | 95.9% |
|---|---|
| Target | 96.4% |
| Herbie | 97.6% |
if (*.f64 z t) < -3.9999999999999998e214Initial program 69.8%
Applied egg-rr69.8%
[Start]69.8% | \[ \frac{x}{y - z \cdot t}
\] |
|---|---|
clear-num [=>]69.8% | \[ \color{blue}{\frac{1}{\frac{y - z \cdot t}{x}}}
\] |
associate-/r/ [=>]69.8% | \[ \color{blue}{\frac{1}{y - z \cdot t} \cdot x}
\] |
Taylor expanded in y around 0 69.8%
Applied egg-rr99.6%
[Start]69.8% | \[ \frac{-1}{t \cdot z} \cdot x
\] |
|---|---|
associate-*l/ [=>]69.8% | \[ \color{blue}{\frac{-1 \cdot x}{t \cdot z}}
\] |
neg-mul-1 [<=]69.8% | \[ \frac{\color{blue}{-x}}{t \cdot z}
\] |
associate-/r* [=>]99.6% | \[ \color{blue}{\frac{\frac{-x}{t}}{z}}
\] |
if -3.9999999999999998e214 < (*.f64 z t) Initial program 98.4%
Applied egg-rr98.4%
[Start]98.4% | \[ \frac{x}{y - z \cdot t}
\] |
|---|---|
sub-neg [=>]98.4% | \[ \frac{x}{\color{blue}{y + \left(-z \cdot t\right)}}
\] |
+-commutative [=>]98.4% | \[ \frac{x}{\color{blue}{\left(-z \cdot t\right) + y}}
\] |
distribute-lft-neg-in [=>]98.4% | \[ \frac{x}{\color{blue}{\left(-z\right) \cdot t} + y}
\] |
fma-def [=>]98.4% | \[ \frac{x}{\color{blue}{\mathsf{fma}\left(-z, t, y\right)}}
\] |
Final simplification98.5%
| Alternative 1 | |
|---|---|
| Accuracy | 97.6% |
| Cost | 7044 |
| Alternative 2 | |
|---|---|
| Accuracy | 77.4% |
| Cost | 905 |
| Alternative 3 | |
|---|---|
| Accuracy | 78.3% |
| Cost | 904 |
| Alternative 4 | |
|---|---|
| Accuracy | 79.4% |
| Cost | 904 |
| Alternative 5 | |
|---|---|
| Accuracy | 63.7% |
| Cost | 841 |
| Alternative 6 | |
|---|---|
| Accuracy | 63.1% |
| Cost | 840 |
| Alternative 7 | |
|---|---|
| Accuracy | 97.6% |
| Cost | 708 |
| Alternative 8 | |
|---|---|
| Accuracy | 55.1% |
| Cost | 192 |
herbie shell --seed 2023272
(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))))