?

Average Accuracy: 99.7% → 100.0%
Time: 10.8s
Precision: binary64
Cost: 33152

?

\[\mathsf{\_.f64}\left(\mathsf{+.f64}\left(\mathsf{pow.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(a, a\right), \mathsf{*.f64}\left(b, b\right)\right), 2\right), \mathsf{*.f64}\left(4, \mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{*.f64}\left(a, a\right), \mathsf{\_.f64}\left(1, a\right)\right), \mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{+.f64}\left(3, a\right)\right)\right)\right)\right), 1\right) \]
\[\mathsf{+.f64}\left(\mathsf{pow.f64}\left(\mathsf{hypot.f64}\left(a, b\right), 4\right), \mathsf{fma.f64}\left(4, \mathsf{\_.f64}\left(\mathsf{fma.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{+.f64}\left(a, 3\right), \mathsf{*.f64}\left(a, a\right)\right), \mathsf{pow.f64}\left(a, 3\right)\right), -1\right)\right) \]
(FPCore (a b)
 :precision binary64
 (-.f64
  (+.f64
   (pow.f64 (+.f64 (*.f64 a a) (*.f64 b b)) 2)
   (*.f64
    4
    (+.f64 (*.f64 (*.f64 a a) (-.f64 1 a)) (*.f64 (*.f64 b b) (+.f64 3 a)))))
  1))
(FPCore (a b)
 :precision binary64
 (+.f64
  (pow.f64 (hypot.f64 a b) 4)
  (fma.f64
   4
   (-.f64 (fma.f64 (*.f64 b b) (+.f64 a 3) (*.f64 a a)) (pow.f64 a 3))
   -1)))
\mathsf{\_.f64}\left(\mathsf{+.f64}\left(\mathsf{pow.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(a, a\right), \mathsf{*.f64}\left(b, b\right)\right), 2\right), \mathsf{*.f64}\left(4, \mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{*.f64}\left(a, a\right), \mathsf{\_.f64}\left(1, a\right)\right), \mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{+.f64}\left(3, a\right)\right)\right)\right)\right), 1\right)
\mathsf{+.f64}\left(\mathsf{pow.f64}\left(\mathsf{hypot.f64}\left(a, b\right), 4\right), \mathsf{fma.f64}\left(4, \mathsf{\_.f64}\left(\mathsf{fma.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{+.f64}\left(a, 3\right), \mathsf{*.f64}\left(a, a\right)\right), \mathsf{pow.f64}\left(a, 3\right)\right), -1\right)\right)

Error?

Derivation?

  1. Initial program 99.7%

    \[\mathsf{\_.f64}\left(\mathsf{+.f64}\left(\mathsf{pow.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(a, a\right), \mathsf{*.f64}\left(b, b\right)\right), 2\right), \mathsf{*.f64}\left(4, \mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{*.f64}\left(a, a\right), \mathsf{\_.f64}\left(1, a\right)\right), \mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{+.f64}\left(3, a\right)\right)\right)\right)\right), 1\right) \]
  2. Simplified100.0%

    \[\leadsto \color{blue}{\mathsf{+.f64}\left(\mathsf{pow.f64}\left(\mathsf{hypot.f64}\left(a, b\right), 4\right), \mathsf{fma.f64}\left(4, \mathsf{\_.f64}\left(\mathsf{fma.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{+.f64}\left(a, 3\right), \mathsf{*.f64}\left(a, a\right)\right), \mathsf{pow.f64}\left(a, 3\right)\right), -1\right)\right)} \]
    Proof

    [Start]99.7

    \[ \mathsf{\_.f64}\left(\mathsf{+.f64}\left(\mathsf{pow.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(a, a\right), \mathsf{*.f64}\left(b, b\right)\right), 2\right), \mathsf{*.f64}\left(4, \mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{*.f64}\left(a, a\right), \mathsf{\_.f64}\left(1, a\right)\right), \mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{+.f64}\left(3, a\right)\right)\right)\right)\right), 1\right) \]

    associate--l+ [=>]99.7

    \[ \color{blue}{\mathsf{+.f64}\left(\mathsf{pow.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(a, a\right), \mathsf{*.f64}\left(b, b\right)\right), 2\right), \mathsf{\_.f64}\left(\mathsf{*.f64}\left(4, \mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{*.f64}\left(a, a\right), \mathsf{\_.f64}\left(1, a\right)\right), \mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{+.f64}\left(3, a\right)\right)\right)\right), 1\right)\right)} \]
  3. Final simplification100.0%

    \[\leadsto \mathsf{+.f64}\left(\mathsf{pow.f64}\left(\mathsf{hypot.f64}\left(a, b\right), 4\right), \mathsf{fma.f64}\left(4, \mathsf{\_.f64}\left(\mathsf{fma.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{+.f64}\left(a, 3\right), \mathsf{*.f64}\left(a, a\right)\right), \mathsf{pow.f64}\left(a, 3\right)\right), -1\right)\right) \]

