Average Error: 11.2 → 5.2
Time: 27.2s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;b2 \cdot b1 \le -1.01617180932453511492908011356128864722 \cdot 10^{164}:\\ \;\;\;\;\frac{1}{\frac{\frac{b2}{a1}}{a2} \cdot b1}\\ \mathbf{elif}\;b2 \cdot b1 \le -1.24741513213610445062245200240454350713 \cdot 10^{-196}:\\ \;\;\;\;\frac{a1}{\frac{b2 \cdot b1}{a2}}\\ \mathbf{elif}\;b2 \cdot b1 \le 1.089678327652974985488432713888714628032 \cdot 10^{-177}:\\ \;\;\;\;\frac{1}{\frac{\frac{b1}{a1}}{a2} \cdot b2}\\ \mathbf{elif}\;b2 \cdot b1 \le 9.601719431289735048499440223645585873733 \cdot 10^{203}:\\ \;\;\;\;\frac{a1}{\frac{b2 \cdot b1}{a2}}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{\frac{b2}{a1}}{a2} \cdot b1}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;b2 \cdot b1 \le -1.01617180932453511492908011356128864722 \cdot 10^{164}:\\
\;\;\;\;\frac{1}{\frac{\frac{b2}{a1}}{a2} \cdot b1}\\

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

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

\mathbf{elif}\;b2 \cdot b1 \le 9.601719431289735048499440223645585873733 \cdot 10^{203}:\\
\;\;\;\;\frac{a1}{\frac{b2 \cdot b1}{a2}}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r6474222 = a1;
        double r6474223 = a2;
        double r6474224 = r6474222 * r6474223;
        double r6474225 = b1;
        double r6474226 = b2;
        double r6474227 = r6474225 * r6474226;
        double r6474228 = r6474224 / r6474227;
        return r6474228;
}

