Kahan p13 Example 3

Percentage Accurate: 100.0% → 100.0%
Time: 12.8s
Alternatives: 6
Speedup: 1.7×

Specification

?
\[\begin{array}{l} \\ \begin{array}{l} t_1 := 2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\\ 1 - \frac{1}{2 + t\_1 \cdot t\_1} \end{array} \end{array} \]
(FPCore (t)
 :precision binary64
 (let* ((t_1 (- 2.0 (/ (/ 2.0 t) (+ 1.0 (/ 1.0 t))))))
   (- 1.0 (/ 1.0 (+ 2.0 (* t_1 t_1))))))
double code(double t) {
	double t_1 = 2.0 - ((2.0 / t) / (1.0 + (1.0 / t)));
	return 1.0 - (1.0 / (2.0 + (t_1 * t_1)));
}
real(8) function code(t)
    real(8), intent (in) :: t
    real(8) :: t_1
    t_1 = 2.0d0 - ((2.0d0 / t) / (1.0d0 + (1.0d0 / t)))
    code = 1.0d0 - (1.0d0 / (2.0d0 + (t_1 * t_1)))
end function
public static double code(double t) {
	double t_1 = 2.0 - ((2.0 / t) / (1.0 + (1.0 / t)));
	return 1.0 - (1.0 / (2.0 + (t_1 * t_1)));
}
def code(t):
	t_1 = 2.0 - ((2.0 / t) / (1.0 + (1.0 / t)))
	return 1.0 - (1.0 / (2.0 + (t_1 * t_1)))
function code(t)
	t_1 = Float64(2.0 - Float64(Float64(2.0 / t) / Float64(1.0 + Float64(1.0 / t))))
	return Float64(1.0 - Float64(1.0 / Float64(2.0 + Float64(t_1 * t_1))))
end
function tmp = code(t)
	t_1 = 2.0 - ((2.0 / t) / (1.0 + (1.0 / t)));
	tmp = 1.0 - (1.0 / (2.0 + (t_1 * t_1)));
