| Alternative 1 | |
|---|---|
| Accuracy | 97.3% |
| Cost | 1092 |
\[\begin{array}{l}
\mathbf{if}\;\frac{x - y}{z - y} \leq -1 \cdot 10^{+191}:\\
\;\;\;\;x \cdot \frac{t}{z - y}\\
\mathbf{else}:\\
\;\;\;\;\frac{t}{\frac{z - y}{x - y}}\\
\end{array}
\]

(FPCore (x y z t) :precision binary64 (* (/ (- x y) (- z y)) t))
(FPCore (x y z t) :precision binary64 (if (<= (/ (- x y) (- z y)) -1e+191) (* x (/ t (- z y))) (/ t (/ (- z y) (- x y)))))
double code(double x, double y, double z, double t) {
return ((x - y) / (z - y)) * t;
}
double code(double x, double y, double z, double t) {
double tmp;
if (((x - y) / (z - y)) <= -1e+191) {
tmp = x * (t / (z - y));
} else {
tmp = t / ((z - y) / (x - y));
}
return tmp;
}
real(8) function code(x, y, z, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
code = ((x - y) / (z - y)) * t
end function
real(8) function code(x, y, z, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
real(8) :: tmp
if (((x - y) / (z - y)) <= (-1d+191)) then
tmp = x * (t / (z - y))
else
tmp = t / ((z - y) / (x - y))
end if
code = tmp
end function
public static double code(double x, double y, double z, double t) {
return ((x - y) / (z - y)) * t;
}
public static double code(double x, double y, double z, double t) {
double tmp;
if (((x - y) / (z - y)) <= -1e+191) {
tmp = x * (t / (z - y));
} else {
tmp = t / ((z - y) / (x - y));
}
return tmp;
}
def code(x, y, z, t): return ((x - y) / (z - y)) * t
def code(x, y, z, t): tmp = 0 if ((x - y) / (z - y)) <= -1e+191: tmp = x * (t / (z - y)) else: tmp = t / ((z - y) / (x - y)) return tmp
function code(x, y, z, t) return Float64(Float64(Float64(x - y) / Float64(z - y)) * t) end
function code(x, y, z, t) tmp = 0.0 if (Float64(Float64(x - y) / Float64(z - y)) <= -1e+191) tmp = Float64(x * Float64(t / Float64(z - y))); else tmp = Float64(t / Float64(Float64(z - y) / Float64(x - y))); end return tmp end
function tmp = code(x, y, z, t) tmp = ((x - y) / (z - y)) * t; end
function tmp_2 = code(x, y, z, t) tmp = 0.0; if (((x - y) / (z - y)) <= -1e+191) tmp = x * (t / (z - y)); else tmp = t / ((z - y) / (x - y)); end tmp_2 = tmp; end
code[x_, y_, z_, t_] := N[(N[(N[(x - y), $MachinePrecision] / N[(z - y), $MachinePrecision]), $MachinePrecision] * t), $MachinePrecision]
code[x_, y_, z_, t_] := If[LessEqual[N[(N[(x - y), $MachinePrecision] / N[(z - y), $MachinePrecision]), $MachinePrecision], -1e+191], N[(x * N[(t / N[(z - y), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(t / N[(N[(z - y), $MachinePrecision] / N[(x - y), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\frac{x - y}{z - y} \cdot t
\begin{array}{l}
\mathbf{if}\;\frac{x - y}{z - y} \leq -1 \cdot 10^{+191}:\\
\;\;\;\;x \cdot \frac{t}{z - y}\\
\mathbf{else}:\\
\;\;\;\;\frac{t}{\frac{z - y}{x - y}}\\
\end{array}
Herbie found 18 alternatives:
| Alternative | Accuracy | Speedup |
|---|
Results
| Original | 96.9% |
|---|---|
| Target | 96.8% |
| Herbie | 97.3% |
if (/.f64 (-.f64 x y) (-.f64 z y)) < -1.00000000000000007e191Initial program 66.5%
Simplified99.9%
[Start]66.5% | \[ \frac{x - y}{z - y} \cdot t
\] |
|---|---|
associate-*l/ [=>]94.4% | \[ \color{blue}{\frac{\left(x - y\right) \cdot t}{z - y}}
\] |
associate-*r/ [<=]99.9% | \[ \color{blue}{\left(x - y\right) \cdot \frac{t}{z - y}}
\] |
Taylor expanded in x around inf 94.4%
Simplified99.9%
[Start]94.4% | \[ \frac{t \cdot x}{z - y}
\] |
|---|---|
associate-*l/ [<=]99.9% | \[ \color{blue}{\frac{t}{z - y} \cdot x}
\] |
*-commutative [=>]99.9% | \[ \color{blue}{x \cdot \frac{t}{z - y}}
\] |
if -1.00000000000000007e191 < (/.f64 (-.f64 x y) (-.f64 z y)) Initial program 99.0%
Simplified86.4%
[Start]99.0% | \[ \frac{x - y}{z - y} \cdot t
\] |
|---|---|
associate-*l/ [=>]84.6% | \[ \color{blue}{\frac{\left(x - y\right) \cdot t}{z - y}}
\] |
associate-*r/ [<=]86.4% | \[ \color{blue}{\left(x - y\right) \cdot \frac{t}{z - y}}
\] |
Applied egg-rr99.1%
[Start]86.4% | \[ \left(x - y\right) \cdot \frac{t}{z - y}
\] |
|---|---|
associate-*r/ [=>]84.6% | \[ \color{blue}{\frac{\left(x - y\right) \cdot t}{z - y}}
\] |
associate-*l/ [<=]99.0% | \[ \color{blue}{\frac{x - y}{z - y} \cdot t}
\] |
*-commutative [=>]99.0% | \[ \color{blue}{t \cdot \frac{x - y}{z - y}}
\] |
clear-num [=>]98.9% | \[ t \cdot \color{blue}{\frac{1}{\frac{z - y}{x - y}}}
\] |
un-div-inv [=>]99.1% | \[ \color{blue}{\frac{t}{\frac{z - y}{x - y}}}
\] |
Final simplification99.2%
| Alternative 1 | |
|---|---|
| Accuracy | 97.3% |
| Cost | 1092 |
| Alternative 2 | |
|---|---|
| Accuracy | 70.0% |
| Cost | 1173 |
| Alternative 3 | |
|---|---|
| Accuracy | 97.4% |
| Cost | 1092 |
| Alternative 4 | |
|---|---|
| Accuracy | 73.1% |
| Cost | 1040 |
| Alternative 5 | |
|---|---|
| Accuracy | 74.9% |
| Cost | 1040 |
| Alternative 6 | |
|---|---|
| Accuracy | 68.0% |
| Cost | 976 |
| Alternative 7 | |
|---|---|
| Accuracy | 69.0% |
| Cost | 976 |
| Alternative 8 | |
|---|---|
| Accuracy | 87.3% |
| Cost | 972 |
| Alternative 9 | |
|---|---|
| Accuracy | 61.1% |
| Cost | 848 |
| Alternative 10 | |
|---|---|
| Accuracy | 60.9% |
| Cost | 848 |
| Alternative 11 | |
|---|---|
| Accuracy | 71.9% |
| Cost | 844 |
| Alternative 12 | |
|---|---|
| Accuracy | 71.8% |
| Cost | 844 |
| Alternative 13 | |
|---|---|
| Accuracy | 71.4% |
| Cost | 844 |
| Alternative 14 | |
|---|---|
| Accuracy | 69.5% |
| Cost | 712 |
| Alternative 15 | |
|---|---|
| Accuracy | 60.7% |
| Cost | 584 |
| Alternative 16 | |
|---|---|
| Accuracy | 61.4% |
| Cost | 584 |
| Alternative 17 | |
|---|---|
| Accuracy | 61.3% |
| Cost | 584 |
| Alternative 18 | |
|---|---|
| Accuracy | 35.9% |
| Cost | 64 |
herbie shell --seed 2023165
(FPCore (x y z t)
:name "Numeric.Signal.Multichannel:$cput from hsignal-0.2.7.1"
:precision binary64
:herbie-target
(/ t (/ (- z y) (- x y)))
(* (/ (- x y) (- z y)) t))