Average Error: 14.7 → 6.1
Time: 17.6s
Precision: 64
\[x \cdot \frac{\frac{y}{z} \cdot t}{t}\]
\[\begin{array}{l} \mathbf{if}\;y \le -5.712724816744529850925972205775323703178 \cdot 10^{-123}:\\ \;\;\;\;\frac{x}{\frac{z}{y}}\\ \mathbf{elif}\;y \le -1.168603474015212790183272956439621994755 \cdot 10^{-303}:\\ \;\;\;\;\frac{x \cdot y}{z}\\ \mathbf{elif}\;y \le 8.882114101454010031137990055112593171153 \cdot 10^{-160}:\\ \;\;\;\;\frac{x}{\frac{z}{y}}\\ \mathbf{elif}\;y \le 3.615896835308014810814059323846397252145 \cdot 10^{145}:\\ \;\;\;\;\frac{x}{z} \cdot y\\ \mathbf{elif}\;y \le 2.420727102112022088190803134520153686566 \cdot 10^{244}:\\ \;\;\;\;\frac{x \cdot y}{z}\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{z} \cdot y\\ \end{array}\]
x \cdot \frac{\frac{y}{z} \cdot t}{t}
\begin{array}{l}
\mathbf{if}\;y \le -5.712724816744529850925972205775323703178 \cdot 10^{-123}:\\
\;\;\;\;\frac{x}{\frac{z}{y}}\\

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

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

\mathbf{elif}\;y \le 3.615896835308014810814059323846397252145 \cdot 10^{145}:\\
\;\;\;\;\frac{x}{z} \cdot y\\

\mathbf{elif}\;y \le 2.420727102112022088190803134520153686566 \cdot 10^{244}:\\
\;\;\;\;\frac{x \cdot y}{z}\\

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

\end{array}
double f(double x, double y, double z, double t) {
        double r3761596 = x;
        double r3761597 = y;
        double r3761598 = z;
        double r3761599 = r3761597 / r3761598;
        double r3761600 = t;
        double r3761601 = r3761599 * r3761600;
        double r3761602 = r3761601 / r3761600;
        double r3761603 = r3761596 * r3761602;
        return r3761603;
}

double f(double x, double y, double z, double __attribute__((unused)) t) {
        double r3761604 = y;
        double r3761605 = -5.71272481674453e-123;
        bool r3761606 = r3761604 <= r3761605;
        double r3761607 = x;
        double r3761608 = z;
        double r3761609 = r3761608 / r3761604;
        double r3761610 = r3761607 / r3761609;
        double r3761611 = -1.1686034740152128e-303;
        bool r3761612 = r3761604 <= r3761611;
        double r3761613 = r3761607 * r3761604;
        double r3761614 = r3761613 / r3761608;
        double r3761615 = 8.88211410145401e-160;
        bool r3761616 = r3761604 <= r3761615;
        double r3761617 = 3.615896835308015e+145;
        bool r3761618 = r3761604 <= r3761617;
        double r3761619 = r3761607 / r3761608;
        double r3761620 = r3761619 * r3761604;
        double r3761621 = 2.420727102112022e+244;
        bool r3761622 = r3761604 <= r3761621;
        double r3761623 = r3761622 ? r3761614 : r3761620;
        double r3761624 = r3761618 ? r3761620 : r3761623;
        double r3761625 = r3761616 ? r3761610 : r3761624;
        double r3761626 = r3761612 ? r3761614 : r3761625;
        double r3761627 = r3761606 ? r3761610 : r3761626;
        return r3761627;
}

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 3 regimes
  2. if y < -5.71272481674453e-123 or -1.1686034740152128e-303 < y < 8.88211410145401e-160

    1. Initial program 14.8

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

      \[\leadsto \color{blue}{y \cdot \frac{x}{z}}\]
    3. Taylor expanded around 0 6.4

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

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

    if -5.71272481674453e-123 < y < -1.1686034740152128e-303 or 3.615896835308015e+145 < y < 2.420727102112022e+244

    1. Initial program 14.8

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

      \[\leadsto \color{blue}{y \cdot \frac{x}{z}}\]
    3. Taylor expanded around 0 7.9

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

    if 8.88211410145401e-160 < y < 3.615896835308015e+145 or 2.420727102112022e+244 < y

    1. Initial program 14.4

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -5.712724816744529850925972205775323703178 \cdot 10^{-123}:\\ \;\;\;\;\frac{x}{\frac{z}{y}}\\ \mathbf{elif}\;y \le -1.168603474015212790183272956439621994755 \cdot 10^{-303}:\\ \;\;\;\;\frac{x \cdot y}{z}\\ \mathbf{elif}\;y \le 8.882114101454010031137990055112593171153 \cdot 10^{-160}:\\ \;\;\;\;\frac{x}{\frac{z}{y}}\\ \mathbf{elif}\;y \le 3.615896835308014810814059323846397252145 \cdot 10^{145}:\\ \;\;\;\;\frac{x}{z} \cdot y\\ \mathbf{elif}\;y \le 2.420727102112022088190803134520153686566 \cdot 10^{244}:\\ \;\;\;\;\frac{x \cdot y}{z}\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{z} \cdot y\\ \end{array}\]

Reproduce

herbie shell --seed 2019171 +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)))