end
code[t_] := Block[{t$95$1 = N[(2.0 - N[(N[(2.0 / t), $MachinePrecision] / N[(1.0 + N[(1.0 / t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(1.0 - N[(1.0 / N[(2.0 + N[(t$95$1 * t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}

\\
\begin{array}{l}
t_1 := 2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\\
1 - \frac{1}{2 + t\_1 \cdot t\_1}
\end{array}
\end{array}

Sampling outcomes in binary64 precision:

Local Percentage Accuracy vs ?

The average percentage accuracy by input value. Horizontal axis shows value of an input variable; the variable is choosen in the title. Vertical axis is accuracy; higher is better. Red represent the original program, while blue represents Herbie's suggestion. These can be toggled with buttons below the plot. The line is an average while dots represent individual samples.

Accuracy vs Speed?

Herbie found 6 alternatives:

AlternativeAccuracySpeedup
The accuracy (vertical axis) and speed (horizontal axis) of each alternatives. Up and to the right is better. The red square shows the initial program, and each blue circle shows an alternative.The line shows the best available speed-accuracy tradeoffs.

Initial Program: 100.0% accurate, 1.0× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_1 := 2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\\ 1 - \frac{1}{2 + t\_1 \cdot t\_1} \end{array} \end{array} \]
(FPCore (t)
 :precision binary64
 (let* ((t_1 (- 2.0 (/ (/ 2.0 t) (+ 1.0 (/ 1.0 t))))))
   (- 1.0 (/ 1.0 (+ 2.0 (* t_1 t_1))))))
double code(double t) {
	double t_1 = 2.0 - ((2.0 / t) / (1.0 + (1.0 / t)));
	return 1.0 - (1.0 / (2.0 + (t_1 * t_1)));
}
real(8) function code(t)
    real(8), intent (in) :: t
    real(8) :: t_1
    t_1 = 2.0d0 - ((2.0d0 / t) / (1.0d0 + (1.0d0 / t)))
    code = 1.0d0 - (1.0d0 / (2.0d0 + (t_1 * t_1)))
end function
public static double code(double t) {
	double t_1 = 2.0 - ((2.0 / t) / (1.0 + (1.0 / t)));
	return 1.0 - (1.0 / (2.0 + (t_1 * t_1)));
}
def code(t):
	t_1 = 2.0 - ((2.0 / t) / (1.0 + (1.0 / t)))
	return 1.0 - (1.0 / (2.0 + (t_1 * t_1)))
function code(t)
	t_1 = Float64(2.0 - Float64(Float64(2.0 / t) / Float64(1.0 + Float64(1.0 / t))))
	return Float64(1.0 - Float64(1.0 / Float64(2.0 + Float64(t_1 * t_1))))
end
function tmp = code(t)
	t_1 = 2.0 - ((2.0 / t) / (1.0 + (1.0 / t)));
	tmp = 1.0 - (1.0 / (2.0 + (t_1 * t_1)));
end
code[t_] := Block[{t$95$1 = N[(2.0 - N[(N[(2.0 / t), $MachinePrecision] / N[(1.0 + N[(1.0 / t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(1.0 - N[(1.0 / N[(2.0 + N[(t$95$1 * t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}

\\
\begin{array}{l}
t_1 := 2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\\
1 - \frac{1}{2 + t\_1 \cdot t\_1}
\end{array}
\end{array}

Alternative 1: 100.0% accurate, 0.9× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_1 := \frac{-2}{1 + t}\\ 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(1 + t\right) \cdot \left(-1 - t\right)}}{2 - t\_1} \cdot \left(2 + t\_1\right)} \end{array} \end{array} \]
(FPCore (t)
 :precision binary64
 (let* ((t_1 (/ -2.0 (+ 1.0 t))))
   (-
    1.0
    (/
     1.0
     (+
      2.0
      (*
       (/ (- 4.0 (/ -4.0 (* (+ 1.0 t) (- -1.0 t)))) (- 2.0 t_1))
       (+ 2.0 t_1)))))))
double code(double t) {
	double t_1 = -2.0 / (1.0 + t);
	return 1.0 - (1.0 / (2.0 + (((4.0 - (-4.0 / ((1.0 + t) * (-1.0 - t)))) / (2.0 - t_1)) * (2.0 + t_1))));
}
real(8) function code(t)
    real(8), intent (in) :: t
    real(8) :: t_1
    t_1 = (-2.0d0) / (1.0d0 + t)
    code = 1.0d0 - (1.0d0 / (2.0d0 + (((4.0d0 - ((-4.0d0) / ((1.0d0 + t) * ((-1.0d0) - t)))) / (2.0d0 - t_1)) * (2.0d0 + t_1))))
end function
public static double code(double t) {
	double t_1 = -2.0 / (1.0 + t);
	return 1.0 - (1.0 / (2.0 + (((4.0 - (-4.0 / ((1.0 + t) * (-1.0 - t)))) / (2.0 - t_1)) * (2.0 + t_1))));
}
def code(t):
	t_1 = -2.0 / (1.0 + t)
	return 1.0 - (1.0 / (2.0 + (((4.0 - (-4.0 / ((1.0 + t) * (-1.0 - t)))) / (2.0 - t_1)) * (2.0 + t_1))))
function code(t)
	t_1 = Float64(-2.0 / Float64(1.0 + t))
	return Float64(1.0 - Float64(1.0 / Float64(2.0 + Float64(Float64(Float64(4.0 - Float64(-4.0 / Float64(Float64(1.0 + t) * Float64(-1.0 - t)))) / Float64(2.0 - t_1)) * Float64(2.0 + t_1)))))
end
function tmp = code(t)
	t_1 = -2.0 / (1.0 + t);
	tmp = 1.0 - (1.0 / (2.0 + (((4.0 - (-4.0 / ((1.0 + t) * (-1.0 - t)))) / (2.0 - t_1)) * (2.0 + t_1))));
end
code[t_] := Block[{t$95$1 = N[(-2.0 / N[(1.0 + t), $MachinePrecision]), $MachinePrecision]}, N[(1.0 - N[(1.0 / N[(2.0 + N[(N[(N[(4.0 - N[(-4.0 / N[(N[(1.0 + t), $MachinePrecision] * N[(-1.0 - t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(2.0 - t$95$1), $MachinePrecision]), $MachinePrecision] * N[(2.0 + t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}

\\
\begin{array}{l}
t_1 := \frac{-2}{1 + t}\\
1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(1 + t\right) \cdot \left(-1 - t\right)}}{2 - t\_1} \cdot \left(2 + t\_1\right)}
\end{array}
\end{array}
Derivation
  1. Initial program 100.0%

    \[1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. sub-neg100.0%

      \[\leadsto 1 - \frac{1}{2 + \color{blue}{\left(2 + \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)\right)} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    2. flip-+100.0%

      \[\leadsto 1 - \frac{1}{2 + \color{blue}{\frac{2 \cdot 2 - \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)}{2 - \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    3. metadata-eval100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{\color{blue}{4} - \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)}{2 - \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    4. associate-/l/100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \left(-\color{blue}{\frac{2}{\left(1 + \frac{1}{t}\right) \cdot t}}\right) \cdot \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)}{2 - \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    5. distribute-neg-frac100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \color{blue}{\frac{-2}{\left(1 + \frac{1}{t}\right) \cdot t}} \cdot \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)}{2 - \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    6. metadata-eval100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{\color{blue}{-2}}{\left(1 + \frac{1}{t}\right) \cdot t} \cdot \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)}{2 - \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    7. *-commutative100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-2}{\color{blue}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)}{2 - \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    8. associate-/l/100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)} \cdot \left(-\color{blue}{\frac{2}{\left(1 + \frac{1}{t}\right) \cdot t}}\right)}{2 - \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    9. distribute-neg-frac100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)} \cdot \color{blue}{\frac{-2}{\left(1 + \frac{1}{t}\right) \cdot t}}}{2 - \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    10. metadata-eval100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)} \cdot \frac{\color{blue}{-2}}{\left(1 + \frac{1}{t}\right) \cdot t}}{2 - \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    11. *-commutative100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)} \cdot \frac{-2}{\color{blue}{t \cdot \left(1 + \frac{1}{t}\right)}}}{2 - \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    12. associate-/l/100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)} \cdot \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}}{2 - \left(-\color{blue}{\frac{2}{\left(1 + \frac{1}{t}\right) \cdot t}}\right)} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    13. distribute-neg-frac100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)} \cdot \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}}{2 - \color{blue}{\frac{-2}{\left(1 + \frac{1}{t}\right) \cdot t}}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
  4. Applied egg-rr100.0%

    \[\leadsto 1 - \frac{1}{2 + \color{blue}{\frac{4 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)} \cdot \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
  5. Step-by-step derivation
    1. frac-2neg100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)} \cdot \color{blue}{\frac{--2}{-t \cdot \left(1 + \frac{1}{t}\right)}}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    2. metadata-eval100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)} \cdot \frac{\color{blue}{2}}{-t \cdot \left(1 + \frac{1}{t}\right)}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    3. frac-times100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \color{blue}{\frac{-2 \cdot 2}{\left(t \cdot \left(1 + \frac{1}{t}\right)\right) \cdot \left(-t \cdot \left(1 + \frac{1}{t}\right)\right)}}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    4. metadata-eval100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{\color{blue}{-4}}{\left(t \cdot \left(1 + \frac{1}{t}\right)\right) \cdot \left(-t \cdot \left(1 + \frac{1}{t}\right)\right)}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    5. distribute-rgt-in100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\color{blue}{\left(1 \cdot t + \frac{1}{t} \cdot t\right)} \cdot \left(-t \cdot \left(1 + \frac{1}{t}\right)\right)}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    6. *-un-lft-identity100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(\color{blue}{t} + \frac{1}{t} \cdot t\right) \cdot \left(-t \cdot \left(1 + \frac{1}{t}\right)\right)}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    7. inv-pow100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + \color{blue}{{t}^{-1}} \cdot t\right) \cdot \left(-t \cdot \left(1 + \frac{1}{t}\right)\right)}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    8. pow-plus100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + \color{blue}{{t}^{\left(-1 + 1\right)}}\right) \cdot \left(-t \cdot \left(1 + \frac{1}{t}\right)\right)}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    9. metadata-eval100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + {t}^{\color{blue}{0}}\right) \cdot \left(-t \cdot \left(1 + \frac{1}{t}\right)\right)}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    10. metadata-eval100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + \color{blue}{1}\right) \cdot \left(-t \cdot \left(1 + \frac{1}{t}\right)\right)}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    11. distribute-rgt-in100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\color{blue}{\left(1 \cdot t + \frac{1}{t} \cdot t\right)}\right)}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    12. *-un-lft-identity100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(\color{blue}{t} + \frac{1}{t} \cdot t\right)\right)}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    13. inv-pow100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + \color{blue}{{t}^{-1}} \cdot t\right)\right)}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    14. pow-plus100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + \color{blue}{{t}^{\left(-1 + 1\right)}}\right)\right)}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    15. metadata-eval100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + {t}^{\color{blue}{0}}\right)\right)}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
    16. metadata-eval100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + \color{blue}{1}\right)\right)}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
  6. Applied egg-rr100.0%

    \[\leadsto 1 - \frac{1}{2 + \frac{4 - \color{blue}{\frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + 1\right)\right)}}}{2 - \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
  7. Taylor expanded in t around 0 100.0%

    \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + 1\right)\right)}}{2 - \frac{-2}{\color{blue}{1 + t}}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
  8. Step-by-step derivation
    1. +-commutative100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + 1\right)\right)}}{2 - \frac{-2}{\color{blue}{t + 1}}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
  9. Simplified100.0%

    \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + 1\right)\right)}}{2 - \frac{-2}{\color{blue}{t + 1}}} \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
  10. Step-by-step derivation
    1. sub-neg100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + 1\right)\right)}}{2 - \frac{-2}{t + 1}} \cdot \color{blue}{\left(2 + \left(-\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)\right)}} \]
    2. associate-/l/100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + 1\right)\right)}}{2 - \frac{-2}{t + 1}} \cdot \left(2 + \left(-\color{blue}{\frac{2}{\left(1 + \frac{1}{t}\right) \cdot t}}\right)\right)} \]
    3. distribute-neg-frac100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + 1\right)\right)}}{2 - \frac{-2}{t + 1}} \cdot \left(2 + \color{blue}{\frac{-2}{\left(1 + \frac{1}{t}\right) \cdot t}}\right)} \]
    4. metadata-eval100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + 1\right)\right)}}{2 - \frac{-2}{t + 1}} \cdot \left(2 + \frac{\color{blue}{-2}}{\left(1 + \frac{1}{t}\right) \cdot t}\right)} \]
    5. *-commutative100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + 1\right)\right)}}{2 - \frac{-2}{t + 1}} \cdot \left(2 + \frac{-2}{\color{blue}{t \cdot \left(1 + \frac{1}{t}\right)}}\right)} \]
  11. Applied egg-rr100.0%

    \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + 1\right)\right)}}{2 - \frac{-2}{t + 1}} \cdot \color{blue}{\left(2 + \frac{-2}{t \cdot \left(1 + \frac{1}{t}\right)}\right)}} \]
  12. Step-by-step derivation
    1. distribute-lft-in100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + 1\right)\right)}}{2 - \frac{-2}{t + 1}} \cdot \left(2 + \frac{-2}{\color{blue}{t \cdot 1 + t \cdot \frac{1}{t}}}\right)} \]
    2. rgt-mult-inverse100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + 1\right)\right)}}{2 - \frac{-2}{t + 1}} \cdot \left(2 + \frac{-2}{t \cdot 1 + \color{blue}{1}}\right)} \]
    3. *-rgt-identity100.0%

      \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + 1\right)\right)}}{2 - \frac{-2}{t + 1}} \cdot \left(2 + \frac{-2}{\color{blue}{t} + 1}\right)} \]
  13. Simplified100.0%

    \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(t + 1\right) \cdot \left(-\left(t + 1\right)\right)}}{2 - \frac{-2}{t + 1}} \cdot \color{blue}{\left(2 + \frac{-2}{t + 1}\right)}} \]
  14. Final simplification100.0%

    \[\leadsto 1 - \frac{1}{2 + \frac{4 - \frac{-4}{\left(1 + t\right) \cdot \left(-1 - t\right)}}{2 - \frac{-2}{1 + t}} \cdot \left(2 + \frac{-2}{1 + t}\right)} \]
  15. Add Preprocessing

