Average Error: 11.4 → 11.1
Time: 6.5s
Precision: 64
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;b1 \le -5.383202245290986 \cdot 10^{-156}:\\ \;\;\;\;a1 \cdot \frac{a2}{b2 \cdot b1}\\ \mathbf{elif}\;b1 \le 6.891101720226247 \cdot 10^{-295}:\\ \;\;\;\;\frac{\frac{a1}{b1} \cdot a2}{b2}\\ \mathbf{elif}\;b1 \le 3.3978834778078136 \cdot 10^{-255}:\\ \;\;\;\;a1 \cdot \frac{a2}{b2 \cdot b1}\\ \mathbf{elif}\;b1 \le 2.5097248616828304 \cdot 10^{-195}:\\ \;\;\;\;\frac{a1 \cdot \frac{a2}{b2}}{b1}\\ \mathbf{elif}\;b1 \le 153.50401013691055:\\ \;\;\;\;\frac{\frac{a1}{b1} \cdot a2}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1 \cdot \frac{a2}{b2}}{b1}\\ \end{array}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;b1 \le -5.383202245290986 \cdot 10^{-156}:\\
\;\;\;\;a1 \cdot \frac{a2}{b2 \cdot b1}\\

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

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

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

\mathbf{elif}\;b1 \le 153.50401013691055:\\
\;\;\;\;\frac{\frac{a1}{b1} \cdot a2}{b2}\\

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

\end{array}
double f(double a1, double a2, double b1, double b2) {
        double r2470147 = a1;
        double r2470148 = a2;
        double r2470149 = r2470147 * r2470148;
        double r2470150 = b1;
        double r2470151 = b2;
        double r2470152 = r2470150 * r2470151;
        double r2470153 = r2470149 / r2470152;
        return r2470153;
}

double f(double a1, double a2, double b1, double b2) {
        double r2470154 = b1;
        double r2470155 = -5.383202245290986e-156;
        bool r2470156 = r2470154 <= r2470155;
        double r2470157 = a1;
        double r2470158 = a2;
        double r2470159 = b2;
        double r2470160 = r2470159 * r2470154;
        double r2470161 = r2470158 / r2470160;
        double r2470162 = r2470157 * r2470161;
        double r2470163 = 6.891101720226247e-295;
        bool r2470164 = r2470154 <= r2470163;
        double r2470165 = r2470157 / r2470154;
        double r2470166 = r2470165 * r2470158;
        double r2470167 = r2470166 / r2470159;
        double r2470168 = 3.3978834778078136e-255;
        bool r2470169 = r2470154 <= r2470168;
        double r2470170 = 2.5097248616828304e-195;
        bool r2470171 = r2470154 <= r2470170;
        double r2470172 = r2470158 / r2470159;
        double r2470173 = r2470157 * r2470172;
        double r2470174 = r2470173 / r2470154;
        double r2470175 = 153.50401013691055;
        bool r2470176 = r2470154 <= r2470175;
        double r2470177 = r2470176 ? r2470167 : r2470174;
        double r2470178 = r2470171 ? r2470174 : r2470177;
        double r2470179 = r2470169 ? r2470162 : r2470178;
        double r2470180 = r2470164 ? r2470167 : r2470179;
        double r2470181 = r2470156 ? r2470162 : r2470180;
        return r2470181;
}

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.4
Target11.4
Herbie11.1
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 3 regimes
  2. if b1 < -5.383202245290986e-156 or 6.891101720226247e-295 < b1 < 3.3978834778078136e-255

    1. Initial program 10.5

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

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

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

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

      \[\leadsto a1 \cdot \color{blue}{\frac{\frac{a2}{b1}}{b2}}\]
    8. Using strategy rm
    9. Applied associate-/l/10.6

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

    if -5.383202245290986e-156 < b1 < 6.891101720226247e-295 or 2.5097248616828304e-195 < b1 < 153.50401013691055

    1. Initial program 13.5

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

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

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

    if 3.3978834778078136e-255 < b1 < 2.5097248616828304e-195 or 153.50401013691055 < b1

    1. Initial program 10.8

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b1 \le -5.383202245290986 \cdot 10^{-156}:\\ \;\;\;\;a1 \cdot \frac{a2}{b2 \cdot b1}\\ \mathbf{elif}\;b1 \le 6.891101720226247 \cdot 10^{-295}:\\ \;\;\;\;\frac{\frac{a1}{b1} \cdot a2}{b2}\\ \mathbf{elif}\;b1 \le 3.3978834778078136 \cdot 10^{-255}:\\ \;\;\;\;a1 \cdot \frac{a2}{b2 \cdot b1}\\ \mathbf{elif}\;b1 \le 2.5097248616828304 \cdot 10^{-195}:\\ \;\;\;\;\frac{a1 \cdot \frac{a2}{b2}}{b1}\\ \mathbf{elif}\;b1 \le 153.50401013691055:\\ \;\;\;\;\frac{\frac{a1}{b1} \cdot a2}{b2}\\ \mathbf{else}:\\ \;\;\;\;\frac{a1 \cdot \frac{a2}{b2}}{b1}\\ \end{array}\]

Reproduce

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

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

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