?

Average Accuracy: 84.2% → 99.8%
Time: 7.3s
Precision: binary64
Cost: 7112

?

\[\frac{x + y \cdot \left(z - x\right)}{z} \]
\[\begin{array}{l} \mathbf{if}\;y \leq -2.8 \cdot 10^{+26}:\\ \;\;\;\;\frac{y}{\frac{z}{z - x}}\\ \mathbf{elif}\;y \leq 5.2 \cdot 10^{+15}:\\ \;\;\;\;\frac{\mathsf{fma}\left(y, z - x, x\right)}{z}\\ \mathbf{else}:\\ \;\;\;\;y \cdot \frac{z - x}{z}\\ \end{array} \]
(FPCore (x y z) :precision binary64 (/ (+ x (* y (- z x))) z))
(FPCore (x y z)
 :precision binary64
 (if (<= y -2.8e+26)
   (/ y (/ z (- z x)))
   (if (<= y 5.2e+15) (/ (fma y (- z x) x) z) (* y (/ (- z x) z)))))
double code(double x, double y, double z) {
	return (x + (y * (z - x))) / z;
}
double code(double x, double y, double z) {
	double tmp;
	if (y <= -2.8e+26) {
		tmp = y / (z / (z - x));
	} else if (y <= 5.2e+15) {
		tmp = fma(y, (z - x), x) / z;
	} else {
		tmp = y * ((z - x) / z);
	}
	return tmp;
}
function code(x, y, z)
	return Float64(Float64(x + Float64(y * Float64(z - x))) / z)
end
function code(x, y, z)
	tmp = 0.0
	if (y <= -2.8e+26)
		tmp = Float64(y / Float64(z / Float64(z - x)));
	elseif (y <= 5.2e+15)
		tmp = Float64(fma(y, Float64(z - x), x) / z);
	else
		tmp = Float64(y * Float64(Float64(z - x) / z));
	end
	return tmp
