Average Error: 15.1 → 0.5
Time: 23.3s
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 r75152 = x;
        double r75153 = y;
        double r75154 = z;
        double r75155 = r75153 / r75154;
        double r75156 = t;
        double r75157 = r75155 * r75156;
        double r75158 = r75157 / r75156;
        double r75159 = r75152 * r75158;
        return r75159;
}

double f(double x, double y, double z, double __attribute__((unused)) t) {
        double r75160 = y;
        double r75161 = z;
        double r75162 = r75160 / r75161;
        double r75163 = -1.0819255936363166e+268;
        bool r75164 = r75162 <= r75163;
        double r75165 = -1.636189466711752e-114;
        bool r75166 = r75162 <= r75165;
        double r75167 = 1.3191552743961e-321;
        bool r75168 = r75162 <= r75167;
        double r75169 = !r75168;
        double r75170 = 1.1040494366973089e+252;
        bool r75171 = r75162 <= r75170;
        bool r75172 = r75169 && r75171;
        bool r75173 = r75166 || r75172;
        double r75174 = !r75173;
        bool r75175 = r75164 || r75174;
        double r75176 = x;
        double r75177 = r75176 / r75161;
        double r75178 = r75160 * r75177;
        double r75179 = r75162 * r75176;
        double r75180 = r75175 ? r75178 : r75179;
        return r75180;
}

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 
(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)))