Alternative 2: 100.0% accurate, 1.4× speedup?

\[\begin{array}{l} \\ \begin{array}{l} t_1 := 2 - \frac{2}{1 + t}\\ 1 + \frac{-1}{2 + t\_1 \cdot t\_1} \end{array} \end{array} \]
(FPCore (t)
 :precision binary64
 (let* ((t_1 (- 2.0 (/ 2.0 (+ 1.0 t))))) (+ 1.0 (/ -1.0 (+ 2.0 (* t_1 t_1))))))
double code(double t) {
	double t_1 = 2.0 - (2.0 / (1.0 + t));
	return 1.0 + (-1.0 / (2.0 + (t_1 * t_1)));
}
real(8) function code(t)
    real(8), intent (in) :: t
    real(8) :: t_1
    t_1 = 2.0d0 - (2.0d0 / (1.0d0 + t))
    code = 1.0d0 + ((-1.0d0) / (2.0d0 + (t_1 * t_1)))
end function
public static double code(double t) {
	double t_1 = 2.0 - (2.0 / (1.0 + t));
	return 1.0 + (-1.0 / (2.0 + (t_1 * t_1)));
}
def code(t):
	t_1 = 2.0 - (2.0 / (1.0 + t))
	return 1.0 + (-1.0 / (2.0 + (t_1 * t_1)))