end
code[x_, y_, z_] := N[(N[(x + N[(y * N[(z - x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / z), $MachinePrecision]
code[x_, y_, z_] := If[LessEqual[y, -2.8e+26], N[(y / N[(z / N[(z - x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[y, 5.2e+15], N[(N[(y * N[(z - x), $MachinePrecision] + x), $MachinePrecision] / z), $MachinePrecision], N[(y * N[(N[(z - x), $MachinePrecision] / z), $MachinePrecision]), $MachinePrecision]]]
\frac{x + y \cdot \left(z - x\right)}{z}
\begin{array}{l}
\mathbf{if}\;y \leq -2.8 \cdot 10^{+26}:\\
\;\;\;\;\frac{y}{\frac{z}{z - x}}\\

\mathbf{elif}\;y \leq 5.2 \cdot 10^{+15}:\\
\;\;\;\;\frac{\mathsf{fma}\left(y, z - x, x\right)}{z}\\

\mathbf{else}:\\
\;\;\;\;y \cdot \frac{z - x}{z}\\


\end{array}

Error?

Target

Original84.2%
Target99.9%
Herbie99.8%
\[\left(y + \frac{x}{z}\right) - \frac{y}{\frac{z}{x}} \]

Derivation?

  1. Split input into 3 regimes
  2. if y < -2.8e26

    1. Initial program 61.4%

      \[\frac{x + y \cdot \left(z - x\right)}{z} \]
    2. Taylor expanded in y around inf 61.4%

      \[\leadsto \color{blue}{\frac{y \cdot \left(z - x\right)}{z}} \]
    3. Simplified99.9%

      \[\leadsto \color{blue}{\frac{y}{\frac{z}{z - x}}} \]
      Proof

      [Start]61.4

      \[ \frac{y \cdot \left(z - x\right)}{z} \]

      associate-/l* [=>]99.9

      \[ \color{blue}{\frac{y}{\frac{z}{z - x}}} \]

    if -2.8e26 < y < 5.2e15

    1. Initial program 99.8%

      \[\frac{x + y \cdot \left(z - x\right)}{z} \]
    2. Simplified99.8%

      \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(y, z - x, x\right)}{z}} \]
      Proof

      [Start]99.8

      \[ \frac{x + y \cdot \left(z - x\right)}{z} \]

      +-commutative [=>]99.8

      \[ \frac{\color{blue}{y \cdot \left(z - x\right) + x}}{z} \]

      fma-def [=>]99.8

      \[ \frac{\color{blue}{\mathsf{fma}\left(y, z - x, x\right)}}{z} \]

    if 5.2e15 < y

    1. Initial program 63.4%

      \[\frac{x + y \cdot \left(z - x\right)}{z} \]
    2. Simplified63.4%

      \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(y, z - x, x\right)}{z}} \]
      Proof

      [Start]63.4

      \[ \frac{x + y \cdot \left(z - x\right)}{z} \]

      +-commutative [=>]63.4

      \[ \frac{\color{blue}{y \cdot \left(z - x\right) + x}}{z} \]

      fma-def [=>]63.4

      \[ \frac{\color{blue}{\mathsf{fma}\left(y, z - x, x\right)}}{z} \]
    3. Taylor expanded in y around inf 63.4%

      \[\leadsto \color{blue}{\frac{y \cdot \left(z - x\right)}{z}} \]
    4. Simplified99.9%

      \[\leadsto \color{blue}{y \cdot \frac{z - x}{z}} \]
      Proof

      [Start]63.4

      \[ \frac{y \cdot \left(z - x\right)}{z} \]

      *-rgt-identity [<=]63.4

      \[ \frac{y \cdot \color{blue}{\left(\left(z - x\right) \cdot 1\right)}}{z} \]

      associate-*r/ [<=]99.9

      \[ \color{blue}{y \cdot \frac{\left(z - x\right) \cdot 1}{z}} \]

      *-rgt-identity [=>]99.9

      \[ y \cdot \frac{\color{blue}{z - x}}{z} \]
  3. Recombined 3 regimes into one program.
  4. Final simplification99.8%

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \leq -2.8 \cdot 10^{+26}:\\ \;\;\;\;\frac{y}{\frac{z}{z - x}}\\ \mathbf{elif}\;y \leq 5.2 \cdot 10^{+15}:\\ \;\;\;\;\frac{\mathsf{fma}\left(y, z - x, x\right)}{z}\\ \mathbf{else}:\\ \;\;\;\;y \cdot \frac{z - x}{z}\\ \end{array} \]

Alternatives

Alternative 1
Accuracy99.8%
Cost840
\[\begin{array}{l} \mathbf{if}\;y \leq -2 \cdot 10^{+27}:\\ \;\;\;\;\frac{y}{\frac{z}{z - x}}\\ \mathbf{elif}\;y \leq 1.65 \cdot 10^{+15}:\\ \;\;\;\;\frac{x + y \cdot \left(z - x\right)}{z}\\ \mathbf{else}:\\ \;\;\;\;y \cdot \frac{z - x}{z}\\ \end{array} \]
Alternative 2
Accuracy99.1%
Cost713
\[\begin{array}{l} \mathbf{if}\;y \leq -1 \lor \neg \left(y \leq 1\right):\\ \;\;\;\;y \cdot \frac{z - x}{z}\\ \mathbf{else}:\\ \;\;\;\;y + \frac{x}{z}\\ \end{array} \]
Alternative 3
Accuracy99.1%
Cost712
\[\begin{array}{l} \mathbf{if}\;y \leq -1:\\ \;\;\;\;\frac{y}{\frac{z}{z - x}}\\ \mathbf{elif}\;y \leq 1:\\ \;\;\;\;y + \frac{x}{z}\\ \mathbf{else}:\\ \;\;\;\;y \cdot \frac{z - x}{z}\\ \end{array} \]
Alternative 4
Accuracy68.9%
Cost456
\[\begin{array}{l} \mathbf{if}\;y \leq -1.65 \cdot 10^{-25}:\\ \;\;\;\;y\\ \mathbf{elif}\;y \leq 1.95 \cdot 10^{-28}:\\ \;\;\;\;\frac{x}{z}\\ \mathbf{else}:\\ \;\;\;\;y\\ \end{array} \]
Alternative 5
Accuracy86.4%
Cost320
\[y + \frac{x}{z} \]
Alternative 6
Accuracy51.3%
Cost64
\[y \]

Error

Reproduce?

herbie shell --seed 2023130 
(FPCore (x y z)
  :name "Diagrams.Backend.Rasterific:rasterificRadialGradient from diagrams-rasterific-1.3.1.3"
  :precision binary64

  :herbie-target
  (- (+ y (/ x z)) (/ y (/ z x)))

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