
(FPCore (x y z) :precision binary64 (- (+ (+ x y) z) (+ x (+ y z))))
double code(double x, double y, double z) {
return ((x + y) + z) - (x + (y + z));
}
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) - (x + (y + z))
end function
public static double code(double x, double y, double z) {
return ((x + y) + z) - (x + (y + z));
}
def code(x, y, z): return ((x + y) + z) - (x + (y + z))
function code(x, y, z) return Float64(Float64(Float64(x + y) + z) - Float64(x + Float64(y + z))) end
function tmp = code(x, y, z) tmp = ((x + y) + z) - (x + (y + z)); end
code[x_, y_, z_] := N[(N[(N[(x + y), $MachinePrecision] + z), $MachinePrecision] - N[(x + N[(y + z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\left(\left(x + y\right) + z\right) - \left(x + \left(y + z\right)\right)
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 1 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x y z) :precision binary64 (- (+ (+ x y) z) (+ x (+ y z))))
double code(double x, double y, double z) {
return ((x + y) + z) - (x + (y + z));
}
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) - (x + (y + z))
end function
public static double code(double x, double y, double z) {
return ((x + y) + z) - (x + (y + z));
}
def code(x, y, z): return ((x + y) + z) - (x + (y + z))
function code(x, y, z) return Float64(Float64(Float64(x + y) + z) - Float64(x + Float64(y + z))) end
function tmp = code(x, y, z) tmp = ((x + y) + z) - (x + (y + z)); end
code[x_, y_, z_] := N[(N[(N[(x + y), $MachinePrecision] + z), $MachinePrecision] - N[(x + N[(y + z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\left(\left(x + y\right) + z\right) - \left(x + \left(y + z\right)\right)
\end{array}
(FPCore (x y z) :precision binary64 0.0)
double code(double x, double y, double z) {
return 0.0;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = 0.0d0
end function
public static double code(double x, double y, double z) {
return 0.0;
}
def code(x, y, z): return 0.0
function code(x, y, z) return 0.0 end
function tmp = code(x, y, z) tmp = 0.0; end
code[x_, y_, z_] := 0.0
\begin{array}{l}
\\
0
\end{array}
Initial program 100.0%
associate-+r+100.0%
+-commutative100.0%
+-commutative100.0%
+-inverses100.0%
Simplified100.0%
Final simplification100.0%
herbie shell --seed 2024062
(FPCore (x y z)
:name "Commute and associate"
:precision binary64
(- (+ (+ x y) z) (+ x (+ y z))))