Average Error: 11.1 → 7.3
Time: 1.9s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -8.86452261856546459 \cdot 10^{62}:\\ \;\;\;\;a1 \cdot \frac{a2}{b1 \cdot b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -1.4672356117320064 \cdot 10^{-254}:\\ \;\;\;\;\frac{1}{\frac{b1}{\frac{a1 \cdot a2}{b2}}}\\ \mathbf{elif}\;a1 \cdot a2 \le 6.0955568267489453 \cdot 10^{-107}:\\ \;\;\;\;a1 \cdot \frac{a2}{b1 \cdot b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 3.3074354815251371 \cdot 10^{202}:\\ \;\;\;\;\frac{1}{\frac{b1}{\frac{a1 \cdot a2}{b2}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1 \cdot \frac{b2}{a2}}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -8.86452261856546459 \cdot 10^{62}:\\
\;\;\;\;a1 \cdot \frac{a2}{b1 \cdot b2}\\

\mathbf{elif}\;a1 \cdot a2 \le -1.4672356117320064 \cdot 10^{-254}:\\
\;\;\;\;\frac{1}{\frac{b1}{\frac{a1 \cdot a2}{b2}}}\\

\mathbf{elif}\;a1 \cdot a2 \le 6.0955568267489453 \cdot 10^{-107}:\\
\;\;\;\;a1 \cdot \frac{a2}{b1 \cdot b2}\\

\mathbf{elif}\;a1 \cdot a2 \le 3.3074354815251371 \cdot 10^{202}:\\
\;\;\;\;\frac{1}{\frac{b1}{\frac{a1 \cdot a2}{b2}}}\\

\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1 \cdot \frac{b2}{a2}}\\

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r147818 = a1;
        double r147819 = a2;
        double r147820 = r147818 * r147819;
        double r147821 = b1;
        double r147822 = b2;
        double r147823 = r147821 * r147822;
        double r147824 = r147820 / r147823;
        return r147824;
}

double f(double a1, double a2, double b1, double b2) {
        double r147825 = a1;
        double r147826 = a2;
        double r147827 = r147825 * r147826;
        double r147828 = -8.864522618565465e+62;
        bool r147829 = r147827 <= r147828;
        double r147830 = b1;
        double r147831 = b2;
        double r147832 = r147830 * r147831;
        double r147833 = r147826 / r147832;
        double r147834 = r147825 * r147833;
        double r147835 = -1.4672356117320064e-254;
        bool r147836 = r147827 <= r147835;
        double r147837 = 1.0;
        double r147838 = r147827 / r147831;
        double r147839 = r147830 / r147838;
        double r147840 = r147837 / r147839;
        double r147841 = 6.095556826748945e-107;
        bool r147842 = r147827 <= r147841;
        double r147843 = 3.307435481525137e+202;
        bool r147844 = r147827 <= r147843;
        double r147845 = r147831 / r147826;
        double r147846 = r147830 * r147845;
        double r147847 = r147825 / r147846;
        double r147848 = r147844 ? r147840 : r147847;
        double r147849 = r147842 ? r147834 : r147848;
        double r147850 = r147836 ? r147840 : r147849;
        double r147851 = r147829 ? r147834 : r147850;
        return r147851;
}

Error

Bits error versus a1

Bits error versus a2

Bits error versus b1

Bits error versus b2

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original11.1
Target11.7
Herbie7.3
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 3 regimes
  2. if (* a1 a2) < -8.864522618565465e+62 or -1.4672356117320064e-254 < (* a1 a2) < 6.095556826748945e-107

    1. Initial program 14.8

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Using strategy rm
    3. Applied associate-/l*9.9

      \[\leadsto \color{blue}{\frac{a1}{\frac{b1 \cdot b2}{a2}}}\]
    4. Using strategy rm
    5. Applied div-inv10.1

      \[\leadsto \color{blue}{a1 \cdot \frac{1}{\frac{b1 \cdot b2}{a2}}}\]
    6. Simplified9.9

      \[\leadsto a1 \cdot \color{blue}{\frac{a2}{b1 \cdot b2}}\]

    if -8.864522618565465e+62 < (* a1 a2) < -1.4672356117320064e-254 or 6.095556826748945e-107 < (* a1 a2) < 3.307435481525137e+202

    1. Initial program 4.2

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Using strategy rm
    3. Applied clear-num4.5

      \[\leadsto \color{blue}{\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}}\]
    4. Using strategy rm
    5. Applied associate-/l*4.4

      \[\leadsto \frac{1}{\color{blue}{\frac{b1}{\frac{a1 \cdot a2}{b2}}}}\]

    if 3.307435481525137e+202 < (* a1 a2)

    1. Initial program 34.1

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Using strategy rm
    3. Applied associate-/l*17.7

      \[\leadsto \color{blue}{\frac{a1}{\frac{b1 \cdot b2}{a2}}}\]
    4. Using strategy rm
    5. Applied *-un-lft-identity17.7

      \[\leadsto \frac{a1}{\frac{b1 \cdot b2}{\color{blue}{1 \cdot a2}}}\]
    6. Applied times-frac10.1

      \[\leadsto \frac{a1}{\color{blue}{\frac{b1}{1} \cdot \frac{b2}{a2}}}\]
    7. Simplified10.1

      \[\leadsto \frac{a1}{\color{blue}{b1} \cdot \frac{b2}{a2}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification7.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;a1 \cdot a2 \le -8.86452261856546459 \cdot 10^{62}:\\ \;\;\;\;a1 \cdot \frac{a2}{b1 \cdot b2}\\ \mathbf{elif}\;a1 \cdot a2 \le -1.4672356117320064 \cdot 10^{-254}:\\ \;\;\;\;\frac{1}{\frac{b1}{\frac{a1 \cdot a2}{b2}}}\\ \mathbf{elif}\;a1 \cdot a2 \le 6.0955568267489453 \cdot 10^{-107}:\\ \;\;\;\;a1 \cdot \frac{a2}{b1 \cdot b2}\\ \mathbf{elif}\;a1 \cdot a2 \le 3.3074354815251371 \cdot 10^{202}:\\ \;\;\;\;\frac{1}{\frac{b1}{\frac{a1 \cdot a2}{b2}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1}{b1 \cdot \frac{b2}{a2}}\\ \end{array}\]

Reproduce

herbie shell --seed 2020003 
(FPCore (a1 a2 b1 b2)
  :name "Quotient of products"
  :precision binary64

  :herbie-target
  (* (/ a1 b1) (/ a2 b2))

  (/ (* a1 a2) (* b1 b2)))