\left(\left(\left(\left(x \cdot \log y + z\right) + t\right) + a\right) + \left(b - 0.5\right) \cdot \log c\right) + y \cdot i
↓
\mathsf{fma}\left(y, i, \mathsf{fma}\left(b + -0.5, \log c, \mathsf{fma}\left(x, \log y, z\right) + \left(t + a\right)\right)\right)
Error
Derivation
Initial program 0.1
\[\left(\left(\left(\left(x \cdot \log y + z\right) + t\right) + a\right) + \left(b - 0.5\right) \cdot \log c\right) + y \cdot i
\]
Simplified0.1
\[\leadsto \color{blue}{\mathsf{fma}\left(y, i, \mathsf{fma}\left(b + -0.5, \log c, \mathsf{fma}\left(x, \log y, z\right) + \left(t + a\right)\right)\right)}
\]
Proof
(fma.f64 y i (fma.f64 (+.f64 b -1/2) (log.f64 c) (+.f64 (fma.f64 x (log.f64 y) z) (+.f64 t a)))): 0 points increase in error, 0 points decrease in error
(fma.f64 y i (fma.f64 (+.f64 b (Rewrite<= metadata-eval (neg.f64 1/2))) (log.f64 c) (+.f64 (fma.f64 x (log.f64 y) z) (+.f64 t a)))): 0 points increase in error, 0 points decrease in error
(fma.f64 y i (fma.f64 (Rewrite<= sub-neg_binary64 (-.f64 b 1/2)) (log.f64 c) (+.f64 (fma.f64 x (log.f64 y) z) (+.f64 t a)))): 0 points increase in error, 0 points decrease in error
(fma.f64 y i (fma.f64 (-.f64 b 1/2) (log.f64 c) (+.f64 (Rewrite<= fma-def_binary64 (+.f64 (*.f64 x (log.f64 y)) z)) (+.f64 t a)))): 0 points increase in error, 1 points decrease in error
(fma.f64 y i (fma.f64 (-.f64 b 1/2) (log.f64 c) (Rewrite<= associate-+l+_binary64 (+.f64 (+.f64 (+.f64 (*.f64 x (log.f64 y)) z) t) a)))): 0 points increase in error, 0 points decrease in error
(fma.f64 y i (Rewrite<= fma-def_binary64 (+.f64 (*.f64 (-.f64 b 1/2) (log.f64 c)) (+.f64 (+.f64 (+.f64 (*.f64 x (log.f64 y)) z) t) a)))): 0 points increase in error, 0 points decrease in error
(fma.f64 y i (Rewrite<= +-commutative_binary64 (+.f64 (+.f64 (+.f64 (+.f64 (*.f64 x (log.f64 y)) z) t) a) (*.f64 (-.f64 b 1/2) (log.f64 c))))): 0 points increase in error, 0 points decrease in error
(Rewrite<= fma-def_binary64 (+.f64 (*.f64 y i) (+.f64 (+.f64 (+.f64 (+.f64 (*.f64 x (log.f64 y)) z) t) a) (*.f64 (-.f64 b 1/2) (log.f64 c))))): 3 points increase in error, 0 points decrease in error
(Rewrite<= +-commutative_binary64 (+.f64 (+.f64 (+.f64 (+.f64 (+.f64 (*.f64 x (log.f64 y)) z) t) a) (*.f64 (-.f64 b 1/2) (log.f64 c))) (*.f64 y i))): 0 points increase in error, 0 points decrease in error
Final simplification0.1
\[\leadsto \mathsf{fma}\left(y, i, \mathsf{fma}\left(b + -0.5, \log c, \mathsf{fma}\left(x, \log y, z\right) + \left(t + a\right)\right)\right)
\]
Alternatives
Alternative 1
Error
0.1
Cost
14016
\[\left(\left(a + \left(t + \left(z + x \cdot \log y\right)\right)\right) + \log c \cdot \left(b + -0.5\right)\right) + y \cdot i
\]
herbie shell --seed 2022329
(FPCore (x y z t a b c i)
:name "Numeric.SpecFunctions:logBeta from math-functions-0.1.5.2, B"
:precision binary64
(+ (+ (+ (+ (+ (* x (log y)) z) t) a) (* (- b 0.5) (log c))) (* y i)))