Average Error: 16.0 → 15.3
Time: 48.5s
Precision: 64
Internal precision: 128
\[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
⬇
\[\begin{array}{l}
\mathbf{if}\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}} \le -1.6242936666275148 \cdot 10^{+39}:\\
\;\;\;\;\left(x + \frac{y \cdot z}{t}\right) \cdot \frac{1}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\\
\mathbf{if}\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}} \le -1.4475800306973208 \cdot 10^{-69}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y}{\frac{t}{b}}}\\
\mathbf{if}\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}} \le 0.0:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y}{\frac{t}{b}}}\\
\mathbf{else}:\\
\;\;\;\;\left(x + \frac{y \cdot z}{t}\right) \cdot \frac{1}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\\
\end{array}\]
Target
| Original | 16.0 |
| Comparison | 13.3 |
| Herbie | 15.3 |
\[ \begin{array}{l}
\mathbf{if}\;t \lt -1.3659085366310088 \cdot 10^{-271}:\\
\;\;\;\;1 \cdot \left(\left(x + \frac{y}{t} \cdot z\right) \cdot \frac{1}{\left(a + 1.0\right) + \frac{y}{t} \cdot b}\right)\\
\mathbf{if}\;t \lt 3.036967103737246 \cdot 10^{-130}:\\
\;\;\;\;\frac{z}{b}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\left(x + \frac{y}{t} \cdot z\right) \cdot \frac{1}{\left(a + 1.0\right) + \frac{y}{t} \cdot b}\right)\\
\end{array} \]
Derivation
- Split input into 3 regimes.
-
if (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < -1.6242936666275148e+39 or 0.0 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t)))
Initial program 8.8
\[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
- Using strategy
rm
Applied div-inv 8.9
\[\leadsto \color{blue}{\left(x + \frac{y \cdot z}{t}\right) \cdot \frac{1}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}}\]
if -1.6242936666275148e+39 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < -1.4475800306973208e-69
Initial program 0.3
\[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
- Using strategy
rm
Applied associate-/l* 3.0
\[\leadsto \frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \color{blue}{\frac{y}{\frac{t}{b}}}}\]
if -1.4475800306973208e-69 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < 0.0
Initial program 29.3
\[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
- Using strategy
rm
Applied associate-/l* 26.6
\[\leadsto \frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \color{blue}{\frac{y}{\frac{t}{b}}}}\]
- Recombined 3 regimes into one program.
- Removed slow pow expressions
Runtime
Please include this information when filing a bug report:
herbie --seed '#(3315119702 2796268412 2600842881 3543422056 3318086707 631567159)'
(FPCore (x y z t a b)
:name "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, B"
:target
(if (< t -1.3659085366310088e-271) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1.0) (* (/ y t) b))))) (if (< t 3.036967103737246e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1.0) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))))