function code(t)
	t_1 = Float64(2.0 - Float64(2.0 / Float64(1.0 + t)))
	return Float64(1.0 + Float64(-1.0 / Float64(2.0 + Float64(t_1 * t_1))))
end
function tmp = code(t)
	t_1 = 2.0 - (2.0 / (1.0 + t));
	tmp = 1.0 + (-1.0 / (2.0 + (t_1 * t_1)));
end
code[t_] := Block[{t$95$1 = N[(2.0 - N[(2.0 / N[(1.0 + t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(1.0 + N[(-1.0 / N[(2.0 + N[(t$95$1 * t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}

\\
\begin{array}{l}
t_1 := 2 - \frac{2}{1 + t}\\
1 + \frac{-1}{2 + t\_1 \cdot t\_1}
\end{array}
\end{array}
Derivation
  1. Initial program 100.0%

    \[1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
  2. Add Preprocessing
  3. Step-by-step derivation
    1. expm1-log1p-u100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)\right)}\right)} \]
    2. expm1-udef100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \color{blue}{\left(e^{\mathsf{log1p}\left(\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} - 1\right)}\right)} \]
    3. associate-/l/100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \left(e^{\mathsf{log1p}\left(\color{blue}{\frac{2}{\left(1 + \frac{1}{t}\right) \cdot t}}\right)} - 1\right)\right)} \]
    4. *-commutative100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \left(e^{\mathsf{log1p}\left(\frac{2}{\color{blue}{t \cdot \left(1 + \frac{1}{t}\right)}}\right)} - 1\right)\right)} \]
  4. Applied egg-rr100.0%

    \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \color{blue}{\left(e^{\mathsf{log1p}\left(\frac{2}{t \cdot \left(1 + \frac{1}{t}\right)}\right)} - 1\right)}\right)} \]
  5. Step-by-step derivation
    1. expm1-def100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{2}{t \cdot \left(1 + \frac{1}{t}\right)}\right)\right)}\right)} \]
    2. expm1-log1p100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \color{blue}{\frac{2}{t \cdot \left(1 + \frac{1}{t}\right)}}\right)} \]
    3. distribute-lft-in100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{2}{\color{blue}{t \cdot 1 + t \cdot \frac{1}{t}}}\right)} \]
    4. rgt-mult-inverse100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{2}{t \cdot 1 + \color{blue}{1}}\right)} \]
    5. *-rgt-identity100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{2}{\color{blue}{t} + 1}\right)} \]
  6. Simplified100.0%

    \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \color{blue}{\frac{2}{t + 1}}\right)} \]
  7. Step-by-step derivation
    1. expm1-log1p-u100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)\right)}\right)} \]
    2. expm1-udef100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \color{blue}{\left(e^{\mathsf{log1p}\left(\frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} - 1\right)}\right)} \]
    3. associate-/l/100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \left(e^{\mathsf{log1p}\left(\color{blue}{\frac{2}{\left(1 + \frac{1}{t}\right) \cdot t}}\right)} - 1\right)\right)} \]
    4. *-commutative100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \left(e^{\mathsf{log1p}\left(\frac{2}{\color{blue}{t \cdot \left(1 + \frac{1}{t}\right)}}\right)} - 1\right)\right)} \]
  8. Applied egg-rr100.0%

    \[\leadsto 1 - \frac{1}{2 + \left(2 - \color{blue}{\left(e^{\mathsf{log1p}\left(\frac{2}{t \cdot \left(1 + \frac{1}{t}\right)}\right)} - 1\right)}\right) \cdot \left(2 - \frac{2}{t + 1}\right)} \]
  9. Step-by-step derivation
    1. expm1-def100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{2}{t \cdot \left(1 + \frac{1}{t}\right)}\right)\right)}\right)} \]
    2. expm1-log1p100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \color{blue}{\frac{2}{t \cdot \left(1 + \frac{1}{t}\right)}}\right)} \]
    3. distribute-lft-in100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{2}{\color{blue}{t \cdot 1 + t \cdot \frac{1}{t}}}\right)} \]
    4. rgt-mult-inverse100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{2}{t \cdot 1 + \color{blue}{1}}\right)} \]
    5. *-rgt-identity100.0%

      \[\leadsto 1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{2}{\color{blue}{t} + 1}\right)} \]
  10. Simplified100.0%

    \[\leadsto 1 - \frac{1}{2 + \left(2 - \color{blue}{\frac{2}{t + 1}}\right) \cdot \left(2 - \frac{2}{t + 1}\right)} \]
  11. Final simplification100.0%

    \[\leadsto 1 + \frac{-1}{2 + \left(2 - \frac{2}{1 + t}\right) \cdot \left(2 - \frac{2}{1 + t}\right)} \]
  12. Add Preprocessing

