Average Error: 15.1 → 0.5
Time: 23.6s
Precision: 64
\[x \cdot \frac{\frac{y}{z} \cdot t}{t}\]
\[\begin{array}{l} \mathbf{if}\;\frac{y}{z} \le -1.081925593636316638624250852721330734754 \cdot 10^{268} \lor \neg \left(\frac{y}{z} \le -1.636189466711752142567162663177727587498 \cdot 10^{-114} \lor \neg \left(\frac{y}{z} \le 1.319155274396128272951438676958151064215 \cdot 10^{-321}\right) \land \frac{y}{z} \le 1.104049436697308873782781562368572098325 \cdot 10^{252}\right):\\ \;\;\;\;y \cdot \frac{x}{z}\\ \mathbf{else}:\\ \;\;\;\;\frac{y}{z} \cdot x\\ \end{array}\]
x \cdot \frac{\frac{y}{z} \cdot t}{t}
\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -1.081925593636316638624250852721330734754 \cdot 10^{268} \lor \neg \left(\frac{y}{z} \le -1.636189466711752142567162663177727587498 \cdot 10^{-114} \lor \neg \left(\frac{y}{z} \le 1.319155274396128272951438676958151064215 \cdot 10^{-321}\right) \land \frac{y}{z} \le 1.104049436697308873782781562368572098325 \cdot 10^{252}\right):\\
\;\;\;\;y \cdot \frac{x}{z}\\

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

\end{array}
double f(double x, double y, double z, double t) {
        double r86540 = x;
        double r86541 = y;
        double r86542 = z;
        double r86543 = r86541 / r86542;
        double r86544 = t;
        double r86545 = r86543 * r86544;
        double r86546 = r86545 / r86544;
        double r86547 = r86540 * r86546;
        return r86547;
}

double f(double x, double y, double z, double __attribute__((unused)) t) {
        double r86548 = y;
        double r86549 = z;
        double r86550 = r86548 / r86549;
        double r86551 = -1.0819255936363166e+268;
        bool r86552 = r86550 <= r86551;
        double r86553 = -1.636189466711752e-114;
        bool r86554 = r86550 <= r86553;
        double r86555 = 1.3191552743961e-321;
        bool r86556 = r86550 <= r86555;
        double r86557 = !r86556;
        double r86558 = 1.1040494366973089e+252;
        bool r86559 = r86550 <= r86558;
        bool r86560 = r86557 && r86559;
        bool r86561 = r86554 || r86560;
        double r86562 = !r86561;
        bool r86563 = r86552 || r86562;
        double r86564 = x;
        double r86565 = r86564 / r86549;
        double r86566 = r86548 * r86565;
        double r86567 = r86550 * r86564;
        double r86568 = r86563 ? r86566 : r86567;
        return r86568;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 2 regimes
  2. if (/ y z) < -1.0819255936363166e+268 or -1.636189466711752e-114 < (/ y z) < 1.3191552743961e-321 or 1.1040494366973089e+252 < (/ y z)

    1. Initial program 25.2

      \[x \cdot \frac{\frac{y}{z} \cdot t}{t}\]
    2. Simplified17.6

      \[\leadsto \color{blue}{\frac{y}{z} \cdot x}\]
    3. Using strategy rm
    4. Applied div-inv17.6

      \[\leadsto \color{blue}{\left(y \cdot \frac{1}{z}\right)} \cdot x\]
    5. Applied associate-*l*1.1

      \[\leadsto \color{blue}{y \cdot \left(\frac{1}{z} \cdot x\right)}\]
    6. Simplified1.0

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

    if -1.0819255936363166e+268 < (/ y z) < -1.636189466711752e-114 or 1.3191552743961e-321 < (/ y z) < 1.1040494366973089e+252

    1. Initial program 9.8

      \[x \cdot \frac{\frac{y}{z} \cdot t}{t}\]
    2. Simplified0.3

      \[\leadsto \color{blue}{\frac{y}{z} \cdot x}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{y}{z} \le -1.081925593636316638624250852721330734754 \cdot 10^{268} \lor \neg \left(\frac{y}{z} \le -1.636189466711752142567162663177727587498 \cdot 10^{-114} \lor \neg \left(\frac{y}{z} \le 1.319155274396128272951438676958151064215 \cdot 10^{-321}\right) \land \frac{y}{z} \le 1.104049436697308873782781562368572098325 \cdot 10^{252}\right):\\ \;\;\;\;y \cdot \frac{x}{z}\\ \mathbf{else}:\\ \;\;\;\;\frac{y}{z} \cdot x\\ \end{array}\]

Reproduce

herbie shell --seed 2019347 +o rules:numerics
(FPCore (x y z t)
  :name "Graphics.Rendering.Chart.Backend.Diagrams:calcFontMetrics from Chart-diagrams-1.5.1"
  :precision binary64
  (* x (/ (* (/ y z) t) t)))