Average Error: 9.0 → 0.1
Time: 5.2s
Precision: binary64
Cost: 1032
\[\frac{x \cdot \left(\frac{x}{y} + 1\right)}{x + 1}\]
\[\begin{array}{l} \mathbf{if}\;x \leq -7952346188264682 \lor \neg \left(x \leq 18038856771156356\right):\\ \;\;\;\;\left(1 + \frac{x}{y}\right) - \frac{1}{y}\\ \mathbf{else}:\\ \;\;\;\;\frac{x \cdot \left(1 + \frac{x}{y}\right)}{x + 1}\\ \end{array}\]
\frac{x \cdot \left(\frac{x}{y} + 1\right)}{x + 1}
\begin{array}{l}
\mathbf{if}\;x \leq -7952346188264682 \lor \neg \left(x \leq 18038856771156356\right):\\
\;\;\;\;\left(1 + \frac{x}{y}\right) - \frac{1}{y}\\

\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \left(1 + \frac{x}{y}\right)}{x + 1}\\

\end{array}
(FPCore (x y) :precision binary64 (/ (* x (+ (/ x y) 1.0)) (+ x 1.0)))
(FPCore (x y)
 :precision binary64
 (if (or (<= x -7952346188264682.0) (not (<= x 18038856771156356.0)))
   (- (+ 1.0 (/ x y)) (/ 1.0 y))
   (/ (* x (+ 1.0 (/ x y))) (+ x 1.0))))
double code(double x, double y) {
	return (x * ((x / y) + 1.0)) / (x + 1.0);
}
double code(double x, double y) {
	double tmp;
	if ((x <= -7952346188264682.0) || !(x <= 18038856771156356.0)) {
		tmp = (1.0 + (x / y)) - (1.0 / y);
	} else {
		tmp = (x * (1.0 + (x / y))) / (x + 1.0);
	}
	return tmp;
}

Error

Bits error versus x

Bits error versus y

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original9.0
Target0.1
Herbie0.1
\[\frac{x}{1} \cdot \frac{\frac{x}{y} + 1}{x + 1}\]

Alternatives

Alternative 1
Error0.1
Cost704
\[\frac{x}{\frac{x + 1}{1 + \frac{x}{y}}}\]
Alternative 2
Error1.3
Cost904
\[\begin{array}{l} \mathbf{if}\;x \leq -0.991934794965992 \lor \neg \left(x \leq 1.014357054030111\right):\\ \;\;\;\;\left(1 + \frac{x}{y}\right) - \frac{1}{y}\\ \mathbf{else}:\\ \;\;\;\;x \cdot \left(\left(1 + \frac{x}{y}\right) - x\right)\\ \end{array}\]
Alternative 3
Error10.6
Cost1860
\[\begin{array}{l} \mathbf{if}\;x \leq -597.6030678285383:\\ \;\;\;\;\left(1 + \frac{x}{y}\right) - \frac{1}{y}\\ \mathbf{elif}\;x \leq -1.0295610893626198 \cdot 10^{-60}:\\ \;\;\;\;\frac{x \cdot \frac{x}{y}}{x + 1}\\ \mathbf{elif}\;x \leq 1.4399126304675303 \cdot 10^{-80}:\\ \;\;\;\;\frac{x}{x + 1}\\ \mathbf{elif}\;x \leq 158386.34533262133:\\ \;\;\;\;\frac{x \cdot \frac{x}{y}}{x + 1}\\ \mathbf{else}:\\ \;\;\;\;\left(1 + \frac{x}{y}\right) - \frac{1}{y}\\ \end{array}\]
Alternative 4
Error19.2
Cost2246
\[\begin{array}{l} \mathbf{if}\;x \leq -2.4403932394529697 \cdot 10^{+41}:\\ \;\;\;\;\frac{x}{y}\\ \mathbf{elif}\;x \leq -0.04016317804899341:\\ \;\;\;\;\frac{x}{x + 1}\\ \mathbf{elif}\;x \leq -1.6199191312617614 \cdot 10^{-60}:\\ \;\;\;\;\frac{x \cdot \frac{x}{y}}{x + 1}\\ \mathbf{elif}\;x \leq 5.939446886285342 \cdot 10^{-81}:\\ \;\;\;\;\frac{x}{x + 1}\\ \mathbf{elif}\;x \leq 20869172.314364895:\\ \;\;\;\;\frac{x \cdot \frac{x}{y}}{x + 1}\\ \mathbf{elif}\;x \leq 3.9891505567841346 \cdot 10^{+38}:\\ \;\;\;\;\frac{x}{x + 1}\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{y}\\ \end{array}\]
Alternative 5
Error18.2
Cost648
\[\begin{array}{l} \mathbf{if}\;x \leq -6.262569945783233 \cdot 10^{+40} \lor \neg \left(x \leq 4.117331579372527 \cdot 10^{+38}\right):\\ \;\;\;\;\frac{x}{y}\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{x + 1}\\ \end{array}\]
Alternative 6
Error19.0
Cost1797
\[\begin{array}{l} \mathbf{if}\;x \leq -4.366235517293269 \cdot 10^{+43}:\\ \;\;\;\;\frac{x}{y}\\ \mathbf{elif}\;x \leq -1.332808735854901 \cdot 10^{+26}:\\ \;\;\;\;1\\ \mathbf{elif}\;x \leq -0.991934794965992:\\ \;\;\;\;\frac{x}{y}\\ \mathbf{elif}\;x \leq 9.110571079681053:\\ \;\;\;\;x\\ \mathbf{elif}\;x \leq 4.373693624549313 \cdot 10^{+38}:\\ \;\;\;\;1\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{y}\\ \end{array}\]
Alternative 7
Error27.6
Cost706
\[\begin{array}{l} \mathbf{if}\;x \leq -0.991934794965992:\\ \;\;\;\;1\\ \mathbf{elif}\;x \leq 9.110571079681053:\\ \;\;\;\;x\\ \mathbf{else}:\\ \;\;\;\;1\\ \end{array}\]
Alternative 8
Error53.5
Cost64
\[1\]

Error

Derivation

  1. Split input into 2 regimes
  2. if x < -7952346188264682 or 18038856771156356 < x

    1. Initial program 22.6

      \[\frac{x \cdot \left(\frac{x}{y} + 1\right)}{x + 1}\]
    2. Taylor expanded around inf 0.0

      \[\leadsto \color{blue}{\left(1 + \frac{x}{y}\right) - \frac{1}{y}}\]
    3. Simplified0.0

      \[\leadsto \color{blue}{\left(\frac{x}{y} + 1\right) - \frac{1}{y}}\]
    4. Simplified0.0

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

    if -7952346188264682 < x < 18038856771156356

    1. Initial program 0.1

      \[\frac{x \cdot \left(\frac{x}{y} + 1\right)}{x + 1}\]
    2. Simplified0.1

      \[\leadsto \color{blue}{\frac{x \cdot \left(1 + \frac{x}{y}\right)}{1 + x}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \leq -7952346188264682 \lor \neg \left(x \leq 18038856771156356\right):\\ \;\;\;\;\left(1 + \frac{x}{y}\right) - \frac{1}{y}\\ \mathbf{else}:\\ \;\;\;\;\frac{x \cdot \left(1 + \frac{x}{y}\right)}{x + 1}\\ \end{array}\]

Reproduce

herbie shell --seed 2021044 
(FPCore (x y)
  :name "Codec.Picture.Types:toneMapping from JuicyPixels-3.2.6.1"
  :precision binary64

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

  (/ (* x (+ (/ x y) 1.0)) (+ x 1.0)))