Average Error: 10.5 → 2.6
Time: 30.2s
Precision: 64
Internal Precision: 384
\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\[\begin{array}{l} \mathbf{if}\;\frac{\frac{a2}{b2}}{b1} \le -4.2275599611326025 \cdot 10^{+221}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{if}\;\frac{\frac{a2}{b2}}{b1} \le -1.071640350314696 \cdot 10^{-288}:\\ \;\;\;\;\frac{a1}{1} \cdot \frac{\frac{a2}{b2}}{b1}\\ \mathbf{if}\;\frac{\frac{a2}{b2}}{b1} \le 8.4188786051348 \cdot 10^{-321}:\\ \;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\ \mathbf{if}\;\frac{\frac{a2}{b2}}{b1} \le 1.8248539235905658 \cdot 10^{+272}:\\ \;\;\;\;\frac{a1}{1} \cdot \frac{\frac{a2}{b2}}{b1}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{a1}{b1 \cdot b2}}{\frac{1}{a2}}\\ \end{array}\]

Error

Bits error versus a1

Bits error versus a2

Bits error versus b1

Bits error versus b2

Target

Original10.5
Target11.1
Herbie2.6
\[\frac{a1}{b1} \cdot \frac{a2}{b2}\]

Derivation

  1. Split input into 3 regimes
  2. if (/ (/ a2 b2) b1) < -4.2275599611326025e+221 or -1.071640350314696e-288 < (/ (/ a2 b2) b1) < 8.4188786051348e-321

    1. Initial program 7.8

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

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

    if -4.2275599611326025e+221 < (/ (/ a2 b2) b1) < -1.071640350314696e-288 or 8.4188786051348e-321 < (/ (/ a2 b2) b1) < 1.8248539235905658e+272

    1. Initial program 11.8

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

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

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

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

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

      \[\leadsto \frac{\color{blue}{a1 \cdot \frac{1}{b1 \cdot b2}}}{1 \cdot \frac{1}{a2}}\]
    10. Applied times-frac6.4

      \[\leadsto \color{blue}{\frac{a1}{1} \cdot \frac{\frac{1}{b1 \cdot b2}}{\frac{1}{a2}}}\]
    11. Applied simplify0.6

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

    if 1.8248539235905658e+272 < (/ (/ a2 b2) b1)

    1. Initial program 13.6

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

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

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

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

Runtime

Time bar (total: 30.2s)Debug logProfile

herbie shell --seed '#(1070833653 108281690 3330367898 3632331308 3494323072 43156186)' +o rules:numerics
(FPCore (a1 a2 b1 b2)
  :name "Quotient of products"

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

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