| Alternative 1 | |
|---|---|
| Error | 11.2 |
| Cost | 1097 |
\[\begin{array}{l}
t_0 := \frac{y \cdot y}{z}\\
\mathbf{if}\;t_0 \leq -1 \cdot 10^{+18} \lor \neg \left(t_0 \leq 10^{-75}\right):\\
\;\;\;\;y \cdot \frac{y}{z}\\
\mathbf{else}:\\
\;\;\;\;x\\
\end{array}
\]
(FPCore (x y z) :precision binary64 (+ x (/ (* y y) z)))
(FPCore (x y z) :precision binary64 (fma (/ y z) y x))
double code(double x, double y, double z) {
return x + ((y * y) / z);
}
double code(double x, double y, double z) {
return fma((y / z), y, x);
}
function code(x, y, z) return Float64(x + Float64(Float64(y * y) / z)) end
function code(x, y, z) return fma(Float64(y / z), y, x) end
code[x_, y_, z_] := N[(x + N[(N[(y * y), $MachinePrecision] / z), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_] := N[(N[(y / z), $MachinePrecision] * y + x), $MachinePrecision]
x + \frac{y \cdot y}{z}
\mathsf{fma}\left(\frac{y}{z}, y, x\right)
| Original | 6.6 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
Initial program 6.6
Simplified0.1
[Start]6.6 | \[ x + \frac{y \cdot y}{z}
\] |
|---|---|
+-commutative [=>]6.6 | \[ \color{blue}{\frac{y \cdot y}{z} + x}
\] |
associate-*l/ [<=]0.1 | \[ \color{blue}{\frac{y}{z} \cdot y} + x
\] |
fma-def [=>]0.1 | \[ \color{blue}{\mathsf{fma}\left(\frac{y}{z}, y, x\right)}
\] |
Final simplification0.1
| Alternative 1 | |
|---|---|
| Error | 11.2 |
| Cost | 1097 |
| Alternative 2 | |
|---|---|
| Error | 0.1 |
| Cost | 448 |
| Alternative 3 | |
|---|---|
| Error | 21.0 |
| Cost | 64 |
herbie shell --seed 2023057
(FPCore (x y z)
:name "Crypto.Random.Test:calculate from crypto-random-0.0.9"
:precision binary64
:herbie-target
(+ x (* y (/ y z)))
(+ x (/ (* y y) z)))