| Alternative 1 | |
|---|---|
| Accuracy | 97.7% |
| Cost | 13632 |
(FPCore (x y z) :precision binary64 (/ (/ 1.0 x) (* y (+ 1.0 (* z z)))))
(FPCore (x y z)
:precision binary64
(if (<= z -1500000000.0)
(* (/ (/ 1.0 y) (hypot 1.0 z)) (/ (/ -1.0 z) x))
(if (<= z 1.5e+19)
(/ (/ (/ 1.0 y) x) (fma z z 1.0))
(/ (/ (/ (/ 1.0 z) x) y) z))))double code(double x, double y, double z) {
return (1.0 / x) / (y * (1.0 + (z * z)));
}
double code(double x, double y, double z) {
double tmp;
if (z <= -1500000000.0) {
tmp = ((1.0 / y) / hypot(1.0, z)) * ((-1.0 / z) / x);
} else if (z <= 1.5e+19) {
tmp = ((1.0 / y) / x) / fma(z, z, 1.0);
} else {
tmp = (((1.0 / z) / x) / y) / z;
}
return tmp;
}
function code(x, y, z) return Float64(Float64(1.0 / x) / Float64(y * Float64(1.0 + Float64(z * z)))) end
function code(x, y, z) tmp = 0.0 if (z <= -1500000000.0) tmp = Float64(Float64(Float64(1.0 / y) / hypot(1.0, z)) * Float64(Float64(-1.0 / z) / x)); elseif (z <= 1.5e+19) tmp = Float64(Float64(Float64(1.0 / y) / x) / fma(z, z, 1.0)); else tmp = Float64(Float64(Float64(Float64(1.0 / z) / x) / y) / z); end return tmp end
code[x_, y_, z_] := N[(N[(1.0 / x), $MachinePrecision] / N[(y * N[(1.0 + N[(z * z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_] := If[LessEqual[z, -1500000000.0], N[(N[(N[(1.0 / y), $MachinePrecision] / N[Sqrt[1.0 ^ 2 + z ^ 2], $MachinePrecision]), $MachinePrecision] * N[(N[(-1.0 / z), $MachinePrecision] / x), $MachinePrecision]), $MachinePrecision], If[LessEqual[z, 1.5e+19], N[(N[(N[(1.0 / y), $MachinePrecision] / x), $MachinePrecision] / N[(z * z + 1.0), $MachinePrecision]), $MachinePrecision], N[(N[(N[(N[(1.0 / z), $MachinePrecision] / x), $MachinePrecision] / y), $MachinePrecision] / z), $MachinePrecision]]]
\frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)}
\begin{array}{l}
\mathbf{if}\;z \leq -1500000000:\\
\;\;\;\;\frac{\frac{1}{y}}{\mathsf{hypot}\left(1, z\right)} \cdot \frac{\frac{-1}{z}}{x}\\
\mathbf{elif}\;z \leq 1.5 \cdot 10^{+19}:\\
\;\;\;\;\frac{\frac{\frac{1}{y}}{x}}{\mathsf{fma}\left(z, z, 1\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\frac{1}{z}}{x}}{y}}{z}\\
\end{array}
| Original | 89.4% |
|---|---|
| Target | 91.6% |
| Herbie | 97.7% |
if z < -1.5e9Initial program 79.6%
Simplified79.4%
[Start]79.6 | \[ \frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)}
\] |
|---|---|
associate-/r* [=>]79.4 | \[ \color{blue}{\frac{\frac{\frac{1}{x}}{y}}{1 + z \cdot z}}
\] |
Applied egg-rr95.9%
[Start]79.4 | \[ \frac{\frac{\frac{1}{x}}{y}}{1 + z \cdot z}
\] |
|---|---|
div-inv [=>]79.4 | \[ \frac{\color{blue}{\frac{1}{x} \cdot \frac{1}{y}}}{1 + z \cdot z}
\] |
add-sqr-sqrt [=>]79.4 | \[ \frac{\frac{1}{x} \cdot \frac{1}{y}}{\color{blue}{\sqrt{1 + z \cdot z} \cdot \sqrt{1 + z \cdot z}}}
\] |
times-frac [=>]81.2 | \[ \color{blue}{\frac{\frac{1}{x}}{\sqrt{1 + z \cdot z}} \cdot \frac{\frac{1}{y}}{\sqrt{1 + z \cdot z}}}
\] |
hypot-1-def [=>]81.2 | \[ \frac{\frac{1}{x}}{\color{blue}{\mathsf{hypot}\left(1, z\right)}} \cdot \frac{\frac{1}{y}}{\sqrt{1 + z \cdot z}}
\] |
hypot-1-def [=>]95.9 | \[ \frac{\frac{1}{x}}{\mathsf{hypot}\left(1, z\right)} \cdot \frac{\frac{1}{y}}{\color{blue}{\mathsf{hypot}\left(1, z\right)}}
\] |
Taylor expanded in z around -inf 95.8%
Simplified95.9%
[Start]95.8 | \[ \frac{-1}{z \cdot x} \cdot \frac{\frac{1}{y}}{\mathsf{hypot}\left(1, z\right)}
\] |
|---|---|
associate-/r* [=>]95.9 | \[ \color{blue}{\frac{\frac{-1}{z}}{x}} \cdot \frac{\frac{1}{y}}{\mathsf{hypot}\left(1, z\right)}
\] |
if -1.5e9 < z < 1.5e19Initial program 99.6%
Simplified99.1%
[Start]99.6 | \[ \frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)}
\] |
|---|---|
associate-/r* [<=]99.1 | \[ \color{blue}{\frac{1}{x \cdot \left(y \cdot \left(1 + z \cdot z\right)\right)}}
\] |
+-commutative [=>]99.1 | \[ \frac{1}{x \cdot \left(y \cdot \color{blue}{\left(z \cdot z + 1\right)}\right)}
\] |
fma-def [=>]99.1 | \[ \frac{1}{x \cdot \left(y \cdot \color{blue}{\mathsf{fma}\left(z, z, 1\right)}\right)}
\] |
Taylor expanded in x around 0 99.1%
Simplified99.6%
[Start]99.1 | \[ \frac{1}{y \cdot \left(\left({z}^{2} + 1\right) \cdot x\right)}
\] |
|---|---|
associate-/r* [=>]99.6 | \[ \color{blue}{\frac{\frac{1}{y}}{\left({z}^{2} + 1\right) \cdot x}}
\] |
*-commutative [=>]99.6 | \[ \frac{\frac{1}{y}}{\color{blue}{x \cdot \left({z}^{2} + 1\right)}}
\] |
associate-/r* [=>]99.6 | \[ \color{blue}{\frac{\frac{\frac{1}{y}}{x}}{{z}^{2} + 1}}
\] |
unpow2 [=>]99.6 | \[ \frac{\frac{\frac{1}{y}}{x}}{\color{blue}{z \cdot z} + 1}
\] |
fma-udef [<=]99.6 | \[ \frac{\frac{\frac{1}{y}}{x}}{\color{blue}{\mathsf{fma}\left(z, z, 1\right)}}
\] |
if 1.5e19 < z Initial program 79.0%
Simplified78.7%
[Start]79.0 | \[ \frac{\frac{1}{x}}{y \cdot \left(1 + z \cdot z\right)}
\] |
|---|---|
associate-/r* [<=]78.7 | \[ \color{blue}{\frac{1}{x \cdot \left(y \cdot \left(1 + z \cdot z\right)\right)}}
\] |
+-commutative [=>]78.7 | \[ \frac{1}{x \cdot \left(y \cdot \color{blue}{\left(z \cdot z + 1\right)}\right)}
\] |
fma-def [=>]78.7 | \[ \frac{1}{x \cdot \left(y \cdot \color{blue}{\mathsf{fma}\left(z, z, 1\right)}\right)}
\] |
Taylor expanded in z around inf 79.4%
Simplified78.5%
[Start]79.4 | \[ \frac{1}{y \cdot \left({z}^{2} \cdot x\right)}
\] |
|---|---|
unpow2 [=>]79.4 | \[ \frac{1}{y \cdot \left(\color{blue}{\left(z \cdot z\right)} \cdot x\right)}
\] |
*-commutative [=>]79.4 | \[ \frac{1}{y \cdot \color{blue}{\left(x \cdot \left(z \cdot z\right)\right)}}
\] |
associate-*l* [<=]78.5 | \[ \frac{1}{\color{blue}{\left(y \cdot x\right) \cdot \left(z \cdot z\right)}}
\] |
Taylor expanded in y around 0 79.4%
Simplified95.9%
[Start]79.4 | \[ \frac{1}{y \cdot \left({z}^{2} \cdot x\right)}
\] |
|---|---|
*-commutative [=>]79.4 | \[ \frac{1}{\color{blue}{\left({z}^{2} \cdot x\right) \cdot y}}
\] |
unpow2 [=>]79.4 | \[ \frac{1}{\left(\color{blue}{\left(z \cdot z\right)} \cdot x\right) \cdot y}
\] |
*-commutative [=>]79.4 | \[ \frac{1}{\color{blue}{\left(x \cdot \left(z \cdot z\right)\right)} \cdot y}
\] |
associate-*r* [=>]89.3 | \[ \frac{1}{\color{blue}{\left(\left(x \cdot z\right) \cdot z\right)} \cdot y}
\] |
associate-*l* [=>]95.1 | \[ \frac{1}{\color{blue}{\left(x \cdot z\right) \cdot \left(z \cdot y\right)}}
\] |
associate-/r* [=>]95.6 | \[ \color{blue}{\frac{\frac{1}{x \cdot z}}{z \cdot y}}
\] |
associate-/l/ [<=]95.5 | \[ \color{blue}{\frac{\frac{\frac{1}{x \cdot z}}{y}}{z}}
\] |
associate-/l/ [<=]95.9 | \[ \frac{\frac{\color{blue}{\frac{\frac{1}{z}}{x}}}{y}}{z}
\] |
Final simplification97.7%
| Alternative 1 | |
|---|---|
| Accuracy | 97.7% |
| Cost | 13632 |
| Alternative 2 | |
|---|---|
| Accuracy | 97.7% |
| Cost | 7240 |
| Alternative 3 | |
|---|---|
| Accuracy | 97.5% |
| Cost | 968 |
| Alternative 4 | |
|---|---|
| Accuracy | 97.7% |
| Cost | 968 |
| Alternative 5 | |
|---|---|
| Accuracy | 97.7% |
| Cost | 968 |
| Alternative 6 | |
|---|---|
| Accuracy | 96.6% |
| Cost | 840 |
| Alternative 7 | |
|---|---|
| Accuracy | 96.8% |
| Cost | 840 |
| Alternative 8 | |
|---|---|
| Accuracy | 96.9% |
| Cost | 840 |
| Alternative 9 | |
|---|---|
| Accuracy | 88.8% |
| Cost | 836 |
| Alternative 10 | |
|---|---|
| Accuracy | 96.7% |
| Cost | 836 |
| Alternative 11 | |
|---|---|
| Accuracy | 67.8% |
| Cost | 713 |
| Alternative 12 | |
|---|---|
| Accuracy | 67.3% |
| Cost | 712 |
| Alternative 13 | |
|---|---|
| Accuracy | 55.2% |
| Cost | 320 |
herbie shell --seed 2023147
(FPCore (x y z)
:name "Statistics.Distribution.CauchyLorentz:$cdensity from math-functions-0.1.5.2"
:precision binary64
:herbie-target
(if (< (* y (+ 1.0 (* z z))) (- INFINITY)) (/ (/ 1.0 y) (* (+ 1.0 (* z z)) x)) (if (< (* y (+ 1.0 (* z z))) 8.680743250567252e+305) (/ (/ 1.0 x) (* (+ 1.0 (* z z)) y)) (/ (/ 1.0 y) (* (+ 1.0 (* z z)) x))))
(/ (/ 1.0 x) (* y (+ 1.0 (* z z)))))