Alternatives

Alternative 1
Accuracy99.7%
Cost8192
\[\mathsf{+.f64}\left(\mathsf{+.f64}\left(\mathsf{pow.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{*.f64}\left(a, a\right)\right), 2\right), \mathsf{*.f64}\left(4, \mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{*.f64}\left(a, a\right), \mathsf{\_.f64}\left(1, a\right)\right), \mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{+.f64}\left(a, 3\right)\right)\right)\right)\right), -1\right) \]
Alternative 2
Accuracy97.9%
Cost7936
\[\mathsf{+.f64}\left(\mathsf{+.f64}\left(\mathsf{pow.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{*.f64}\left(a, a\right)\right), 2\right), \mathsf{*.f64}\left(4, \mathsf{+.f64}\left(\mathsf{*.f64}\left(a, a\right), \mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{+.f64}\left(a, 3\right)\right)\right)\right)\right), -1\right) \]
Alternative 3
Accuracy97.3%
Cost7561
\[\begin{array}{l} \mathbf{if}\;\mathsf{<=.f64}\left(b, \frac{-4796153459164483}{36893488147419103232}\right) \lor \neg \mathsf{<=.f64}\left(b, \frac{7349874591868649}{72057594037927936}\right):\\ \;\;\;\;\mathsf{+.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), 12\right), \mathsf{pow.f64}\left(b, 4\right)\right), -1\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{+.f64}\left(\mathsf{+.f64}\left(\mathsf{pow.f64}\left(a, 4\right), \mathsf{*.f64}\left(4, \mathsf{*.f64}\left(a, \mathsf{*.f64}\left(a, \mathsf{\_.f64}\left(1, a\right)\right)\right)\right)\right), -1\right)\\ \end{array} \]
Alternative 4
Accuracy95.9%
Cost7433
\[\begin{array}{l} \mathbf{if}\;\mathsf{<=.f64}\left(b, \frac{-3022314549036573}{151115727451828646838272}\right) \lor \neg \mathsf{<=.f64}\left(b, \frac{7349874591868649}{72057594037927936}\right):\\ \;\;\;\;\mathsf{+.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), 12\right), \mathsf{pow.f64}\left(b, 4\right)\right), -1\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{+.f64}\left(\mathsf{\_.f64}\left(\mathsf{pow.f64}\left(a, 4\right), \mathsf{*.f64}\left(4, \mathsf{*.f64}\left(a, \mathsf{*.f64}\left(a, a\right)\right)\right)\right), -1\right)\\ \end{array} \]
Alternative 5
Accuracy97.6%
Cost7424
\[\mathsf{+.f64}\left(\mathsf{+.f64}\left(\mathsf{pow.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{*.f64}\left(a, a\right)\right), 2\right), \mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), 12\right)\right), -1\right) \]
Alternative 6
Accuracy95.9%
Cost7305
\[\begin{array}{l} \mathbf{if}\;\mathsf{<=.f64}\left(b, \frac{-3246626956972881}{1180591620717411303424}\right) \lor \neg \mathsf{<=.f64}\left(b, \frac{7349874591868649}{72057594037927936}\right):\\ \;\;\;\;\mathsf{+.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), 12\right), \mathsf{pow.f64}\left(b, 4\right)\right), -1\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{pow.f64}\left(a, 3\right), \mathsf{+.f64}\left(a, -4\right)\right), -1\right)\\ \end{array} \]
Alternative 7
Accuracy95.8%
Cost7241
\[\begin{array}{l} \mathbf{if}\;\mathsf{<=.f64}\left(b, \frac{-8689154328480147}{75557863725914323419136}\right) \lor \neg \mathsf{<=.f64}\left(b, \frac{7349874591868649}{72057594037927936}\right):\\ \;\;\;\;\mathsf{+.f64}\left(\mathsf{*.f64}\left(b, \mathsf{*.f64}\left(b, \mathsf{fma.f64}\left(b, b, 12\right)\right)\right), -1\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{pow.f64}\left(a, 3\right), \mathsf{+.f64}\left(a, -4\right)\right), -1\right)\\ \end{array} \]
Alternative 8
Accuracy95.8%
Cost7176
\[\begin{array}{l} \mathbf{if}\;\mathsf{<=.f64}\left(b, \frac{-6375194751874021}{2361183241434822606848}\right):\\ \;\;\;\;\mathsf{+.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), 12\right), \mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{*.f64}\left(b, b\right)\right)\right), -1\right)\\ \mathbf{elif}\;\mathsf{<=.f64}\left(b, \frac{7349874591868649}{72057594037927936}\right):\\ \;\;\;\;\mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{pow.f64}\left(a, 3\right), \mathsf{+.f64}\left(a, -4\right)\right), -1\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{+.f64}\left(\mathsf{*.f64}\left(b, b\right), 12\right)\right), -1\right)\\ \end{array} \]
Alternative 9
Accuracy95.1%
Cost6920
\[\begin{array}{l} \mathbf{if}\;\mathsf{<=.f64}\left(b, \frac{-1851167661284901}{18889465931478580854784}\right):\\ \;\;\;\;\mathsf{+.f64}\left(\mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), 12\right), \mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{*.f64}\left(b, b\right)\right)\right), -1\right)\\ \mathbf{elif}\;\mathsf{<=.f64}\left(b, \frac{7349874591868649}{72057594037927936}\right):\\ \;\;\;\;\mathsf{+.f64}\left(\mathsf{pow.f64}\left(a, 4\right), -1\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{+.f64}\left(\mathsf{*.f64}\left(b, b\right), 12\right)\right), -1\right)\\ \end{array} \]
Alternative 10
Accuracy95.3%
Cost6793
\[\begin{array}{l} \mathbf{if}\;\mathsf{<=.f64}\left(a, -10000000000000\right) \lor \neg \mathsf{<=.f64}\left(a, 740\right):\\ \;\;\;\;\mathsf{pow.f64}\left(a, 4\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{+.f64}\left(\mathsf{*.f64}\left(b, b\right), 12\right)\right), -1\right)\\ \end{array} \]
Alternative 11
Accuracy81.6%
Cost704
\[\mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), \mathsf{+.f64}\left(\mathsf{*.f64}\left(b, b\right), 12\right)\right), -1\right) \]
Alternative 12
Accuracy64.8%
Cost448
\[\mathsf{+.f64}\left(\mathsf{*.f64}\left(4, \mathsf{*.f64}\left(a, a\right)\right), -1\right) \]
Alternative 13
Accuracy65.0%
Cost448
\[\mathsf{+.f64}\left(\mathsf{*.f64}\left(\mathsf{*.f64}\left(b, b\right), 12\right), -1\right) \]

Error

Reproduce?

herbie shell --seed 2023144 
(FPCore (a b)
  :name "Bouland and Aaronson, Equation (24)"
  :precision binary64
  (- (+ (pow (+ (* a a) (* b b)) 2.0) (* 4.0 (+ (* (* a a) (- 1.0 a)) (* (* b b) (+ 3.0 a))))) 1.0))