Alternative 3: 100.0% accurate, 1.7× speedup?

\[\begin{array}{l} \\ 1 + \frac{-1}{6 + \frac{8 + \frac{-4}{1 + t}}{-1 - t}} \end{array} \]
(FPCore (t)
 :precision binary64
 (+ 1.0 (/ -1.0 (+ 6.0 (/ (+ 8.0 (/ -4.0 (+ 1.0 t))) (- -1.0 t))))))
double code(double t) {
	return 1.0 + (-1.0 / (6.0 + ((8.0 + (-4.0 / (1.0 + t))) / (-1.0 - t))));
}
real(8) function code(t)
    real(8), intent (in) :: t
    code = 1.0d0 + ((-1.0d0) / (6.0d0 + ((8.0d0 + ((-4.0d0) / (1.0d0 + t))) / ((-1.0d0) - t))))
end function
public static double code(double t) {
	return 1.0 + (-1.0 / (6.0 + ((8.0 + (-4.0 / (1.0 + t))) / (-1.0 - t))));
}
def code(t):
	return 1.0 + (-1.0 / (6.0 + ((8.0 + (-4.0 / (1.0 + t))) / (-1.0 - t))))
function code(t)
	return Float64(1.0 + Float64(-1.0 / Float64(6.0 + Float64(Float64(8.0 + Float64(-4.0 / Float64(1.0 + t))) / Float64(-1.0 - t)))))
