Average Error: 14.6 → 0.3
Time: 9.3s
Precision: 64
\[x \cdot \frac{\frac{y}{z} \cdot t}{t}\]
\[\begin{array}{l} \mathbf{if}\;\frac{y}{z} \le -8.744938221735624394086083700588160422165 \cdot 10^{247}:\\ \;\;\;\;\frac{1}{\frac{\frac{z}{x}}{y}}\\ \mathbf{elif}\;\frac{y}{z} \le -4.90887845624400356201079550409662195503 \cdot 10^{-234}:\\ \;\;\;\;x \cdot \frac{y}{z}\\ \mathbf{elif}\;\frac{y}{z} \le 6.890799872238725235555987506188972971533 \cdot 10^{-284} \lor \neg \left(\frac{y}{z} \le 4.844168314129915218649001510512659703992 \cdot 10^{193}\right):\\ \;\;\;\;\frac{x}{z} \cdot y\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{\frac{z}{y}}\\ \end{array}\]
x \cdot \frac{\frac{y}{z} \cdot t}{t}
\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -8.744938221735624394086083700588160422165 \cdot 10^{247}:\\
\;\;\;\;\frac{1}{\frac{\frac{z}{x}}{y}}\\

\mathbf{elif}\;\frac{y}{z} \le -4.90887845624400356201079550409662195503 \cdot 10^{-234}:\\
\;\;\;\;x \cdot \frac{y}{z}\\

\mathbf{elif}\;\frac{y}{z} \le 6.890799872238725235555987506188972971533 \cdot 10^{-284} \lor \neg \left(\frac{y}{z} \le 4.844168314129915218649001510512659703992 \cdot 10^{193}\right):\\
\;\;\;\;\frac{x}{z} \cdot y\\

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

\end{array}
double f(double x, double y, double z, double t) {
        double r74970 = x;
        double r74971 = y;
        double r74972 = z;
        double r74973 = r74971 / r74972;
        double r74974 = t;
        double r74975 = r74973 * r74974;
        double r74976 = r74975 / r74974;
        double r74977 = r74970 * r74976;
        return r74977;
}

double f(double x, double y, double z, double __attribute__((unused)) t) {
        double r74978 = y;
        double r74979 = z;
        double r74980 = r74978 / r74979;
        double r74981 = -8.744938221735624e+247;
        bool r74982 = r74980 <= r74981;
        double r74983 = 1.0;
        double r74984 = x;
        double r74985 = r74979 / r74984;
        double r74986 = r74985 / r74978;
        double r74987 = r74983 / r74986;
        double r74988 = -4.9088784562440036e-234;
        bool r74989 = r74980 <= r74988;
        double r74990 = r74984 * r74980;
        double r74991 = 6.890799872238725e-284;
        bool r74992 = r74980 <= r74991;
        double r74993 = 4.844168314129915e+193;
        bool r74994 = r74980 <= r74993;
        double r74995 = !r74994;
        bool r74996 = r74992 || r74995;
        double r74997 = r74984 / r74979;
        double r74998 = r74997 * r74978;
        double r74999 = r74979 / r74978;
        double r75000 = r74984 / r74999;
        double r75001 = r74996 ? r74998 : r75000;
        double r75002 = r74989 ? r74990 : r75001;
        double r75003 = r74982 ? r74987 : r75002;
        return r75003;
}

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 4 regimes
  2. if (/ y z) < -8.744938221735624e+247

    1. Initial program 47.7

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

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

      \[\leadsto \color{blue}{\frac{1}{\frac{z}{x \cdot y}}}\]
    5. Simplified0.4

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

    if -8.744938221735624e+247 < (/ y z) < -4.9088784562440036e-234

    1. Initial program 9.2

      \[x \cdot \frac{\frac{y}{z} \cdot t}{t}\]
    2. Simplified8.7

      \[\leadsto \color{blue}{\frac{x \cdot y}{z}}\]
    3. Using strategy rm
    4. Applied *-un-lft-identity8.7

      \[\leadsto \frac{x \cdot y}{\color{blue}{1 \cdot z}}\]
    5. Applied times-frac0.2

      \[\leadsto \color{blue}{\frac{x}{1} \cdot \frac{y}{z}}\]
    6. Simplified0.2

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

    if -4.9088784562440036e-234 < (/ y z) < 6.890799872238725e-284 or 4.844168314129915e+193 < (/ y z)

    1. Initial program 23.8

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

      \[\leadsto \color{blue}{\frac{x \cdot y}{z}}\]
    3. Using strategy rm
    4. Applied associate-/l*17.2

      \[\leadsto \color{blue}{\frac{x}{\frac{z}{y}}}\]
    5. Using strategy rm
    6. Applied *-un-lft-identity17.2

      \[\leadsto \frac{x}{\frac{z}{\color{blue}{1 \cdot y}}}\]
    7. Applied *-un-lft-identity17.2

      \[\leadsto \frac{x}{\frac{\color{blue}{1 \cdot z}}{1 \cdot y}}\]
    8. Applied times-frac17.2

      \[\leadsto \frac{x}{\color{blue}{\frac{1}{1} \cdot \frac{z}{y}}}\]
    9. Applied *-un-lft-identity17.2

      \[\leadsto \frac{\color{blue}{1 \cdot x}}{\frac{1}{1} \cdot \frac{z}{y}}\]
    10. Applied times-frac17.2

      \[\leadsto \color{blue}{\frac{1}{\frac{1}{1}} \cdot \frac{x}{\frac{z}{y}}}\]
    11. Simplified17.2

      \[\leadsto \color{blue}{1} \cdot \frac{x}{\frac{z}{y}}\]
    12. Simplified0.6

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

    if 6.890799872238725e-284 < (/ y z) < 4.844168314129915e+193

    1. Initial program 8.4

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

      \[\leadsto \color{blue}{\frac{x \cdot y}{z}}\]
    3. Using strategy rm
    4. Applied associate-/l*0.2

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{y}{z} \le -8.744938221735624394086083700588160422165 \cdot 10^{247}:\\ \;\;\;\;\frac{1}{\frac{\frac{z}{x}}{y}}\\ \mathbf{elif}\;\frac{y}{z} \le -4.90887845624400356201079550409662195503 \cdot 10^{-234}:\\ \;\;\;\;x \cdot \frac{y}{z}\\ \mathbf{elif}\;\frac{y}{z} \le 6.890799872238725235555987506188972971533 \cdot 10^{-284} \lor \neg \left(\frac{y}{z} \le 4.844168314129915218649001510512659703992 \cdot 10^{193}\right):\\ \;\;\;\;\frac{x}{z} \cdot y\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{\frac{z}{y}}\\ \end{array}\]

Reproduce

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