(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%
+-commutative
100.0%
+-commutative
100.0%
+-inverses
100.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))))