end
function tmp = code(t)
	tmp = 1.0 + (-1.0 / (6.0 + ((8.0 + (-4.0 / (1.0 + t))) / (-1.0 - t))));
end
code[t_] := N[(1.0 + N[(-1.0 / N[(6.0 + N[(N[(8.0 + N[(-4.0 / N[(1.0 + t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(-1.0 - t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
1 + \frac{-1}{6 + \frac{8 + \frac{-4}{1 + t}}{-1 - t}}
\end{array}
Derivation
  1. Initial program 100.0%

    \[1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
  2. Simplified100.0%

    \[\leadsto \color{blue}{1 + \frac{-1}{6 + \frac{2}{1 + t} \cdot \left(\frac{2}{1 + t} + -4\right)}} \]
  3. Add Preprocessing
  4. Step-by-step derivation
    1. associate-*l/100.0%

      \[\leadsto 1 + \frac{-1}{6 + \color{blue}{\frac{2 \cdot \left(\frac{2}{1 + t} + -4\right)}{1 + t}}} \]
    2. frac-2neg100.0%

      \[\leadsto 1 + \frac{-1}{6 + \color{blue}{\frac{-2 \cdot \left(\frac{2}{1 + t} + -4\right)}{-\left(1 + t\right)}}} \]
    3. +-commutative100.0%

      \[\leadsto 1 + \frac{-1}{6 + \frac{-2 \cdot \color{blue}{\left(-4 + \frac{2}{1 + t}\right)}}{-\left(1 + t\right)}} \]
    4. distribute-lft-in100.0%

      \[\leadsto 1 + \frac{-1}{6 + \frac{-\color{blue}{\left(2 \cdot -4 + 2 \cdot \frac{2}{1 + t}\right)}}{-\left(1 + t\right)}} \]
    5. metadata-eval100.0%

      \[\leadsto 1 + \frac{-1}{6 + \frac{-\left(\color{blue}{-8} + 2 \cdot \frac{2}{1 + t}\right)}{-\left(1 + t\right)}} \]
    6. distribute-neg-in100.0%

      \[\leadsto 1 + \frac{-1}{6 + \frac{-\left(-8 + 2 \cdot \frac{2}{1 + t}\right)}{\color{blue}{\left(-1\right) + \left(-t\right)}}} \]
    7. metadata-eval100.0%

      \[\leadsto 1 + \frac{-1}{6 + \frac{-\left(-8 + 2 \cdot \frac{2}{1 + t}\right)}{\color{blue}{-1} + \left(-t\right)}} \]
  5. Applied egg-rr100.0%

    \[\leadsto 1 + \frac{-1}{6 + \color{blue}{\frac{-\left(-8 + 2 \cdot \frac{2}{1 + t}\right)}{-1 + \left(-t\right)}}} \]
  6. Step-by-step derivation
    1. distribute-neg-in100.0%

      \[\leadsto 1 + \frac{-1}{6 + \frac{\color{blue}{\left(--8\right) + \left(-2 \cdot \frac{2}{1 + t}\right)}}{-1 + \left(-t\right)}} \]
    2. metadata-eval100.0%

      \[\leadsto 1 + \frac{-1}{6 + \frac{\color{blue}{8} + \left(-2 \cdot \frac{2}{1 + t}\right)}{-1 + \left(-t\right)}} \]
    3. associate-*r/100.0%

      \[\leadsto 1 + \frac{-1}{6 + \frac{8 + \left(-\color{blue}{\frac{2 \cdot 2}{1 + t}}\right)}{-1 + \left(-t\right)}} \]
    4. metadata-eval100.0%

      \[\leadsto 1 + \frac{-1}{6 + \frac{8 + \left(-\frac{\color{blue}{4}}{1 + t}\right)}{-1 + \left(-t\right)}} \]
    5. distribute-neg-frac100.0%

      \[\leadsto 1 + \frac{-1}{6 + \frac{8 + \color{blue}{\frac{-4}{1 + t}}}{-1 + \left(-t\right)}} \]
    6. metadata-eval100.0%

      \[\leadsto 1 + \frac{-1}{6 + \frac{8 + \frac{\color{blue}{-4}}{1 + t}}{-1 + \left(-t\right)}} \]
    7. +-commutative100.0%

      \[\leadsto 1 + \frac{-1}{6 + \frac{8 + \frac{-4}{\color{blue}{t + 1}}}{-1 + \left(-t\right)}} \]
    8. unsub-neg100.0%

      \[\leadsto 1 + \frac{-1}{6 + \frac{8 + \frac{-4}{t + 1}}{\color{blue}{-1 - t}}} \]
  7. Simplified100.0%

    \[\leadsto 1 + \frac{-1}{6 + \color{blue}{\frac{8 + \frac{-4}{t + 1}}{-1 - t}}} \]
  8. Final simplification100.0%

    \[\leadsto 1 + \frac{-1}{6 + \frac{8 + \frac{-4}{1 + t}}{-1 - t}} \]
  9. Add Preprocessing

Alternative 4: 49.9% accurate, 5.8× speedup?

\[\begin{array}{l} \\ 0.8333333333333334 - \frac{0.2222222222222222}{t} \end{array} \]
(FPCore (t)
 :precision binary64
 (- 0.8333333333333334 (/ 0.2222222222222222 t)))
double code(double t) {
	return 0.8333333333333334 - (0.2222222222222222 / t);
}
real(8) function code(t)
    real(8), intent (in) :: t
    code = 0.8333333333333334d0 - (0.2222222222222222d0 / t)
end function
public static double code(double t) {
	return 0.8333333333333334 - (0.2222222222222222 / t);
}
def code(t):
	return 0.8333333333333334 - (0.2222222222222222 / t)
function code(t)
	return Float64(0.8333333333333334 - Float64(0.2222222222222222 / t))
end
function tmp = code(t)
	tmp = 0.8333333333333334 - (0.2222222222222222 / t);
end
code[t_] := N[(0.8333333333333334 - N[(0.2222222222222222 / t), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}

\\
0.8333333333333334 - \frac{0.2222222222222222}{t}
\end{array}
Derivation
  1. Initial program 100.0%

    \[1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
  2. Simplified100.0%

    \[\leadsto \color{blue}{1 + \frac{-1}{6 + \frac{2}{1 + t} \cdot \left(\frac{2}{1 + t} + -4\right)}} \]
  3. Add Preprocessing
  4. Taylor expanded in t around inf 51.4%

    \[\leadsto \color{blue}{0.8333333333333334 - 0.2222222222222222 \cdot \frac{1}{t}} \]
  5. Step-by-step derivation
    1. associate-*r/51.4%

      \[\leadsto 0.8333333333333334 - \color{blue}{\frac{0.2222222222222222 \cdot 1}{t}} \]
    2. metadata-eval51.4%

      \[\leadsto 0.8333333333333334 - \frac{\color{blue}{0.2222222222222222}}{t} \]
  6. Simplified51.4%

    \[\leadsto \color{blue}{0.8333333333333334 - \frac{0.2222222222222222}{t}} \]
  7. Final simplification51.4%

    \[\leadsto 0.8333333333333334 - \frac{0.2222222222222222}{t} \]
  8. Add Preprocessing

Alternative 5: 60.3% accurate, 29.0× speedup?

\[\begin{array}{l} \\ 0.5 \end{array} \]
(FPCore (t) :precision binary64 0.5)
double code(double t) {
	return 0.5;
}
real(8) function code(t)
    real(8), intent (in) :: t
    code = 0.5d0
end function
public static double code(double t) {
	return 0.5;
}
def code(t):
	return 0.5
function code(t)
	return 0.5
end
function tmp = code(t)
	tmp = 0.5;
end
code[t_] := 0.5
\begin{array}{l}

\\
0.5
\end{array}
Derivation
  1. Initial program 100.0%

    \[1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
  2. Simplified100.0%

    \[\leadsto \color{blue}{1 + \frac{-1}{6 + \frac{2}{1 + t} \cdot \left(\frac{2}{1 + t} + -4\right)}} \]
  3. Add Preprocessing
  4. Taylor expanded in t around 0 59.2%

    \[\leadsto \color{blue}{0.5} \]
  5. Final simplification59.2%

    \[\leadsto 0.5 \]
  6. Add Preprocessing

Alternative 6: 57.8% accurate, 29.0× speedup?

\[\begin{array}{l} \\ 0.8333333333333334 \end{array} \]
(FPCore (t) :precision binary64 0.8333333333333334)
double code(double t) {
	return 0.8333333333333334;
}
real(8) function code(t)
    real(8), intent (in) :: t
    code = 0.8333333333333334d0
end function
public static double code(double t) {
	return 0.8333333333333334;
}
def code(t):
	return 0.8333333333333334
function code(t)
	return 0.8333333333333334
end
function tmp = code(t)
	tmp = 0.8333333333333334;
end
code[t_] := 0.8333333333333334
\begin{array}{l}

\\
0.8333333333333334
\end{array}
Derivation
  1. Initial program 100.0%

    \[1 - \frac{1}{2 + \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right) \cdot \left(2 - \frac{\frac{2}{t}}{1 + \frac{1}{t}}\right)} \]
  2. Simplified100.0%

    \[\leadsto \color{blue}{1 + \frac{-1}{6 + \frac{2}{1 + t} \cdot \left(\frac{2}{1 + t} + -4\right)}} \]
  3. Add Preprocessing
  4. Taylor expanded in t around inf 59.0%

    \[\leadsto \color{blue}{0.8333333333333334} \]
  5. Final simplification59.0%

    \[\leadsto 0.8333333333333334 \]
  6. Add Preprocessing

Reproduce

?
herbie shell --seed 2024033 
(FPCore (t)
  :name "Kahan p13 Example 3"
  :precision binary64
  (- 1.0 (/ 1.0 (+ 2.0 (* (- 2.0 (/ (/ 2.0 t) (+ 1.0 (/ 1.0 t)))) (- 2.0 (/ (/ 2.0 t) (+ 1.0 (/ 1.0 t)))))))))