| Alternative 1 | |
|---|---|
| Error | 6.2 |
| Cost | 840 |
(FPCore (x y z t) :precision binary64 (/ (* x 2.0) (- (* y z) (* t z))))
(FPCore (x y z t)
:precision binary64
(let* ((t_1 (- (* y z) (* t z))))
(if (<= t_1 -1e+178)
(/ (/ 2.0 (/ z x)) (- y t))
(if (<= t_1 -5e-219)
(/ (* x 2.0) (* z (- y t)))
(if (<= t_1 2e-263)
(/ (/ 2.0 z) (/ (- y t) x))
(if (<= t_1 5e+253)
(/ (* x 2.0) t_1)
(/ (* 2.0 (/ x z)) (- y t))))))))double code(double x, double y, double z, double t) {
return (x * 2.0) / ((y * z) - (t * z));
}
double code(double x, double y, double z, double t) {
double t_1 = (y * z) - (t * z);
double tmp;
if (t_1 <= -1e+178) {
tmp = (2.0 / (z / x)) / (y - t);
} else if (t_1 <= -5e-219) {
tmp = (x * 2.0) / (z * (y - t));
} else if (t_1 <= 2e-263) {
tmp = (2.0 / z) / ((y - t) / x);
} else if (t_1 <= 5e+253) {
tmp = (x * 2.0) / t_1;
} else {
tmp = (2.0 * (x / z)) / (y - t);
}
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 * 2.0d0) / ((y * z) - (t * z))
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) :: t_1
real(8) :: tmp
t_1 = (y * z) - (t * z)
if (t_1 <= (-1d+178)) then
tmp = (2.0d0 / (z / x)) / (y - t)
else if (t_1 <= (-5d-219)) then
tmp = (x * 2.0d0) / (z * (y - t))
else if (t_1 <= 2d-263) then
tmp = (2.0d0 / z) / ((y - t) / x)
else if (t_1 <= 5d+253) then
tmp = (x * 2.0d0) / t_1
else
tmp = (2.0d0 * (x / z)) / (y - t)
end if
code = tmp
end function
public static double code(double x, double y, double z, double t) {
return (x * 2.0) / ((y * z) - (t * z));
}
public static double code(double x, double y, double z, double t) {
double t_1 = (y * z) - (t * z);
double tmp;
if (t_1 <= -1e+178) {
tmp = (2.0 / (z / x)) / (y - t);
} else if (t_1 <= -5e-219) {
tmp = (x * 2.0) / (z * (y - t));
} else if (t_1 <= 2e-263) {
tmp = (2.0 / z) / ((y - t) / x);
} else if (t_1 <= 5e+253) {
tmp = (x * 2.0) / t_1;
} else {
tmp = (2.0 * (x / z)) / (y - t);
}
return tmp;
}
def code(x, y, z, t): return (x * 2.0) / ((y * z) - (t * z))
def code(x, y, z, t): t_1 = (y * z) - (t * z) tmp = 0 if t_1 <= -1e+178: tmp = (2.0 / (z / x)) / (y - t) elif t_1 <= -5e-219: tmp = (x * 2.0) / (z * (y - t)) elif t_1 <= 2e-263: tmp = (2.0 / z) / ((y - t) / x) elif t_1 <= 5e+253: tmp = (x * 2.0) / t_1 else: tmp = (2.0 * (x / z)) / (y - t) return tmp
function code(x, y, z, t) return Float64(Float64(x * 2.0) / Float64(Float64(y * z) - Float64(t * z))) end
function code(x, y, z, t) t_1 = Float64(Float64(y * z) - Float64(t * z)) tmp = 0.0 if (t_1 <= -1e+178) tmp = Float64(Float64(2.0 / Float64(z / x)) / Float64(y - t)); elseif (t_1 <= -5e-219) tmp = Float64(Float64(x * 2.0) / Float64(z * Float64(y - t))); elseif (t_1 <= 2e-263) tmp = Float64(Float64(2.0 / z) / Float64(Float64(y - t) / x)); elseif (t_1 <= 5e+253) tmp = Float64(Float64(x * 2.0) / t_1); else tmp = Float64(Float64(2.0 * Float64(x / z)) / Float64(y - t)); end return tmp end
function tmp = code(x, y, z, t) tmp = (x * 2.0) / ((y * z) - (t * z)); end
function tmp_2 = code(x, y, z, t) t_1 = (y * z) - (t * z); tmp = 0.0; if (t_1 <= -1e+178) tmp = (2.0 / (z / x)) / (y - t); elseif (t_1 <= -5e-219) tmp = (x * 2.0) / (z * (y - t)); elseif (t_1 <= 2e-263) tmp = (2.0 / z) / ((y - t) / x); elseif (t_1 <= 5e+253) tmp = (x * 2.0) / t_1; else tmp = (2.0 * (x / z)) / (y - t); end tmp_2 = tmp; end
code[x_, y_, z_, t_] := N[(N[(x * 2.0), $MachinePrecision] / N[(N[(y * z), $MachinePrecision] - N[(t * z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_, t_] := Block[{t$95$1 = N[(N[(y * z), $MachinePrecision] - N[(t * z), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$1, -1e+178], N[(N[(2.0 / N[(z / x), $MachinePrecision]), $MachinePrecision] / N[(y - t), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, -5e-219], N[(N[(x * 2.0), $MachinePrecision] / N[(z * N[(y - t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 2e-263], N[(N[(2.0 / z), $MachinePrecision] / N[(N[(y - t), $MachinePrecision] / x), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 5e+253], N[(N[(x * 2.0), $MachinePrecision] / t$95$1), $MachinePrecision], N[(N[(2.0 * N[(x / z), $MachinePrecision]), $MachinePrecision] / N[(y - t), $MachinePrecision]), $MachinePrecision]]]]]]
\frac{x \cdot 2}{y \cdot z - t \cdot z}
\begin{array}{l}
t_1 := y \cdot z - t \cdot z\\
\mathbf{if}\;t_1 \leq -1 \cdot 10^{+178}:\\
\;\;\;\;\frac{\frac{2}{\frac{z}{x}}}{y - t}\\
\mathbf{elif}\;t_1 \leq -5 \cdot 10^{-219}:\\
\;\;\;\;\frac{x \cdot 2}{z \cdot \left(y - t\right)}\\
\mathbf{elif}\;t_1 \leq 2 \cdot 10^{-263}:\\
\;\;\;\;\frac{\frac{2}{z}}{\frac{y - t}{x}}\\
\mathbf{elif}\;t_1 \leq 5 \cdot 10^{+253}:\\
\;\;\;\;\frac{x \cdot 2}{t_1}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot \frac{x}{z}}{y - t}\\
\end{array}
Results
| Original | 6.8 |
|---|---|
| Target | 2.1 |
| Herbie | 0.4 |
if (-.f64 (*.f64 y z) (*.f64 t z)) < -1.0000000000000001e178Initial program 11.0
Simplified0.8
[Start]11.0 | \[ \frac{x \cdot 2}{y \cdot z - t \cdot z}
\] |
|---|---|
rational.json-simplify-2 [=>]11.0 | \[ \frac{x \cdot 2}{\color{blue}{z \cdot y} - t \cdot z}
\] |
rational.json-simplify-52 [=>]11.0 | \[ \frac{x \cdot 2}{\color{blue}{z \cdot \left(y - t\right)}}
\] |
rational.json-simplify-46 [=>]0.8 | \[ \color{blue}{\frac{\frac{x \cdot 2}{z}}{y - t}}
\] |
rational.json-simplify-49 [=>]0.8 | \[ \frac{\color{blue}{2 \cdot \frac{x}{z}}}{y - t}
\] |
Applied egg-rr0.9
if -1.0000000000000001e178 < (-.f64 (*.f64 y z) (*.f64 t z)) < -5.0000000000000002e-219Initial program 0.3
Simplified0.3
[Start]0.3 | \[ \frac{x \cdot 2}{y \cdot z - t \cdot z}
\] |
|---|---|
rational.json-simplify-2 [=>]0.3 | \[ \frac{x \cdot 2}{\color{blue}{z \cdot y} - t \cdot z}
\] |
rational.json-simplify-52 [=>]0.3 | \[ \frac{x \cdot 2}{\color{blue}{z \cdot \left(y - t\right)}}
\] |
if -5.0000000000000002e-219 < (-.f64 (*.f64 y z) (*.f64 t z)) < 2e-263Initial program 25.0
Simplified28.6
[Start]25.0 | \[ \frac{x \cdot 2}{y \cdot z - t \cdot z}
\] |
|---|---|
rational.json-simplify-2 [=>]25.0 | \[ \frac{\color{blue}{2 \cdot x}}{y \cdot z - t \cdot z}
\] |
rational.json-simplify-49 [=>]28.6 | \[ \color{blue}{x \cdot \frac{2}{y \cdot z - t \cdot z}}
\] |
rational.json-simplify-2 [=>]28.6 | \[ x \cdot \frac{2}{\color{blue}{z \cdot y} - t \cdot z}
\] |
rational.json-simplify-52 [=>]28.6 | \[ x \cdot \frac{2}{\color{blue}{z \cdot \left(y - t\right)}}
\] |
rational.json-simplify-46 [=>]28.8 | \[ x \cdot \color{blue}{\frac{\frac{2}{z}}{y - t}}
\] |
rational.json-simplify-44 [=>]28.6 | \[ x \cdot \color{blue}{\frac{\frac{2}{y - t}}{z}}
\] |
Applied egg-rr0.8
if 2e-263 < (-.f64 (*.f64 y z) (*.f64 t z)) < 4.9999999999999997e253Initial program 0.3
if 4.9999999999999997e253 < (-.f64 (*.f64 y z) (*.f64 t z)) Initial program 21.6
Simplified0.2
[Start]21.6 | \[ \frac{x \cdot 2}{y \cdot z - t \cdot z}
\] |
|---|---|
rational.json-simplify-2 [=>]21.6 | \[ \frac{x \cdot 2}{\color{blue}{z \cdot y} - t \cdot z}
\] |
rational.json-simplify-52 [=>]14.9 | \[ \frac{x \cdot 2}{\color{blue}{z \cdot \left(y - t\right)}}
\] |
rational.json-simplify-46 [=>]0.2 | \[ \color{blue}{\frac{\frac{x \cdot 2}{z}}{y - t}}
\] |
rational.json-simplify-49 [=>]0.2 | \[ \frac{\color{blue}{2 \cdot \frac{x}{z}}}{y - t}
\] |
Final simplification0.4
| Alternative 1 | |
|---|---|
| Error | 6.2 |
| Cost | 840 |
| Alternative 2 | |
|---|---|
| Error | 2.4 |
| Cost | 840 |
| Alternative 3 | |
|---|---|
| Error | 2.4 |
| Cost | 840 |
| Alternative 4 | |
|---|---|
| Error | 2.5 |
| Cost | 840 |
| Alternative 5 | |
|---|---|
| Error | 2.5 |
| Cost | 840 |
| Alternative 6 | |
|---|---|
| Error | 28.5 |
| Cost | 712 |
| Alternative 7 | |
|---|---|
| Error | 18.3 |
| Cost | 712 |
| Alternative 8 | |
|---|---|
| Error | 18.1 |
| Cost | 712 |
| Alternative 9 | |
|---|---|
| Error | 17.8 |
| Cost | 712 |
| Alternative 10 | |
|---|---|
| Error | 17.7 |
| Cost | 712 |
| Alternative 11 | |
|---|---|
| Error | 17.7 |
| Cost | 712 |
| Alternative 12 | |
|---|---|
| Error | 31.6 |
| Cost | 448 |
herbie shell --seed 2023073
(FPCore (x y z t)
:name "Linear.Projection:infinitePerspective from linear-1.19.1.3, A"
:precision binary64
:herbie-target
(if (< (/ (* x 2.0) (- (* y z) (* t z))) -2.559141628295061e-13) (* (/ x (* (- y t) z)) 2.0) (if (< (/ (* x 2.0) (- (* y z) (* t z))) 1.045027827330126e-269) (/ (* (/ x z) 2.0) (- y t)) (* (/ x (* (- y t) z)) 2.0)))
(/ (* x 2.0) (- (* y z) (* t z))))