\[\frac{a1 \cdot a2}{b1 \cdot b2}\]
\frac{a1 \cdot a2}{b1 \cdot b2}
(FPCore (a1 a2 b1 b2) :precision binary64 (/ (* a1 a2) (* b1 b2)))
double code(double a1, double a2, double b1, double b2) {
	return (a1 * a2) / (b1 * b2);
}

Reproduce

Please include this information when filing a bug report:

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

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

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

Backtrace

simplify-batch: contract violation expected keyword argument #:precompute in: (-> (listof (or/c (listof any/c) symbol? value? real?)) #:precompute boolean? #:rules (listof rule?) (listof (listof (or/c (listof any/c) symbol? value? real?)))) contract from: (function simplify-batch) blaming: <pkgs>/herbie/core/simplify.rkt (assuming the contract is correct) at: <pkgs>/herbie/core/simplify.rkt:68.18LC
raise-blame-error/opt/racket-7.9/collects/racket/contract/private/blame.rkt3470
for-loop/opt/racket-7.9/collects/racket/contract/private/arrow-higher-order.rkt50813
kwd-checker/opt/racket-7.9/collects/racket/contract/private/arrow-higher-order.rkt49611
connected-components/data/pavpan/nightlies/herbie/egg-interface-fixes/src/symmetry.rkt170
run-improve/data/pavpan/nightlies/herbie/egg-interface-fixes/src/mainloop.rkt3870
(unnamed)/data/pavpan/nightlies/herbie/egg-interface-fixes/src/sandbox.rkt546
run/opt/racket-7.9/share/pkgs/profile-lib/main.rkt392
profile-thunk/opt/racket-7.9/share/pkgs/profile-lib/main.rkt90
(unnamed)/opt/racket-7.9/collects/racket/engine.rkt4224