Average Error: 3.0 → 0.1
Time: 6.1s
Precision: binary64
\[x + \frac{y}{1.1283791670955126 \cdot e^{z} - x \cdot y} \]
\[x + \frac{-1}{x + \frac{-1.1283791670955126 \cdot e^{z}}{y}} \]
(FPCore (x y z)
 :precision binary64
 (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))))
(FPCore (x y z)
 :precision binary64
 (+ x (/ -1.0 (+ x (/ (* -1.1283791670955126 (exp z)) y)))))
double code(double x, double y, double z) {
	return x + (y / ((1.1283791670955126 * exp(z)) - (x * y)));
}
double code(double x, double y, double z) {
	return x + (-1.0 / (x + ((-1.1283791670955126 * exp(z)) / y)));
}
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 / ((1.1283791670955126d0 * exp(z)) - (x * y)))
end function
real(8) function code(x, y, z)
    real(8), intent (in) :: x
    real(8), intent (in) :: y
    real(8), intent (in) :: z
    code = x + ((-1.0d0) / (x + (((-1.1283791670955126d0) * exp(z)) / y)))
end function
public static double code(double x, double y, double z) {
	return x + (y / ((1.1283791670955126 * Math.exp(z)) - (x * y)));
}
public static double code(double x, double y, double z) {
	return x + (-1.0 / (x + ((-1.1283791670955126 * Math.exp(z)) / y)));
}
def code(x, y, z):
	return x + (y / ((1.1283791670955126 * math.exp(z)) - (x * y)))
def code(x, y, z):
	return x + (-1.0 / (x + ((-1.1283791670955126 * math.exp(z)) / y)))
function code(x, y, z)
	return Float64(x + Float64(y / Float64(Float64(1.1283791670955126 * exp(z)) - Float64(x * y))))
end
function code(x, y, z)
	return Float64(x + Float64(-1.0 / Float64(x + Float64(Float64(-1.1283791670955126 * exp(z)) / y))))
end
function tmp = code(x, y, z)
	tmp = x + (y / ((1.1283791670955126 * exp(z)) - (x * y)));
end
function tmp = code(x, y, z)
	tmp = x + (-1.0 / (x + ((-1.1283791670955126 * exp(z)) / y)));
end
code[x_, y_, z_] := N[(x + N[(y / N[(N[(1.1283791670955126 * N[Exp[z], $MachinePrecision]), $MachinePrecision] - N[(x * y), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[x_, y_, z_] := N[(x + N[(-1.0 / N[(x + N[(N[(-1.1283791670955126 * N[Exp[z], $MachinePrecision]), $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
x + \frac{y}{1.1283791670955126 \cdot e^{z} - x \cdot y}
x + \frac{-1}{x + \frac{-1.1283791670955126 \cdot e^{z}}{y}}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original3.0
Target0.1
Herbie0.1
\[x + \frac{1}{\frac{1.1283791670955126}{y} \cdot e^{z} - x} \]

Derivation

  1. Initial program 3.0

    \[x + \frac{y}{1.1283791670955126 \cdot e^{z} - x \cdot y} \]
  2. Simplified0.1

    \[\leadsto \color{blue}{x + \frac{-1}{\mathsf{fma}\left(-1.1283791670955126, \frac{e^{z}}{y}, x\right)}} \]
  3. Applied egg-rr0.4

    \[\leadsto \color{blue}{\mathsf{fma}\left({\left(\sqrt[3]{\frac{-1}{\mathsf{fma}\left(-1.1283791670955126, \frac{e^{z}}{y}, x\right)}}\right)}^{2}, \sqrt[3]{\frac{-1}{\mathsf{fma}\left(-1.1283791670955126, \frac{e^{z}}{y}, x\right)}}, x\right)} \]
  4. Taylor expanded in z around inf 0.1

    \[\leadsto \color{blue}{x - \frac{1}{x - 1.1283791670955126 \cdot \frac{e^{z}}{y}}} \]
  5. Simplified0.1

    \[\leadsto \color{blue}{x + \frac{-1}{x + \frac{-1.1283791670955126 \cdot e^{z}}{y}}} \]
  6. Final simplification0.1

    \[\leadsto x + \frac{-1}{x + \frac{-1.1283791670955126 \cdot e^{z}}{y}} \]

Reproduce

herbie shell --seed 2022162 
(FPCore (x y z)
  :name "Numeric.SpecFunctions:invErfc from math-functions-0.1.5.2, A"
  :precision binary64

  :herbie-target
  (+ x (/ 1.0 (- (* (/ 1.1283791670955126 y) (exp z)) x)))

  (+ x (/ y (- (* 1.1283791670955126 (exp z)) (* x y)))))