double f(double a1, double a2, double b1, double b2) {
        double r6474229 = b2;
        double r6474230 = b1;
        double r6474231 = r6474229 * r6474230;
        double r6474232 = -1.0161718093245351e+164;
        bool r6474233 = r6474231 <= r6474232;
        double r6474234 = 1.0;
        double r6474235 = a1;
        double r6474236 = r6474229 / r6474235;
        double r6474237 = a2;
        double r6474238 = r6474236 / r6474237;
        double r6474239 = r6474238 * r6474230;
        double r6474240 = r6474234 / r6474239;
        double r6474241 = -1.2474151321361045e-196;
        bool r6474242 = r6474231 <= r6474241;
        double r6474243 = r6474231 / r6474237;
        double r6474244 = r6474235 / r6474243;
        double r6474245 = 1.089678327652975e-177;
        bool r6474246 = r6474231 <= r6474245;
        double r6474247 = r6474230 / r6474235;
        double r6474248 = r6474247 / r6474237;
        double r6474249 = r6474248 * r6474229;
        double r6474250 = r6474234 / r6474249;
        double r6474251 = 9.601719431289735e+203;
        bool r6474252 = r6474231 <= r6474251;
        double r6474253 = r6474252 ? r6474244 : r6474240;
        double r6474254 = r6474246 ? r6474250 : r6474253;
        double r6474255 = r6474242 ? r6474244 : r6474254;
        double r6474256 = r6474233 ? r6474240 : r6474255;
        return r6474256;
}

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.2
Target11.3
Herbie5.2
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 3 regimes
  2. if (* b1 b2) < -1.0161718093245351e+164 or 9.601719431289735e+203 < (* b1 b2)

    1. Initial program 15.2

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

      \[\leadsto \color{blue}{\frac{\frac{a1 \cdot a2}{b1}}{b2}}\]
    4. Using strategy rm
    5. Applied clear-num8.8

      \[\leadsto \frac{\color{blue}{\frac{1}{\frac{b1}{a1 \cdot a2}}}}{b2}\]
    6. Using strategy rm
    7. Applied *-un-lft-identity8.8

      \[\leadsto \frac{\frac{1}{\color{blue}{1 \cdot \frac{b1}{a1 \cdot a2}}}}{b2}\]
    8. Applied *-un-lft-identity8.8

      \[\leadsto \frac{\frac{\color{blue}{1 \cdot 1}}{1 \cdot \frac{b1}{a1 \cdot a2}}}{b2}\]
    9. Applied times-frac8.8

      \[\leadsto \frac{\color{blue}{\frac{1}{1} \cdot \frac{1}{\frac{b1}{a1 \cdot a2}}}}{b2}\]
    10. Applied associate-/l*9.3

      \[\leadsto \color{blue}{\frac{\frac{1}{1}}{\frac{b2}{\frac{1}{\frac{b1}{a1 \cdot a2}}}}}\]
    11. Simplified6.4

      \[\leadsto \frac{\frac{1}{1}}{\color{blue}{\frac{\frac{b1}{a1}}{a2} \cdot b2}}\]
    12. Using strategy rm
    13. Applied *-un-lft-identity6.4

      \[\leadsto \frac{\frac{1}{1}}{\frac{\frac{b1}{a1}}{\color{blue}{1 \cdot a2}} \cdot b2}\]
    14. Applied div-inv6.4

      \[\leadsto \frac{\frac{1}{1}}{\frac{\color{blue}{b1 \cdot \frac{1}{a1}}}{1 \cdot a2} \cdot b2}\]
    15. Applied times-frac8.9

      \[\leadsto \frac{\frac{1}{1}}{\color{blue}{\left(\frac{b1}{1} \cdot \frac{\frac{1}{a1}}{a2}\right)} \cdot b2}\]
    16. Applied associate-*l*8.6

      \[\leadsto \frac{\frac{1}{1}}{\color{blue}{\frac{b1}{1} \cdot \left(\frac{\frac{1}{a1}}{a2} \cdot b2\right)}}\]
    17. Simplified5.4

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

    if -1.0161718093245351e+164 < (* b1 b2) < -1.2474151321361045e-196 or 1.089678327652975e-177 < (* b1 b2) < 9.601719431289735e+203

    1. Initial program 4.3

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

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

    if -1.2474151321361045e-196 < (* b1 b2) < 1.089678327652975e-177

    1. Initial program 29.3

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

      \[\leadsto \color{blue}{\frac{\frac{a1 \cdot a2}{b1}}{b2}}\]
    4. Using strategy rm
    5. Applied clear-num14.8

      \[\leadsto \frac{\color{blue}{\frac{1}{\frac{b1}{a1 \cdot a2}}}}{b2}\]
    6. Using strategy rm
    7. Applied *-un-lft-identity14.8

      \[\leadsto \frac{\frac{1}{\color{blue}{1 \cdot \frac{b1}{a1 \cdot a2}}}}{b2}\]
    8. Applied *-un-lft-identity14.8

      \[\leadsto \frac{\frac{\color{blue}{1 \cdot 1}}{1 \cdot \frac{b1}{a1 \cdot a2}}}{b2}\]
    9. Applied times-frac14.8

      \[\leadsto \frac{\color{blue}{\frac{1}{1} \cdot \frac{1}{\frac{b1}{a1 \cdot a2}}}}{b2}\]
    10. Applied associate-/l*14.8

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b2 \cdot b1 \le -1.01617180932453511492908011356128864722 \cdot 10^{164}:\\ \;\;\;\;\frac{1}{\frac{\frac{b2}{a1}}{a2} \cdot b1}\\ \mathbf{elif}\;b2 \cdot b1 \le -1.24741513213610445062245200240454350713 \cdot 10^{-196}:\\ \;\;\;\;\frac{a1}{\frac{b2 \cdot b1}{a2}}\\ \mathbf{elif}\;b2 \cdot b1 \le 1.089678327652974985488432713888714628032 \cdot 10^{-177}:\\ \;\;\;\;\frac{1}{\frac{\frac{b1}{a1}}{a2} \cdot b2}\\ \mathbf{elif}\;b2 \cdot b1 \le 9.601719431289735048499440223645585873733 \cdot 10^{203}:\\ \;\;\;\;\frac{a1}{\frac{b2 \cdot b1}{a2}}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{\frac{b2}{a1}}{a2} \cdot b1}\\ \end{array}\]

Reproduce

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

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

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