Average Error: 10.7 → 5.5
Time: 7.3s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -2.32021152475378652 \cdot 10^{210}:\\ \;\;\;\;\left(\frac{a1}{b1} \cdot a2\right) \cdot \frac{1}{b2}\\ \mathbf{elif}\;b1 \cdot b2 \le -4.173350324846027 \cdot 10^{-151}:\\ \;\;\;\;a1 \cdot \frac{a2}{b1 \cdot b2}\\ \mathbf{elif}\;b1 \cdot b2 \le -0.0 \lor \neg \left(b1 \cdot b2 \le 7.6189236997402214 \cdot 10^{265}\right):\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -2.32021152475378652 \cdot 10^{210}:\\
\;\;\;\;\left(\frac{a1}{b1} \cdot a2\right) \cdot \frac{1}{b2}\\

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

\mathbf{elif}\;b1 \cdot b2 \le -0.0 \lor \neg \left(b1 \cdot b2 \le 7.6189236997402214 \cdot 10^{265}\right):\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r96159 = a1;
        double r96160 = a2;
        double r96161 = r96159 * r96160;
        double r96162 = b1;
        double r96163 = b2;
        double r96164 = r96162 * r96163;
        double r96165 = r96161 / r96164;
        return r96165;
}

double f(double a1, double a2, double b1, double b2) {
        double r96166 = b1;
        double r96167 = b2;
        double r96168 = r96166 * r96167;
        double r96169 = -2.3202115247537865e+210;
        bool r96170 = r96168 <= r96169;
        double r96171 = a1;
        double r96172 = r96171 / r96166;
        double r96173 = a2;
        double r96174 = r96172 * r96173;
        double r96175 = 1.0;
        double r96176 = r96175 / r96167;
        double r96177 = r96174 * r96176;
        double r96178 = -4.173350324846027e-151;
        bool r96179 = r96168 <= r96178;
        double r96180 = r96173 / r96168;
        double r96181 = r96171 * r96180;
        double r96182 = -0.0;
        bool r96183 = r96168 <= r96182;
        double r96184 = 7.618923699740221e+265;
        bool r96185 = r96168 <= r96184;
        double r96186 = !r96185;
        bool r96187 = r96183 || r96186;
        double r96188 = r96173 / r96167;
        double r96189 = r96172 * r96188;
        double r96190 = r96171 * r96173;
        double r96191 = r96168 / r96190;
        double r96192 = r96175 / r96191;
        double r96193 = r96187 ? r96189 : r96192;
        double r96194 = r96179 ? r96181 : r96193;
        double r96195 = r96170 ? r96177 : r96194;
        return r96195;
}

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

Original10.7
Target11.2
Herbie5.5
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 4 regimes
  2. if (* b1 b2) < -2.3202115247537865e+210

    1. Initial program 15.4

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Using strategy rm
    3. Applied div-inv15.4

      \[\leadsto \color{blue}{\left(a1 \cdot a2\right) \cdot \frac{1}{b1 \cdot b2}}\]
    4. Using strategy rm
    5. Applied *-un-lft-identity15.4

      \[\leadsto \left(a1 \cdot a2\right) \cdot \frac{\color{blue}{1 \cdot 1}}{b1 \cdot b2}\]
    6. Applied times-frac14.8

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

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

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

    if -2.3202115247537865e+210 < (* b1 b2) < -4.173350324846027e-151

    1. Initial program 3.7

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Using strategy rm
    3. Applied div-inv3.7

      \[\leadsto \color{blue}{\left(a1 \cdot a2\right) \cdot \frac{1}{b1 \cdot b2}}\]
    4. Using strategy rm
    5. Applied associate-*l*4.3

      \[\leadsto \color{blue}{a1 \cdot \left(a2 \cdot \frac{1}{b1 \cdot b2}\right)}\]
    6. Simplified4.3

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

    if -4.173350324846027e-151 < (* b1 b2) < -0.0 or 7.618923699740221e+265 < (* b1 b2)

    1. Initial program 25.9

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Using strategy rm
    3. Applied times-frac7.4

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

    if -0.0 < (* b1 b2) < 7.618923699740221e+265

    1. Initial program 5.6

      \[\frac{a1 \cdot a2}{b1 \cdot b2}\]
    2. Using strategy rm
    3. Applied div-inv6.0

      \[\leadsto \color{blue}{\left(a1 \cdot a2\right) \cdot \frac{1}{b1 \cdot b2}}\]
    4. Using strategy rm
    5. Applied associate-/r*6.0

      \[\leadsto \left(a1 \cdot a2\right) \cdot \color{blue}{\frac{\frac{1}{b1}}{b2}}\]
    6. Using strategy rm
    7. Applied pow16.0

      \[\leadsto \left(a1 \cdot a2\right) \cdot \color{blue}{{\left(\frac{\frac{1}{b1}}{b2}\right)}^{1}}\]
    8. Applied pow16.0

      \[\leadsto \left(a1 \cdot \color{blue}{{a2}^{1}}\right) \cdot {\left(\frac{\frac{1}{b1}}{b2}\right)}^{1}\]
    9. Applied pow16.0

      \[\leadsto \left(\color{blue}{{a1}^{1}} \cdot {a2}^{1}\right) \cdot {\left(\frac{\frac{1}{b1}}{b2}\right)}^{1}\]
    10. Applied pow-prod-down6.0

      \[\leadsto \color{blue}{{\left(a1 \cdot a2\right)}^{1}} \cdot {\left(\frac{\frac{1}{b1}}{b2}\right)}^{1}\]
    11. Applied pow-prod-down6.0

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

      \[\leadsto {\color{blue}{\left(\frac{a1 \cdot a2}{b1 \cdot b2}\right)}}^{1}\]
    13. Using strategy rm
    14. Applied clear-num5.9

      \[\leadsto {\color{blue}{\left(\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\right)}}^{1}\]
  3. Recombined 4 regimes into one program.
  4. Final simplification5.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;b1 \cdot b2 \le -2.32021152475378652 \cdot 10^{210}:\\ \;\;\;\;\left(\frac{a1}{b1} \cdot a2\right) \cdot \frac{1}{b2}\\ \mathbf{elif}\;b1 \cdot b2 \le -4.173350324846027 \cdot 10^{-151}:\\ \;\;\;\;a1 \cdot \frac{a2}{b1 \cdot b2}\\ \mathbf{elif}\;b1 \cdot b2 \le -0.0 \lor \neg \left(b1 \cdot b2 \le 7.6189236997402214 \cdot 10^{265}\right):\\ \;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\ \end{array}\]

Reproduce

herbie shell --seed 2020043 +o rules:numerics
(FPCore (a1 a2 b1 b2)
  :name "Quotient of products"
  :precision binary64

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

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