| Alternative 1 | |
|---|---|
| Accuracy | 96.3% |
| Cost | 2249 |
(FPCore (x y z) :precision binary64 (/ (* x y) (* (* z z) (+ z 1.0))))
(FPCore (x y z)
:precision binary64
(let* ((t_0 (/ (* x y) (* (* z z) (+ z 1.0)))))
(if (<= z -3e+65)
(/ (* y (/ (/ x z) z)) z)
(if (<= z -1.25e-89)
t_0
(if (<= z 1.6e-95)
(/ (* x (/ y z)) z)
(if (<= z 4.5e+64) t_0 (* (/ x z) (/ (/ y z) z))))))))double code(double x, double y, double z) {
return (x * y) / ((z * z) * (z + 1.0));
}
double code(double x, double y, double z) {
double t_0 = (x * y) / ((z * z) * (z + 1.0));
double tmp;
if (z <= -3e+65) {
tmp = (y * ((x / z) / z)) / z;
} else if (z <= -1.25e-89) {
tmp = t_0;
} else if (z <= 1.6e-95) {
tmp = (x * (y / z)) / z;
} else if (z <= 4.5e+64) {
tmp = t_0;
} else {
tmp = (x / z) * ((y / z) / z);
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = (x * y) / ((z * z) * (z + 1.0d0))
end function
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: t_0
real(8) :: tmp
t_0 = (x * y) / ((z * z) * (z + 1.0d0))
if (z <= (-3d+65)) then
tmp = (y * ((x / z) / z)) / z
else if (z <= (-1.25d-89)) then
tmp = t_0
else if (z <= 1.6d-95) then
tmp = (x * (y / z)) / z
else if (z <= 4.5d+64) then
tmp = t_0
else
tmp = (x / z) * ((y / z) / z)
end if
code = tmp
end function
public static double code(double x, double y, double z) {
return (x * y) / ((z * z) * (z + 1.0));
}
public static double code(double x, double y, double z) {
double t_0 = (x * y) / ((z * z) * (z + 1.0));
double tmp;
if (z <= -3e+65) {
tmp = (y * ((x / z) / z)) / z;
} else if (z <= -1.25e-89) {
tmp = t_0;
} else if (z <= 1.6e-95) {
tmp = (x * (y / z)) / z;
} else if (z <= 4.5e+64) {
tmp = t_0;
} else {
tmp = (x / z) * ((y / z) / z);
}
return tmp;
}
def code(x, y, z): return (x * y) / ((z * z) * (z + 1.0))
def code(x, y, z): t_0 = (x * y) / ((z * z) * (z + 1.0)) tmp = 0 if z <= -3e+65: tmp = (y * ((x / z) / z)) / z elif z <= -1.25e-89: tmp = t_0 elif z <= 1.6e-95: tmp = (x * (y / z)) / z elif z <= 4.5e+64: tmp = t_0 else: tmp = (x / z) * ((y / z) / z) return tmp
function code(x, y, z) return Float64(Float64(x * y) / Float64(Float64(z * z) * Float64(z + 1.0))) end
function code(x, y, z) t_0 = Float64(Float64(x * y) / Float64(Float64(z * z) * Float64(z + 1.0))) tmp = 0.0 if (z <= -3e+65) tmp = Float64(Float64(y * Float64(Float64(x / z) / z)) / z); elseif (z <= -1.25e-89) tmp = t_0; elseif (z <= 1.6e-95) tmp = Float64(Float64(x * Float64(y / z)) / z); elseif (z <= 4.5e+64) tmp = t_0; else tmp = Float64(Float64(x / z) * Float64(Float64(y / z) / z)); end return tmp end
function tmp = code(x, y, z) tmp = (x * y) / ((z * z) * (z + 1.0)); end
function tmp_2 = code(x, y, z) t_0 = (x * y) / ((z * z) * (z + 1.0)); tmp = 0.0; if (z <= -3e+65) tmp = (y * ((x / z) / z)) / z; elseif (z <= -1.25e-89) tmp = t_0; elseif (z <= 1.6e-95) tmp = (x * (y / z)) / z; elseif (z <= 4.5e+64) tmp = t_0; else tmp = (x / z) * ((y / z) / z); end tmp_2 = tmp; end
code[x_, y_, z_] := N[(N[(x * y), $MachinePrecision] / N[(N[(z * z), $MachinePrecision] * N[(z + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_] := Block[{t$95$0 = N[(N[(x * y), $MachinePrecision] / N[(N[(z * z), $MachinePrecision] * N[(z + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[z, -3e+65], N[(N[(y * N[(N[(x / z), $MachinePrecision] / z), $MachinePrecision]), $MachinePrecision] / z), $MachinePrecision], If[LessEqual[z, -1.25e-89], t$95$0, If[LessEqual[z, 1.6e-95], N[(N[(x * N[(y / z), $MachinePrecision]), $MachinePrecision] / z), $MachinePrecision], If[LessEqual[z, 4.5e+64], t$95$0, N[(N[(x / z), $MachinePrecision] * N[(N[(y / z), $MachinePrecision] / z), $MachinePrecision]), $MachinePrecision]]]]]]
\frac{x \cdot y}{\left(z \cdot z\right) \cdot \left(z + 1\right)}
\begin{array}{l}
t_0 := \frac{x \cdot y}{\left(z \cdot z\right) \cdot \left(z + 1\right)}\\
\mathbf{if}\;z \leq -3 \cdot 10^{+65}:\\
\;\;\;\;\frac{y \cdot \frac{\frac{x}{z}}{z}}{z}\\
\mathbf{elif}\;z \leq -1.25 \cdot 10^{-89}:\\
\;\;\;\;t_0\\
\mathbf{elif}\;z \leq 1.6 \cdot 10^{-95}:\\
\;\;\;\;\frac{x \cdot \frac{y}{z}}{z}\\
\mathbf{elif}\;z \leq 4.5 \cdot 10^{+64}:\\
\;\;\;\;t_0\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{z} \cdot \frac{\frac{y}{z}}{z}\\
\end{array}
Results
| Original | 76.1% |
|---|---|
| Target | 93.6% |
| Herbie | 94.9% |
if z < -3.0000000000000002e65Initial program 79.0%
Simplified91.0%
[Start]79.0 | \[ \frac{x \cdot y}{\left(z \cdot z\right) \cdot \left(z + 1\right)}
\] |
|---|---|
times-frac [=>]91.0 | \[ \color{blue}{\frac{x}{z \cdot z} \cdot \frac{y}{z + 1}}
\] |
Taylor expanded in z around inf 91.0%
Applied egg-rr96.9%
[Start]91.0 | \[ \frac{x}{z \cdot z} \cdot \frac{y}{z}
\] |
|---|---|
associate-*r/ [=>]91.0 | \[ \color{blue}{\frac{\frac{x}{z \cdot z} \cdot y}{z}}
\] |
associate-/r* [=>]96.9 | \[ \frac{\color{blue}{\frac{\frac{x}{z}}{z}} \cdot y}{z}
\] |
if -3.0000000000000002e65 < z < -1.24999999999999992e-89 or 1.5999999999999999e-95 < z < 4.49999999999999973e64Initial program 92.6%
if -1.24999999999999992e-89 < z < 1.5999999999999999e-95Initial program 37.5%
Simplified36.8%
[Start]37.5 | \[ \frac{x \cdot y}{\left(z \cdot z\right) \cdot \left(z + 1\right)}
\] |
|---|---|
times-frac [=>]36.8 | \[ \color{blue}{\frac{x}{z \cdot z} \cdot \frac{y}{z + 1}}
\] |
Applied egg-rr90.4%
[Start]36.8 | \[ \frac{x}{z \cdot z} \cdot \frac{y}{z + 1}
\] |
|---|---|
*-commutative [=>]36.8 | \[ \color{blue}{\frac{y}{z + 1} \cdot \frac{x}{z \cdot z}}
\] |
associate-/r* [=>]66.7 | \[ \frac{y}{z + 1} \cdot \color{blue}{\frac{\frac{x}{z}}{z}}
\] |
associate-*r/ [=>]90.4 | \[ \color{blue}{\frac{\frac{y}{z + 1} \cdot \frac{x}{z}}{z}}
\] |
Taylor expanded in z around 0 70.5%
Simplified91.6%
[Start]70.5 | \[ \frac{\frac{y \cdot x}{z}}{z}
\] |
|---|---|
associate-/l* [=>]91.4 | \[ \frac{\color{blue}{\frac{y}{\frac{z}{x}}}}{z}
\] |
associate-/r/ [=>]91.6 | \[ \frac{\color{blue}{\frac{y}{z} \cdot x}}{z}
\] |
if 4.49999999999999973e64 < z Initial program 80.5%
Simplified92.1%
[Start]80.5 | \[ \frac{x \cdot y}{\left(z \cdot z\right) \cdot \left(z + 1\right)}
\] |
|---|---|
times-frac [=>]92.1 | \[ \color{blue}{\frac{x}{z \cdot z} \cdot \frac{y}{z + 1}}
\] |
Applied egg-rr97.2%
[Start]92.1 | \[ \frac{x}{z \cdot z} \cdot \frac{y}{z + 1}
\] |
|---|---|
associate-*l/ [=>]91.2 | \[ \color{blue}{\frac{x \cdot \frac{y}{z + 1}}{z \cdot z}}
\] |
associate-/r* [=>]96.1 | \[ \color{blue}{\frac{\frac{x \cdot \frac{y}{z + 1}}{z}}{z}}
\] |
clear-num [=>]95.9 | \[ \frac{\frac{x \cdot \color{blue}{\frac{1}{\frac{z + 1}{y}}}}{z}}{z}
\] |
un-div-inv [=>]95.9 | \[ \frac{\frac{\color{blue}{\frac{x}{\frac{z + 1}{y}}}}{z}}{z}
\] |
associate-/l/ [=>]97.2 | \[ \frac{\color{blue}{\frac{x}{z \cdot \frac{z + 1}{y}}}}{z}
\] |
Taylor expanded in z around inf 92.2%
Simplified97.2%
[Start]92.2 | \[ \frac{\frac{x}{\frac{{z}^{2}}{y}}}{z}
\] |
|---|---|
unpow2 [=>]92.2 | \[ \frac{\frac{x}{\frac{\color{blue}{z \cdot z}}{y}}}{z}
\] |
associate-/l* [=>]97.2 | \[ \frac{\frac{x}{\color{blue}{\frac{z}{\frac{y}{z}}}}}{z}
\] |
Applied egg-rr97.5%
[Start]97.2 | \[ \frac{\frac{x}{\frac{z}{\frac{y}{z}}}}{z}
\] |
|---|---|
div-inv [=>]97.2 | \[ \color{blue}{\frac{x}{\frac{z}{\frac{y}{z}}} \cdot \frac{1}{z}}
\] |
associate-/r/ [=>]98.6 | \[ \color{blue}{\left(\frac{x}{z} \cdot \frac{y}{z}\right)} \cdot \frac{1}{z}
\] |
associate-*l* [=>]97.5 | \[ \color{blue}{\frac{x}{z} \cdot \left(\frac{y}{z} \cdot \frac{1}{z}\right)}
\] |
div-inv [<=]97.5 | \[ \frac{x}{z} \cdot \color{blue}{\frac{\frac{y}{z}}{z}}
\] |
Final simplification94.9%
| Alternative 1 | |
|---|---|
| Accuracy | 96.3% |
| Cost | 2249 |
| Alternative 2 | |
|---|---|
| Accuracy | 96.3% |
| Cost | 2248 |
| Alternative 3 | |
|---|---|
| Accuracy | 96.0% |
| Cost | 1352 |
| Alternative 4 | |
|---|---|
| Accuracy | 96.1% |
| Cost | 1352 |
| Alternative 5 | |
|---|---|
| Accuracy | 93.4% |
| Cost | 841 |
| Alternative 6 | |
|---|---|
| Accuracy | 93.5% |
| Cost | 840 |
| Alternative 7 | |
|---|---|
| Accuracy | 93.9% |
| Cost | 840 |
| Alternative 8 | |
|---|---|
| Accuracy | 93.4% |
| Cost | 840 |
| Alternative 9 | |
|---|---|
| Accuracy | 93.8% |
| Cost | 840 |
| Alternative 10 | |
|---|---|
| Accuracy | 72.1% |
| Cost | 713 |
| Alternative 11 | |
|---|---|
| Accuracy | 72.0% |
| Cost | 712 |
| Alternative 12 | |
|---|---|
| Accuracy | 72.2% |
| Cost | 712 |
| Alternative 13 | |
|---|---|
| Accuracy | 73.2% |
| Cost | 712 |
| Alternative 14 | |
|---|---|
| Accuracy | 72.7% |
| Cost | 712 |
| Alternative 15 | |
|---|---|
| Accuracy | 95.1% |
| Cost | 704 |
| Alternative 16 | |
|---|---|
| Accuracy | 72.3% |
| Cost | 580 |
| Alternative 17 | |
|---|---|
| Accuracy | 72.4% |
| Cost | 580 |
| Alternative 18 | |
|---|---|
| Accuracy | 33.3% |
| Cost | 516 |
| Alternative 19 | |
|---|---|
| Accuracy | 66.7% |
| Cost | 448 |
| Alternative 20 | |
|---|---|
| Accuracy | 28.9% |
| Cost | 384 |
herbie shell --seed 2023133
(FPCore (x y z)
:name "Statistics.Distribution.Beta:$cvariance from math-functions-0.1.5.2"
:precision binary64
:herbie-target
(if (< z 249.6182814532307) (/ (* y (/ x z)) (+ z (* z z))) (/ (* (/ (/ y z) (+ 1.0 z)) x) z))
(/ (* x y) (* (* z z) (+ z 1.0))))