(FPCore (x y z t) :precision binary64 (+ (- x (/ y (* z 3.0))) (/ t (* (* z 3.0) y))))
(FPCore (x y z t) :precision binary64 (+ (* (/ 0.3333333333333333 y) (/ t z)) (fma (/ y z) -0.3333333333333333 x)))
double code(double x, double y, double z, double t) {
return (x - (y / (z * 3.0))) + (t / ((z * 3.0) * y));
}
double code(double x, double y, double z, double t) {
return ((0.3333333333333333 / y) * (t / z)) + fma((y / z), -0.3333333333333333, x);
}
function code(x, y, z, t) return Float64(Float64(x - Float64(y / Float64(z * 3.0))) + Float64(t / Float64(Float64(z * 3.0) * y))) end
function code(x, y, z, t) return Float64(Float64(Float64(0.3333333333333333 / y) * Float64(t / z)) + fma(Float64(y / z), -0.3333333333333333, x)) end
code[x_, y_, z_, t_] := N[(N[(x - N[(y / N[(z * 3.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(t / N[(N[(z * 3.0), $MachinePrecision] * y), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_, t_] := N[(N[(N[(0.3333333333333333 / y), $MachinePrecision] * N[(t / z), $MachinePrecision]), $MachinePrecision] + N[(N[(y / z), $MachinePrecision] * -0.3333333333333333 + x), $MachinePrecision]), $MachinePrecision]
\left(x - \frac{y}{z \cdot 3}\right) + \frac{t}{\left(z \cdot 3\right) \cdot y}
\frac{0.3333333333333333}{y} \cdot \frac{t}{z} + \mathsf{fma}\left(\frac{y}{z}, -0.3333333333333333, x\right)




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 3.8 |
|---|---|
| Target | 1.6 |
| Herbie | 1.7 |
Initial program 3.8
Simplified4.1
Taylor expanded in z around 0 3.9
Applied *-un-lft-identity_binary643.9
Applied times-frac_binary641.7
Applied associate-*r*_binary641.7
Simplified1.7
Applied associate--l+_binary641.7
Simplified1.7
Final simplification1.7
herbie shell --seed 2022131
(FPCore (x y z t)
:name "Diagrams.Solve.Polynomial:cubForm from diagrams-solve-0.1, H"
:precision binary64
:herbie-target
(+ (- x (/ y (* z 3.0))) (/ (/ t (* z 3.0)) y))
(+ (- x (/ y (* z 3.0))) (/ t (* (* z 3.0) y))))