(FPCore (u2 u3 u1 amt u4) :precision binary32 (* 7.62939453125e-6 (+ (+ (+ (* 2.0 u2) (* (- u3 u1) (* amt 65536.0))) (* (- (+ (- (* 2.0 u1) (* 5.0 u2)) (* 4.0 u3)) u4) (* (pow amt 2.0) 65536.0))) (* (+ (- (- (* 3.0 u2) u1) (* 3.0 u3)) u4) (* (pow amt 3.0) 65536.0)))))
float code(float u2, float u3, float u1, float amt, float u4) { return 7.62939453125e-6f * ((((2.0f * u2) + ((u3 - u1) * (amt * 65536.0f))) + (((((2.0f * u1) - (5.0f * u2)) + (4.0f * u3)) - u4) * (powf(amt, 2.0f) * 65536.0f))) + (((((3.0f * u2) - u1) - (3.0f * u3)) + u4) * (powf(amt, 3.0f) * 65536.0f))); }
real(4) function code(u2, u3, u1, amt, u4) real(4), intent (in) :: u2 real(4), intent (in) :: u3 real(4), intent (in) :: u1 real(4), intent (in) :: amt real(4), intent (in) :: u4 code = 7.62939453125e-6 * ((((2.0e0 * u2) + ((u3 - u1) * (amt * 65536.0e0))) + (((((2.0e0 * u1) - (5.0e0 * u2)) + (4.0e0 * u3)) - u4) * ((amt ** 2.0e0) * 65536.0e0))) + (((((3.0e0 * u2) - u1) - (3.0e0 * u3)) + u4) * ((amt ** 3.0e0) * 65536.0e0))) end function
function code(u2, u3, u1, amt, u4) return Float32(Float32(7.62939453125e-6) * Float32(Float32(Float32(Float32(Float32(2.0) * u2) + Float32(Float32(u3 - u1) * Float32(amt * Float32(65536.0)))) + Float32(Float32(Float32(Float32(Float32(Float32(2.0) * u1) - Float32(Float32(5.0) * u2)) + Float32(Float32(4.0) * u3)) - u4) * Float32((amt ^ Float32(2.0)) * Float32(65536.0)))) + Float32(Float32(Float32(Float32(Float32(Float32(3.0) * u2) - u1) - Float32(Float32(3.0) * u3)) + u4) * Float32((amt ^ Float32(3.0)) * Float32(65536.0))))) end
function tmp = code(u2, u3, u1, amt, u4) tmp = single(7.62939453125e-6) * ((((single(2.0) * u2) + ((u3 - u1) * (amt * single(65536.0)))) + (((((single(2.0) * u1) - (single(5.0) * u2)) + (single(4.0) * u3)) - u4) * ((amt ^ single(2.0)) * single(65536.0)))) + (((((single(3.0) * u2) - u1) - (single(3.0) * u3)) + u4) * ((amt ^ single(3.0)) * single(65536.0)))); end
\begin{array}{l} \\ 7.62939453125 \cdot 10^{-6} \cdot \left(\left(\left(2 \cdot u2 + \left(u3 - u1\right) \cdot \left(amt \cdot 65536\right)\right) + \left(\left(\left(2 \cdot u1 - 5 \cdot u2\right) + 4 \cdot u3\right) - u4\right) \cdot \left({amt}^{2} \cdot 65536\right)\right) + \left(\left(\left(3 \cdot u2 - u1\right) - 3 \cdot u3\right) + u4\right) \cdot \left({amt}^{3} \cdot 65536\right)\right) \end{array}
Sampling outcomes in binary32 precision:
Herbie found 21 alternatives:
Alternative | Accuracy | Speedup |
---|
(FPCore (u2 u3 u1 amt u4) :precision binary32 (* 7.62939453125e-6 (+ (+ (+ (* 2.0 u2) (* (- u3 u1) (* amt 65536.0))) (* (- (+ (- (* 2.0 u1) (* 5.0 u2)) (* 4.0 u3)) u4) (* (pow amt 2.0) 65536.0))) (* (+ (- (- (* 3.0 u2) u1) (* 3.0 u3)) u4) (* (pow amt 3.0) 65536.0)))))
float code(float u2, float u3, float u1, float amt, float u4) { return 7.62939453125e-6f * ((((2.0f * u2) + ((u3 - u1) * (amt * 65536.0f))) + (((((2.0f * u1) - (5.0f * u2)) + (4.0f * u3)) - u4) * (powf(amt, 2.0f) * 65536.0f))) + (((((3.0f * u2) - u1) - (3.0f * u3)) + u4) * (powf(amt, 3.0f) * 65536.0f))); }
real(4) function code(u2, u3, u1, amt, u4) real(4), intent (in) :: u2 real(4), intent (in) :: u3 real(4), intent (in) :: u1 real(4), intent (in) :: amt real(4), intent (in) :: u4 code = 7.62939453125e-6 * ((((2.0e0 * u2) + ((u3 - u1) * (amt * 65536.0e0))) + (((((2.0e0 * u1) - (5.0e0 * u2)) + (4.0e0 * u3)) - u4) * ((amt ** 2.0e0) * 65536.0e0))) + (((((3.0e0 * u2) - u1) - (3.0e0 * u3)) + u4) * ((amt ** 3.0e0) * 65536.0e0))) end function
function code(u2, u3, u1, amt, u4) return Float32(Float32(7.62939453125e-6) * Float32(Float32(Float32(Float32(Float32(2.0) * u2) + Float32(Float32(u3 - u1) * Float32(amt * Float32(65536.0)))) + Float32(Float32(Float32(Float32(Float32(Float32(2.0) * u1) - Float32(Float32(5.0) * u2)) + Float32(Float32(4.0) * u3)) - u4) * Float32((amt ^ Float32(2.0)) * Float32(65536.0)))) + Float32(Float32(Float32(Float32(Float32(Float32(3.0) * u2) - u1) - Float32(Float32(3.0) * u3)) + u4) * Float32((amt ^ Float32(3.0)) * Float32(65536.0))))) end
function tmp = code(u2, u3, u1, amt, u4) tmp = single(7.62939453125e-6) * ((((single(2.0) * u2) + ((u3 - u1) * (amt * single(65536.0)))) + (((((single(2.0) * u1) - (single(5.0) * u2)) + (single(4.0) * u3)) - u4) * ((amt ^ single(2.0)) * single(65536.0)))) + (((((single(3.0) * u2) - u1) - (single(3.0) * u3)) + u4) * ((amt ^ single(3.0)) * single(65536.0)))); end
\begin{array}{l} \\ 7.62939453125 \cdot 10^{-6} \cdot \left(\left(\left(2 \cdot u2 + \left(u3 - u1\right) \cdot \left(amt \cdot 65536\right)\right) + \left(\left(\left(2 \cdot u1 - 5 \cdot u2\right) + 4 \cdot u3\right) - u4\right) \cdot \left({amt}^{2} \cdot 65536\right)\right) + \left(\left(\left(3 \cdot u2 - u1\right) - 3 \cdot u3\right) + u4\right) \cdot \left({amt}^{3} \cdot 65536\right)\right) \end{array}
(FPCore (u2 u3 u1 amt u4) :precision binary32 (fma amt (* 0.5 (fma amt (fma 2.0 u1 (- (fma amt (- (fma -3.0 u3 u4) u1) (* u3 4.0)) u4)) (- u3 u1))) (* u2 (fma (* 0.5 (* amt amt)) (fma 3.0 amt -5.0) 1.52587890625e-5))))
float code(float u2, float u3, float u1, float amt, float u4) { return fmaf(amt, (0.5f * fmaf(amt, fmaf(2.0f, u1, (fmaf(amt, (fmaf(-3.0f, u3, u4) - u1), (u3 * 4.0f)) - u4)), (u3 - u1))), (u2 * fmaf((0.5f * (amt * amt)), fmaf(3.0f, amt, -5.0f), 1.52587890625e-5f))); }
function code(u2, u3, u1, amt, u4) return fma(amt, Float32(Float32(0.5) * fma(amt, fma(Float32(2.0), u1, Float32(fma(amt, Float32(fma(Float32(-3.0), u3, u4) - u1), Float32(u3 * Float32(4.0))) - u4)), Float32(u3 - u1))), Float32(u2 * fma(Float32(Float32(0.5) * Float32(amt * amt)), fma(Float32(3.0), amt, Float32(-5.0)), Float32(1.52587890625e-5)))) end
\begin{array}{l} \\ \mathsf{fma}\left(amt, 0.5 \cdot \mathsf{fma}\left(amt, \mathsf{fma}\left(2, u1, \mathsf{fma}\left(amt, \mathsf{fma}\left(-3, u3, u4\right) - u1, u3 \cdot 4\right) - u4\right), u3 - u1\right), u2 \cdot \mathsf{fma}\left(0.5 \cdot \left(amt \cdot amt\right), \mathsf{fma}\left(3, amt, -5\right), 1.52587890625 \cdot 10^{-5}\right)\right) \end{array}
Initial program 75.5%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites94.9%
Taylor expanded in u2 around 0
Applied rewrites96.2%
Final simplification96.2%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (fma amt (fma amt (* 0.5 (fma u4 (+ amt -1.0) (fma -5.0 u2 (fma 2.0 u1 (fma amt (fma 3.0 (- u2 u3) (- u1)) (* u3 4.0)))))) (* 0.5 (- u3 u1))) (* u2 1.52587890625e-5)))
float code(float u2, float u3, float u1, float amt, float u4) { return fmaf(amt, fmaf(amt, (0.5f * fmaf(u4, (amt + -1.0f), fmaf(-5.0f, u2, fmaf(2.0f, u1, fmaf(amt, fmaf(3.0f, (u2 - u3), -u1), (u3 * 4.0f)))))), (0.5f * (u3 - u1))), (u2 * 1.52587890625e-5f)); }
function code(u2, u3, u1, amt, u4) return fma(amt, fma(amt, Float32(Float32(0.5) * fma(u4, Float32(amt + Float32(-1.0)), fma(Float32(-5.0), u2, fma(Float32(2.0), u1, fma(amt, fma(Float32(3.0), Float32(u2 - u3), Float32(-u1)), Float32(u3 * Float32(4.0))))))), Float32(Float32(0.5) * Float32(u3 - u1))), Float32(u2 * Float32(1.52587890625e-5))) end
\begin{array}{l} \\ \mathsf{fma}\left(amt, \mathsf{fma}\left(amt, 0.5 \cdot \mathsf{fma}\left(u4, amt + -1, \mathsf{fma}\left(-5, u2, \mathsf{fma}\left(2, u1, \mathsf{fma}\left(amt, \mathsf{fma}\left(3, u2 - u3, -u1\right), u3 \cdot 4\right)\right)\right)\right), 0.5 \cdot \left(u3 - u1\right)\right), u2 \cdot 1.52587890625 \cdot 10^{-5}\right) \end{array}
Initial program 75.5%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites94.9%
Taylor expanded in u4 around 0
Applied rewrites95.9%
Final simplification95.9%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (fma amt (fma amt (* 0.5 (fma -5.0 u2 (- (fma 2.0 u1 (fma amt (- (fma 3.0 u2 u4) u1) (* u3 (fma -3.0 amt 4.0)))) u4))) (* 0.5 (- u3 u1))) (* u2 1.52587890625e-5)))
float code(float u2, float u3, float u1, float amt, float u4) { return fmaf(amt, fmaf(amt, (0.5f * fmaf(-5.0f, u2, (fmaf(2.0f, u1, fmaf(amt, (fmaf(3.0f, u2, u4) - u1), (u3 * fmaf(-3.0f, amt, 4.0f)))) - u4))), (0.5f * (u3 - u1))), (u2 * 1.52587890625e-5f)); }
function code(u2, u3, u1, amt, u4) return fma(amt, fma(amt, Float32(Float32(0.5) * fma(Float32(-5.0), u2, Float32(fma(Float32(2.0), u1, fma(amt, Float32(fma(Float32(3.0), u2, u4) - u1), Float32(u3 * fma(Float32(-3.0), amt, Float32(4.0))))) - u4))), Float32(Float32(0.5) * Float32(u3 - u1))), Float32(u2 * Float32(1.52587890625e-5))) end
\begin{array}{l} \\ \mathsf{fma}\left(amt, \mathsf{fma}\left(amt, 0.5 \cdot \mathsf{fma}\left(-5, u2, \mathsf{fma}\left(2, u1, \mathsf{fma}\left(amt, \mathsf{fma}\left(3, u2, u4\right) - u1, u3 \cdot \mathsf{fma}\left(-3, amt, 4\right)\right)\right) - u4\right), 0.5 \cdot \left(u3 - u1\right)\right), u2 \cdot 1.52587890625 \cdot 10^{-5}\right) \end{array}
Initial program 75.5%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites94.9%
Taylor expanded in u3 around 0
Applied rewrites95.7%
Final simplification95.7%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (fma amt (fma amt (* 0.5 (fma u2 (fma 3.0 amt -5.0) (fma 2.0 u1 (- (fma amt (- (fma -3.0 u3 u4) u1) (* u3 4.0)) u4)))) (* 0.5 (- u3 u1))) (* u2 1.52587890625e-5)))
float code(float u2, float u3, float u1, float amt, float u4) { return fmaf(amt, fmaf(amt, (0.5f * fmaf(u2, fmaf(3.0f, amt, -5.0f), fmaf(2.0f, u1, (fmaf(amt, (fmaf(-3.0f, u3, u4) - u1), (u3 * 4.0f)) - u4)))), (0.5f * (u3 - u1))), (u2 * 1.52587890625e-5f)); }
function code(u2, u3, u1, amt, u4) return fma(amt, fma(amt, Float32(Float32(0.5) * fma(u2, fma(Float32(3.0), amt, Float32(-5.0)), fma(Float32(2.0), u1, Float32(fma(amt, Float32(fma(Float32(-3.0), u3, u4) - u1), Float32(u3 * Float32(4.0))) - u4)))), Float32(Float32(0.5) * Float32(u3 - u1))), Float32(u2 * Float32(1.52587890625e-5))) end
\begin{array}{l} \\ \mathsf{fma}\left(amt, \mathsf{fma}\left(amt, 0.5 \cdot \mathsf{fma}\left(u2, \mathsf{fma}\left(3, amt, -5\right), \mathsf{fma}\left(2, u1, \mathsf{fma}\left(amt, \mathsf{fma}\left(-3, u3, u4\right) - u1, u3 \cdot 4\right) - u4\right)\right), 0.5 \cdot \left(u3 - u1\right)\right), u2 \cdot 1.52587890625 \cdot 10^{-5}\right) \end{array}
Initial program 75.5%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites94.9%
Taylor expanded in u2 around 0
Applied rewrites95.5%
Final simplification95.5%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (let* ((t_0 (fma amt (* 0.5 (+ u3 (* amt (fma -5.0 u2 (- (fma amt (fma 3.0 (- u2 u3) u4) (* u3 4.0)) u4))))) (* u2 1.52587890625e-5)))) (if (<= u3 -2.0) t_0 (if (<= u3 40000.0) (fma amt (fma (* amt 0.5) (fma -5.0 u2 (- (fma amt (- (fma 3.0 u2 u4) u1) (* 2.0 u1)) u4)) (* u1 -0.5)) (* u2 1.52587890625e-5)) t_0))))
float code(float u2, float u3, float u1, float amt, float u4) { float t_0 = fmaf(amt, (0.5f * (u3 + (amt * fmaf(-5.0f, u2, (fmaf(amt, fmaf(3.0f, (u2 - u3), u4), (u3 * 4.0f)) - u4))))), (u2 * 1.52587890625e-5f)); float tmp; if (u3 <= -2.0f) { tmp = t_0; } else if (u3 <= 40000.0f) { tmp = fmaf(amt, fmaf((amt * 0.5f), fmaf(-5.0f, u2, (fmaf(amt, (fmaf(3.0f, u2, u4) - u1), (2.0f * u1)) - u4)), (u1 * -0.5f)), (u2 * 1.52587890625e-5f)); } else { tmp = t_0; } return tmp; }
function code(u2, u3, u1, amt, u4) t_0 = fma(amt, Float32(Float32(0.5) * Float32(u3 + Float32(amt * fma(Float32(-5.0), u2, Float32(fma(amt, fma(Float32(3.0), Float32(u2 - u3), u4), Float32(u3 * Float32(4.0))) - u4))))), Float32(u2 * Float32(1.52587890625e-5))) tmp = Float32(0.0) if (u3 <= Float32(-2.0)) tmp = t_0; elseif (u3 <= Float32(40000.0)) tmp = fma(amt, fma(Float32(amt * Float32(0.5)), fma(Float32(-5.0), u2, Float32(fma(amt, Float32(fma(Float32(3.0), u2, u4) - u1), Float32(Float32(2.0) * u1)) - u4)), Float32(u1 * Float32(-0.5))), Float32(u2 * Float32(1.52587890625e-5))); else tmp = t_0; end return tmp end
\begin{array}{l} \\ \begin{array}{l} t_0 := \mathsf{fma}\left(amt, 0.5 \cdot \left(u3 + amt \cdot \mathsf{fma}\left(-5, u2, \mathsf{fma}\left(amt, \mathsf{fma}\left(3, u2 - u3, u4\right), u3 \cdot 4\right) - u4\right)\right), u2 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{if}\;u3 \leq -2:\\ \;\;\;\;t_0\\ \mathbf{elif}\;u3 \leq 40000:\\ \;\;\;\;\mathsf{fma}\left(amt, \mathsf{fma}\left(amt \cdot 0.5, \mathsf{fma}\left(-5, u2, \mathsf{fma}\left(amt, \mathsf{fma}\left(3, u2, u4\right) - u1, 2 \cdot u1\right) - u4\right), u1 \cdot -0.5\right), u2 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{else}:\\ \;\;\;\;t_0\\ \end{array} \end{array}
if u3 < -2 or 4e4 < u3
Initial program 71.8%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites95.6%
Taylor expanded in u1 around 0
Applied rewrites86.4%
if -2 < u3 < 4e4
Initial program 78.3%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites94.4%
Taylor expanded in u3 around 0
Applied rewrites91.7%
Final simplification89.5%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (fma amt (fma amt (* 0.5 (fma u1 (- 2.0 amt) (fma -5.0 u2 (- (fma amt (fma 3.0 (- u2 u3) u4) (* u3 4.0)) u4)))) (* 0.5 (- u3 u1))) (* u2 1.52587890625e-5)))
float code(float u2, float u3, float u1, float amt, float u4) { return fmaf(amt, fmaf(amt, (0.5f * fmaf(u1, (2.0f - amt), fmaf(-5.0f, u2, (fmaf(amt, fmaf(3.0f, (u2 - u3), u4), (u3 * 4.0f)) - u4)))), (0.5f * (u3 - u1))), (u2 * 1.52587890625e-5f)); }
function code(u2, u3, u1, amt, u4) return fma(amt, fma(amt, Float32(Float32(0.5) * fma(u1, Float32(Float32(2.0) - amt), fma(Float32(-5.0), u2, Float32(fma(amt, fma(Float32(3.0), Float32(u2 - u3), u4), Float32(u3 * Float32(4.0))) - u4)))), Float32(Float32(0.5) * Float32(u3 - u1))), Float32(u2 * Float32(1.52587890625e-5))) end
\begin{array}{l} \\ \mathsf{fma}\left(amt, \mathsf{fma}\left(amt, 0.5 \cdot \mathsf{fma}\left(u1, 2 - amt, \mathsf{fma}\left(-5, u2, \mathsf{fma}\left(amt, \mathsf{fma}\left(3, u2 - u3, u4\right), u3 \cdot 4\right) - u4\right)\right), 0.5 \cdot \left(u3 - u1\right)\right), u2 \cdot 1.52587890625 \cdot 10^{-5}\right) \end{array}
Initial program 75.5%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites94.9%
Taylor expanded in u1 around 0
Applied rewrites95.0%
Final simplification95.0%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (let* ((t_0 (fma amt (* 0.5 (+ u3 (* amt (fma -5.0 u2 (- (fma amt (fma 3.0 (- u2 u3) u4) (* u3 4.0)) u4))))) (* u2 1.52587890625e-5)))) (if (<= u2 -5000.0) t_0 (if (<= u2 199999996861349900.0) (* amt (fma amt (* 0.5 (fma amt (- u4 (fma 3.0 u3 u1)) (fma 2.0 u1 (fma 4.0 u3 (- u4))))) (* 0.5 (- u3 u1)))) t_0))))
float code(float u2, float u3, float u1, float amt, float u4) { float t_0 = fmaf(amt, (0.5f * (u3 + (amt * fmaf(-5.0f, u2, (fmaf(amt, fmaf(3.0f, (u2 - u3), u4), (u3 * 4.0f)) - u4))))), (u2 * 1.52587890625e-5f)); float tmp; if (u2 <= -5000.0f) { tmp = t_0; } else if (u2 <= 199999996861349900.0f) { tmp = amt * fmaf(amt, (0.5f * fmaf(amt, (u4 - fmaf(3.0f, u3, u1)), fmaf(2.0f, u1, fmaf(4.0f, u3, -u4)))), (0.5f * (u3 - u1))); } else { tmp = t_0; } return tmp; }
function code(u2, u3, u1, amt, u4) t_0 = fma(amt, Float32(Float32(0.5) * Float32(u3 + Float32(amt * fma(Float32(-5.0), u2, Float32(fma(amt, fma(Float32(3.0), Float32(u2 - u3), u4), Float32(u3 * Float32(4.0))) - u4))))), Float32(u2 * Float32(1.52587890625e-5))) tmp = Float32(0.0) if (u2 <= Float32(-5000.0)) tmp = t_0; elseif (u2 <= Float32(199999996861349900.0)) tmp = Float32(amt * fma(amt, Float32(Float32(0.5) * fma(amt, Float32(u4 - fma(Float32(3.0), u3, u1)), fma(Float32(2.0), u1, fma(Float32(4.0), u3, Float32(-u4))))), Float32(Float32(0.5) * Float32(u3 - u1)))); else tmp = t_0; end return tmp end
\begin{array}{l} \\ \begin{array}{l} t_0 := \mathsf{fma}\left(amt, 0.5 \cdot \left(u3 + amt \cdot \mathsf{fma}\left(-5, u2, \mathsf{fma}\left(amt, \mathsf{fma}\left(3, u2 - u3, u4\right), u3 \cdot 4\right) - u4\right)\right), u2 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{if}\;u2 \leq -5000:\\ \;\;\;\;t_0\\ \mathbf{elif}\;u2 \leq 199999996861349900:\\ \;\;\;\;amt \cdot \mathsf{fma}\left(amt, 0.5 \cdot \mathsf{fma}\left(amt, u4 - \mathsf{fma}\left(3, u3, u1\right), \mathsf{fma}\left(2, u1, \mathsf{fma}\left(4, u3, -u4\right)\right)\right), 0.5 \cdot \left(u3 - u1\right)\right)\\ \mathbf{else}:\\ \;\;\;\;t_0\\ \end{array} \end{array}
if u2 < -5e3 or 1.99999997e17 < u2
Initial program 65.1%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites92.7%
Taylor expanded in u1 around 0
Applied rewrites83.8%
if -5e3 < u2 < 1.99999997e17
Initial program 81.3%
Taylor expanded in u2 around 0
+-commutative
N/A
distribute-lft-in
N/A
distribute-lft-out
N/A
associate-*r*
N/A
metadata-eval
N/A
associate-*r*
N/A
metadata-eval
N/A
*-commutative
N/A
associate-*r*
N/A
*-commutative
N/A
Applied rewrites87.3%
Taylor expanded in amt around 0
Applied rewrites89.2%
Final simplification87.3%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (let* ((t_0 (* 0.5 (- u3 u1)))) (if (<= u2 -2.0000000276968557e+24) (* u2 (fma (* 0.5 (* amt amt)) (fma 3.0 amt -5.0) 1.52587890625e-5)) (if (<= u2 18000000404716257000.0) (* amt (fma amt (* 0.5 (fma amt (- u4 (fma 3.0 u3 u1)) (fma 2.0 u1 (fma 4.0 u3 (- u4))))) t_0)) (fma amt (fma amt (* 0.5 (* u2 (fma 3.0 amt -5.0))) t_0) (* u2 1.52587890625e-5))))))
float code(float u2, float u3, float u1, float amt, float u4) { float t_0 = 0.5f * (u3 - u1); float tmp; if (u2 <= -2.0000000276968557e+24f) { tmp = u2 * fmaf((0.5f * (amt * amt)), fmaf(3.0f, amt, -5.0f), 1.52587890625e-5f); } else if (u2 <= 18000000404716257000.0f) { tmp = amt * fmaf(amt, (0.5f * fmaf(amt, (u4 - fmaf(3.0f, u3, u1)), fmaf(2.0f, u1, fmaf(4.0f, u3, -u4)))), t_0); } else { tmp = fmaf(amt, fmaf(amt, (0.5f * (u2 * fmaf(3.0f, amt, -5.0f))), t_0), (u2 * 1.52587890625e-5f)); } return tmp; }
function code(u2, u3, u1, amt, u4) t_0 = Float32(Float32(0.5) * Float32(u3 - u1)) tmp = Float32(0.0) if (u2 <= Float32(-2.0000000276968557e+24)) tmp = Float32(u2 * fma(Float32(Float32(0.5) * Float32(amt * amt)), fma(Float32(3.0), amt, Float32(-5.0)), Float32(1.52587890625e-5))); elseif (u2 <= Float32(18000000404716257000.0)) tmp = Float32(amt * fma(amt, Float32(Float32(0.5) * fma(amt, Float32(u4 - fma(Float32(3.0), u3, u1)), fma(Float32(2.0), u1, fma(Float32(4.0), u3, Float32(-u4))))), t_0)); else tmp = fma(amt, fma(amt, Float32(Float32(0.5) * Float32(u2 * fma(Float32(3.0), amt, Float32(-5.0)))), t_0), Float32(u2 * Float32(1.52587890625e-5))); end return tmp end
\begin{array}{l} \\ \begin{array}{l} t_0 := 0.5 \cdot \left(u3 - u1\right)\\ \mathbf{if}\;u2 \leq -2.0000000276968557 \cdot 10^{+24}:\\ \;\;\;\;u2 \cdot \mathsf{fma}\left(0.5 \cdot \left(amt \cdot amt\right), \mathsf{fma}\left(3, amt, -5\right), 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{elif}\;u2 \leq 18000000404716257000:\\ \;\;\;\;amt \cdot \mathsf{fma}\left(amt, 0.5 \cdot \mathsf{fma}\left(amt, u4 - \mathsf{fma}\left(3, u3, u1\right), \mathsf{fma}\left(2, u1, \mathsf{fma}\left(4, u3, -u4\right)\right)\right), t_0\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(amt, \mathsf{fma}\left(amt, 0.5 \cdot \left(u2 \cdot \mathsf{fma}\left(3, amt, -5\right)\right), t_0\right), u2 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \end{array} \end{array}
if u2 < -2.00000003e24
Initial program 42.0%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites86.9%
Taylor expanded in u2 around inf
Applied rewrites78.3%
if -2.00000003e24 < u2 < 1.80000004e19
Initial program 80.2%
Taylor expanded in u2 around 0
+-commutative
N/A
distribute-lft-in
N/A
distribute-lft-out
N/A
associate-*r*
N/A
metadata-eval
N/A
associate-*r*
N/A
metadata-eval
N/A
*-commutative
N/A
associate-*r*
N/A
*-commutative
N/A
Applied rewrites80.9%
Taylor expanded in amt around 0
Applied rewrites82.6%
if 1.80000004e19 < u2
Initial program 72.4%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites95.5%
Taylor expanded in u2 around inf
Applied rewrites80.9%
Final simplification82.0%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (if (<= u2 -2.0000000276968557e+24) (* u2 (fma (* 0.5 (* amt amt)) (fma 3.0 amt -5.0) 1.52587890625e-5)) (if (<= u2 18000000404716257000.0) (* amt (* 0.5 (fma amt (fma 2.0 u1 (- (fma amt (- (fma -3.0 u3 u4) u1) (* u3 4.0)) u4)) (- u3 u1)))) (fma amt (fma amt (* 0.5 (* u2 (fma 3.0 amt -5.0))) (* 0.5 (- u3 u1))) (* u2 1.52587890625e-5)))))
float code(float u2, float u3, float u1, float amt, float u4) { float tmp; if (u2 <= -2.0000000276968557e+24f) { tmp = u2 * fmaf((0.5f * (amt * amt)), fmaf(3.0f, amt, -5.0f), 1.52587890625e-5f); } else if (u2 <= 18000000404716257000.0f) { tmp = amt * (0.5f * fmaf(amt, fmaf(2.0f, u1, (fmaf(amt, (fmaf(-3.0f, u3, u4) - u1), (u3 * 4.0f)) - u4)), (u3 - u1))); } else { tmp = fmaf(amt, fmaf(amt, (0.5f * (u2 * fmaf(3.0f, amt, -5.0f))), (0.5f * (u3 - u1))), (u2 * 1.52587890625e-5f)); } return tmp; }
function code(u2, u3, u1, amt, u4) tmp = Float32(0.0) if (u2 <= Float32(-2.0000000276968557e+24)) tmp = Float32(u2 * fma(Float32(Float32(0.5) * Float32(amt * amt)), fma(Float32(3.0), amt, Float32(-5.0)), Float32(1.52587890625e-5))); elseif (u2 <= Float32(18000000404716257000.0)) tmp = Float32(amt * Float32(Float32(0.5) * fma(amt, fma(Float32(2.0), u1, Float32(fma(amt, Float32(fma(Float32(-3.0), u3, u4) - u1), Float32(u3 * Float32(4.0))) - u4)), Float32(u3 - u1)))); else tmp = fma(amt, fma(amt, Float32(Float32(0.5) * Float32(u2 * fma(Float32(3.0), amt, Float32(-5.0)))), Float32(Float32(0.5) * Float32(u3 - u1))), Float32(u2 * Float32(1.52587890625e-5))); end return tmp end
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;u2 \leq -2.0000000276968557 \cdot 10^{+24}:\\ \;\;\;\;u2 \cdot \mathsf{fma}\left(0.5 \cdot \left(amt \cdot amt\right), \mathsf{fma}\left(3, amt, -5\right), 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{elif}\;u2 \leq 18000000404716257000:\\ \;\;\;\;amt \cdot \left(0.5 \cdot \mathsf{fma}\left(amt, \mathsf{fma}\left(2, u1, \mathsf{fma}\left(amt, \mathsf{fma}\left(-3, u3, u4\right) - u1, u3 \cdot 4\right) - u4\right), u3 - u1\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(amt, \mathsf{fma}\left(amt, 0.5 \cdot \left(u2 \cdot \mathsf{fma}\left(3, amt, -5\right)\right), 0.5 \cdot \left(u3 - u1\right)\right), u2 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \end{array} \end{array}
if u2 < -2.00000003e24
Initial program 42.0%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites86.9%
Taylor expanded in u2 around inf
Applied rewrites78.3%
if -2.00000003e24 < u2 < 1.80000004e19
Initial program 80.2%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites95.9%
Taylor expanded in u2 around 0
Applied rewrites82.0%
if 1.80000004e19 < u2
Initial program 72.4%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites95.5%
Taylor expanded in u2 around inf
Applied rewrites80.9%
Final simplification81.5%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (let* ((t_0 (* 0.5 (- u3 u1))) (t_1 (fma amt (fma amt (* 0.5 (* u2 (fma 3.0 amt -5.0))) t_0) (* u2 1.52587890625e-5)))) (if (<= u2 -1370.0) t_1 (if (<= u2 2000000.0) (fma amt (fma amt (* 0.5 (* u4 (+ amt -1.0))) t_0) (* u2 1.52587890625e-5)) t_1))))
float code(float u2, float u3, float u1, float amt, float u4) { float t_0 = 0.5f * (u3 - u1); float t_1 = fmaf(amt, fmaf(amt, (0.5f * (u2 * fmaf(3.0f, amt, -5.0f))), t_0), (u2 * 1.52587890625e-5f)); float tmp; if (u2 <= -1370.0f) { tmp = t_1; } else if (u2 <= 2000000.0f) { tmp = fmaf(amt, fmaf(amt, (0.5f * (u4 * (amt + -1.0f))), t_0), (u2 * 1.52587890625e-5f)); } else { tmp = t_1; } return tmp; }
function code(u2, u3, u1, amt, u4) t_0 = Float32(Float32(0.5) * Float32(u3 - u1)) t_1 = fma(amt, fma(amt, Float32(Float32(0.5) * Float32(u2 * fma(Float32(3.0), amt, Float32(-5.0)))), t_0), Float32(u2 * Float32(1.52587890625e-5))) tmp = Float32(0.0) if (u2 <= Float32(-1370.0)) tmp = t_1; elseif (u2 <= Float32(2000000.0)) tmp = fma(amt, fma(amt, Float32(Float32(0.5) * Float32(u4 * Float32(amt + Float32(-1.0)))), t_0), Float32(u2 * Float32(1.52587890625e-5))); else tmp = t_1; end return tmp end
\begin{array}{l} \\ \begin{array}{l} t_0 := 0.5 \cdot \left(u3 - u1\right)\\ t_1 := \mathsf{fma}\left(amt, \mathsf{fma}\left(amt, 0.5 \cdot \left(u2 \cdot \mathsf{fma}\left(3, amt, -5\right)\right), t_0\right), u2 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{if}\;u2 \leq -1370:\\ \;\;\;\;t_1\\ \mathbf{elif}\;u2 \leq 2000000:\\ \;\;\;\;\mathsf{fma}\left(amt, \mathsf{fma}\left(amt, 0.5 \cdot \left(u4 \cdot \left(amt + -1\right)\right), t_0\right), u2 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{else}:\\ \;\;\;\;t_1\\ \end{array} \end{array}
if u2 < -1370 or 2e6 < u2
Initial program 65.6%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites92.9%
Taylor expanded in u2 around inf
Applied rewrites57.2%
if -1370 < u2 < 2e6
Initial program 82.9%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.4%
Taylor expanded in u4 around inf
Applied rewrites47.9%
Final simplification51.9%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (if (<= u2 -5000000.0) (* u2 (fma (* 0.5 (* amt amt)) (fma 3.0 amt -5.0) 1.52587890625e-5)) (if (<= u2 -1.0000000272452012e-27) (* (* u3 amt) (fma (* amt 0.5) (fma -3.0 amt 4.0) 0.5)) (if (<= u2 5000000.0) (fma amt (* 0.5 (* (+ amt -1.0) (* amt u4))) (* u2 1.52587890625e-5)) (fma amt (* (* amt 0.5) (* u2 (fma 3.0 amt -5.0))) (* u2 1.52587890625e-5))))))
float code(float u2, float u3, float u1, float amt, float u4) { float tmp; if (u2 <= -5000000.0f) { tmp = u2 * fmaf((0.5f * (amt * amt)), fmaf(3.0f, amt, -5.0f), 1.52587890625e-5f); } else if (u2 <= -1.0000000272452012e-27f) { tmp = (u3 * amt) * fmaf((amt * 0.5f), fmaf(-3.0f, amt, 4.0f), 0.5f); } else if (u2 <= 5000000.0f) { tmp = fmaf(amt, (0.5f * ((amt + -1.0f) * (amt * u4))), (u2 * 1.52587890625e-5f)); } else { tmp = fmaf(amt, ((amt * 0.5f) * (u2 * fmaf(3.0f, amt, -5.0f))), (u2 * 1.52587890625e-5f)); } return tmp; }
function code(u2, u3, u1, amt, u4) tmp = Float32(0.0) if (u2 <= Float32(-5000000.0)) tmp = Float32(u2 * fma(Float32(Float32(0.5) * Float32(amt * amt)), fma(Float32(3.0), amt, Float32(-5.0)), Float32(1.52587890625e-5))); elseif (u2 <= Float32(-1.0000000272452012e-27)) tmp = Float32(Float32(u3 * amt) * fma(Float32(amt * Float32(0.5)), fma(Float32(-3.0), amt, Float32(4.0)), Float32(0.5))); elseif (u2 <= Float32(5000000.0)) tmp = fma(amt, Float32(Float32(0.5) * Float32(Float32(amt + Float32(-1.0)) * Float32(amt * u4))), Float32(u2 * Float32(1.52587890625e-5))); else tmp = fma(amt, Float32(Float32(amt * Float32(0.5)) * Float32(u2 * fma(Float32(3.0), amt, Float32(-5.0)))), Float32(u2 * Float32(1.52587890625e-5))); end return tmp end
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;u2 \leq -5000000:\\ \;\;\;\;u2 \cdot \mathsf{fma}\left(0.5 \cdot \left(amt \cdot amt\right), \mathsf{fma}\left(3, amt, -5\right), 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{elif}\;u2 \leq -1.0000000272452012 \cdot 10^{-27}:\\ \;\;\;\;\left(u3 \cdot amt\right) \cdot \mathsf{fma}\left(amt \cdot 0.5, \mathsf{fma}\left(-3, amt, 4\right), 0.5\right)\\ \mathbf{elif}\;u2 \leq 5000000:\\ \;\;\;\;\mathsf{fma}\left(amt, 0.5 \cdot \left(\left(amt + -1\right) \cdot \left(amt \cdot u4\right)\right), u2 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(amt, \left(amt \cdot 0.5\right) \cdot \left(u2 \cdot \mathsf{fma}\left(3, amt, -5\right)\right), u2 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \end{array} \end{array}
if u2 < -5e6
Initial program 63.3%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites90.8%
Taylor expanded in u2 around inf
Applied rewrites55.2%
if -5e6 < u2 < -1.00000003e-27
Initial program 83.1%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.1%
Taylor expanded in u3 around inf
Applied rewrites40.1%
if -1.00000003e-27 < u2 < 5e6
Initial program 82.3%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.6%
Taylor expanded in u4 around inf
Applied rewrites45.4%
if 5e6 < u2
Initial program 67.5%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites95.3%
Taylor expanded in u2 around inf
Applied rewrites57.0%
Final simplification48.3%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (if (<= u2 -200000.0) (* u2 (fma (* 0.5 (* amt amt)) (fma 3.0 amt -5.0) 1.52587890625e-5)) (if (<= u2 15000000.0) (fma amt (fma amt (* 0.5 (* u4 (+ amt -1.0))) (* 0.5 (- u3 u1))) (* u2 1.52587890625e-5)) (fma amt (* (* amt 0.5) (* u2 (fma 3.0 amt -5.0))) (* u2 1.52587890625e-5)))))
float code(float u2, float u3, float u1, float amt, float u4) { float tmp; if (u2 <= -200000.0f) { tmp = u2 * fmaf((0.5f * (amt * amt)), fmaf(3.0f, amt, -5.0f), 1.52587890625e-5f); } else if (u2 <= 15000000.0f) { tmp = fmaf(amt, fmaf(amt, (0.5f * (u4 * (amt + -1.0f))), (0.5f * (u3 - u1))), (u2 * 1.52587890625e-5f)); } else { tmp = fmaf(amt, ((amt * 0.5f) * (u2 * fmaf(3.0f, amt, -5.0f))), (u2 * 1.52587890625e-5f)); } return tmp; }
function code(u2, u3, u1, amt, u4) tmp = Float32(0.0) if (u2 <= Float32(-200000.0)) tmp = Float32(u2 * fma(Float32(Float32(0.5) * Float32(amt * amt)), fma(Float32(3.0), amt, Float32(-5.0)), Float32(1.52587890625e-5))); elseif (u2 <= Float32(15000000.0)) tmp = fma(amt, fma(amt, Float32(Float32(0.5) * Float32(u4 * Float32(amt + Float32(-1.0)))), Float32(Float32(0.5) * Float32(u3 - u1))), Float32(u2 * Float32(1.52587890625e-5))); else tmp = fma(amt, Float32(Float32(amt * Float32(0.5)) * Float32(u2 * fma(Float32(3.0), amt, Float32(-5.0)))), Float32(u2 * Float32(1.52587890625e-5))); end return tmp end
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;u2 \leq -200000:\\ \;\;\;\;u2 \cdot \mathsf{fma}\left(0.5 \cdot \left(amt \cdot amt\right), \mathsf{fma}\left(3, amt, -5\right), 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{elif}\;u2 \leq 15000000:\\ \;\;\;\;\mathsf{fma}\left(amt, \mathsf{fma}\left(amt, 0.5 \cdot \left(u4 \cdot \left(amt + -1\right)\right), 0.5 \cdot \left(u3 - u1\right)\right), u2 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(amt, \left(amt \cdot 0.5\right) \cdot \left(u2 \cdot \mathsf{fma}\left(3, amt, -5\right)\right), u2 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \end{array} \end{array}
if u2 < -2e5
Initial program 62.9%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites91.1%
Taylor expanded in u2 around inf
Applied rewrites54.1%
if -2e5 < u2 < 1.5e7
Initial program 82.5%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.1%
Taylor expanded in u4 around inf
Applied rewrites47.2%
if 1.5e7 < u2
Initial program 69.0%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.0%
Taylor expanded in u2 around inf
Applied rewrites58.1%
Final simplification50.8%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (if (<= u4 -1499999942100385800.0) (* (* u4 0.5) (fma amt (* amt amt) (* amt (- amt)))) (if (<= u4 39999999311872.0) (fma amt (fma amt (* 0.5 (* u1 (- 2.0 amt))) (* 0.5 (- u3 u1))) (* u2 1.52587890625e-5)) (* (* 0.5 (* amt amt)) (* u4 (+ amt -1.0))))))
float code(float u2, float u3, float u1, float amt, float u4) { float tmp; if (u4 <= -1499999942100385800.0f) { tmp = (u4 * 0.5f) * fmaf(amt, (amt * amt), (amt * -amt)); } else if (u4 <= 39999999311872.0f) { tmp = fmaf(amt, fmaf(amt, (0.5f * (u1 * (2.0f - amt))), (0.5f * (u3 - u1))), (u2 * 1.52587890625e-5f)); } else { tmp = (0.5f * (amt * amt)) * (u4 * (amt + -1.0f)); } return tmp; }
function code(u2, u3, u1, amt, u4) tmp = Float32(0.0) if (u4 <= Float32(-1499999942100385800.0)) tmp = Float32(Float32(u4 * Float32(0.5)) * fma(amt, Float32(amt * amt), Float32(amt * Float32(-amt)))); elseif (u4 <= Float32(39999999311872.0)) tmp = fma(amt, fma(amt, Float32(Float32(0.5) * Float32(u1 * Float32(Float32(2.0) - amt))), Float32(Float32(0.5) * Float32(u3 - u1))), Float32(u2 * Float32(1.52587890625e-5))); else tmp = Float32(Float32(Float32(0.5) * Float32(amt * amt)) * Float32(u4 * Float32(amt + Float32(-1.0)))); end return tmp end
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;u4 \leq -1499999942100385800:\\ \;\;\;\;\left(u4 \cdot 0.5\right) \cdot \mathsf{fma}\left(amt, amt \cdot amt, amt \cdot \left(-amt\right)\right)\\ \mathbf{elif}\;u4 \leq 39999999311872:\\ \;\;\;\;\mathsf{fma}\left(amt, \mathsf{fma}\left(amt, 0.5 \cdot \left(u1 \cdot \left(2 - amt\right)\right), 0.5 \cdot \left(u3 - u1\right)\right), u2 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{else}:\\ \;\;\;\;\left(0.5 \cdot \left(amt \cdot amt\right)\right) \cdot \left(u4 \cdot \left(amt + -1\right)\right)\\ \end{array} \end{array}
if u4 < -1.4999999e18
Initial program 59.6%
Taylor expanded in u2 around 0
+-commutative
N/A
distribute-lft-in
N/A
distribute-lft-out
N/A
associate-*r*
N/A
metadata-eval
N/A
associate-*r*
N/A
metadata-eval
N/A
*-commutative
N/A
associate-*r*
N/A
*-commutative
N/A
Applied rewrites83.5%
Taylor expanded in u4 around inf
Applied rewrites68.0%
if -1.4999999e18 < u4 < 3.99999993e13
Initial program 77.7%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites93.9%
Taylor expanded in u1 around inf
Applied rewrites36.0%
if 3.99999993e13 < u4
Initial program 79.5%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.5%
Taylor expanded in u4 around inf
Applied rewrites62.4%
Final simplification45.3%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (let* ((t_0 (* u2 (fma (* 0.5 (* amt amt)) (fma 3.0 amt -5.0) 1.52587890625e-5)))) (if (<= u2 -5000000.0) t_0 (if (<= u2 -1.0000000272452012e-27) (* (* u3 amt) (fma (* amt 0.5) (fma -3.0 amt 4.0) 0.5)) (if (<= u2 5000000.0) (fma amt (* 0.5 (* (+ amt -1.0) (* amt u4))) (* u2 1.52587890625e-5)) t_0)))))
float code(float u2, float u3, float u1, float amt, float u4) { float t_0 = u2 * fmaf((0.5f * (amt * amt)), fmaf(3.0f, amt, -5.0f), 1.52587890625e-5f); float tmp; if (u2 <= -5000000.0f) { tmp = t_0; } else if (u2 <= -1.0000000272452012e-27f) { tmp = (u3 * amt) * fmaf((amt * 0.5f), fmaf(-3.0f, amt, 4.0f), 0.5f); } else if (u2 <= 5000000.0f) { tmp = fmaf(amt, (0.5f * ((amt + -1.0f) * (amt * u4))), (u2 * 1.52587890625e-5f)); } else { tmp = t_0; } return tmp; }
function code(u2, u3, u1, amt, u4) t_0 = Float32(u2 * fma(Float32(Float32(0.5) * Float32(amt * amt)), fma(Float32(3.0), amt, Float32(-5.0)), Float32(1.52587890625e-5))) tmp = Float32(0.0) if (u2 <= Float32(-5000000.0)) tmp = t_0; elseif (u2 <= Float32(-1.0000000272452012e-27)) tmp = Float32(Float32(u3 * amt) * fma(Float32(amt * Float32(0.5)), fma(Float32(-3.0), amt, Float32(4.0)), Float32(0.5))); elseif (u2 <= Float32(5000000.0)) tmp = fma(amt, Float32(Float32(0.5) * Float32(Float32(amt + Float32(-1.0)) * Float32(amt * u4))), Float32(u2 * Float32(1.52587890625e-5))); else tmp = t_0; end return tmp end
\begin{array}{l} \\ \begin{array}{l} t_0 := u2 \cdot \mathsf{fma}\left(0.5 \cdot \left(amt \cdot amt\right), \mathsf{fma}\left(3, amt, -5\right), 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{if}\;u2 \leq -5000000:\\ \;\;\;\;t_0\\ \mathbf{elif}\;u2 \leq -1.0000000272452012 \cdot 10^{-27}:\\ \;\;\;\;\left(u3 \cdot amt\right) \cdot \mathsf{fma}\left(amt \cdot 0.5, \mathsf{fma}\left(-3, amt, 4\right), 0.5\right)\\ \mathbf{elif}\;u2 \leq 5000000:\\ \;\;\;\;\mathsf{fma}\left(amt, 0.5 \cdot \left(\left(amt + -1\right) \cdot \left(amt \cdot u4\right)\right), u2 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{else}:\\ \;\;\;\;t_0\\ \end{array} \end{array}
if u2 < -5e6 or 5e6 < u2
Initial program 65.2%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites92.8%
Taylor expanded in u2 around inf
Applied rewrites56.0%
if -5e6 < u2 < -1.00000003e-27
Initial program 83.1%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.1%
Taylor expanded in u3 around inf
Applied rewrites40.1%
if -1.00000003e-27 < u2 < 5e6
Initial program 82.3%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.6%
Taylor expanded in u4 around inf
Applied rewrites45.4%
Final simplification48.3%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (let* ((t_0 (* 0.5 (* amt amt))) (t_1 (* u2 (fma t_0 (fma 3.0 amt -5.0) 1.52587890625e-5)))) (if (<= u2 -5000000.0) t_1 (if (<= u2 -1.0000000272452012e-27) (* (* u3 amt) (fma (* amt 0.5) (fma -3.0 amt 4.0) 0.5)) (if (<= u2 5000000.0) (* t_0 (* u4 (+ amt -1.0))) t_1)))))
float code(float u2, float u3, float u1, float amt, float u4) { float t_0 = 0.5f * (amt * amt); float t_1 = u2 * fmaf(t_0, fmaf(3.0f, amt, -5.0f), 1.52587890625e-5f); float tmp; if (u2 <= -5000000.0f) { tmp = t_1; } else if (u2 <= -1.0000000272452012e-27f) { tmp = (u3 * amt) * fmaf((amt * 0.5f), fmaf(-3.0f, amt, 4.0f), 0.5f); } else if (u2 <= 5000000.0f) { tmp = t_0 * (u4 * (amt + -1.0f)); } else { tmp = t_1; } return tmp; }
function code(u2, u3, u1, amt, u4) t_0 = Float32(Float32(0.5) * Float32(amt * amt)) t_1 = Float32(u2 * fma(t_0, fma(Float32(3.0), amt, Float32(-5.0)), Float32(1.52587890625e-5))) tmp = Float32(0.0) if (u2 <= Float32(-5000000.0)) tmp = t_1; elseif (u2 <= Float32(-1.0000000272452012e-27)) tmp = Float32(Float32(u3 * amt) * fma(Float32(amt * Float32(0.5)), fma(Float32(-3.0), amt, Float32(4.0)), Float32(0.5))); elseif (u2 <= Float32(5000000.0)) tmp = Float32(t_0 * Float32(u4 * Float32(amt + Float32(-1.0)))); else tmp = t_1; end return tmp end
\begin{array}{l} \\ \begin{array}{l} t_0 := 0.5 \cdot \left(amt \cdot amt\right)\\ t_1 := u2 \cdot \mathsf{fma}\left(t_0, \mathsf{fma}\left(3, amt, -5\right), 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{if}\;u2 \leq -5000000:\\ \;\;\;\;t_1\\ \mathbf{elif}\;u2 \leq -1.0000000272452012 \cdot 10^{-27}:\\ \;\;\;\;\left(u3 \cdot amt\right) \cdot \mathsf{fma}\left(amt \cdot 0.5, \mathsf{fma}\left(-3, amt, 4\right), 0.5\right)\\ \mathbf{elif}\;u2 \leq 5000000:\\ \;\;\;\;t_0 \cdot \left(u4 \cdot \left(amt + -1\right)\right)\\ \mathbf{else}:\\ \;\;\;\;t_1\\ \end{array} \end{array}
if u2 < -5e6 or 5e6 < u2
Initial program 65.2%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites92.8%
Taylor expanded in u2 around inf
Applied rewrites56.0%
if -5e6 < u2 < -1.00000003e-27
Initial program 83.1%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.1%
Taylor expanded in u3 around inf
Applied rewrites40.1%
if -1.00000003e-27 < u2 < 5e6
Initial program 82.3%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.6%
Taylor expanded in u4 around inf
Applied rewrites45.4%
Final simplification48.3%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (let* ((t_0 (* 0.5 (* amt amt))) (t_1 (* u2 (fma t_0 (fma 3.0 amt -5.0) 1.52587890625e-5)))) (if (<= u2 -1370.0) t_1 (if (<= u2 5000000.0) (* t_0 (* u4 (+ amt -1.0))) t_1))))
float code(float u2, float u3, float u1, float amt, float u4) { float t_0 = 0.5f * (amt * amt); float t_1 = u2 * fmaf(t_0, fmaf(3.0f, amt, -5.0f), 1.52587890625e-5f); float tmp; if (u2 <= -1370.0f) { tmp = t_1; } else if (u2 <= 5000000.0f) { tmp = t_0 * (u4 * (amt + -1.0f)); } else { tmp = t_1; } return tmp; }
function code(u2, u3, u1, amt, u4) t_0 = Float32(Float32(0.5) * Float32(amt * amt)) t_1 = Float32(u2 * fma(t_0, fma(Float32(3.0), amt, Float32(-5.0)), Float32(1.52587890625e-5))) tmp = Float32(0.0) if (u2 <= Float32(-1370.0)) tmp = t_1; elseif (u2 <= Float32(5000000.0)) tmp = Float32(t_0 * Float32(u4 * Float32(amt + Float32(-1.0)))); else tmp = t_1; end return tmp end
\begin{array}{l} \\ \begin{array}{l} t_0 := 0.5 \cdot \left(amt \cdot amt\right)\\ t_1 := u2 \cdot \mathsf{fma}\left(t_0, \mathsf{fma}\left(3, amt, -5\right), 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{if}\;u2 \leq -1370:\\ \;\;\;\;t_1\\ \mathbf{elif}\;u2 \leq 5000000:\\ \;\;\;\;t_0 \cdot \left(u4 \cdot \left(amt + -1\right)\right)\\ \mathbf{else}:\\ \;\;\;\;t_1\\ \end{array} \end{array}
if u2 < -1370 or 5e6 < u2
Initial program 65.4%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites92.9%
Taylor expanded in u2 around inf
Applied rewrites54.7%
if -1370 < u2 < 5e6
Initial program 82.9%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.4%
Taylor expanded in u4 around inf
Applied rewrites37.6%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (let* ((t_0 (* (* 0.5 (* amt amt)) (* u4 (+ amt -1.0))))) (if (<= u4 -50000000188416.0) t_0 (if (<= u4 39999999311872.0) (* amt (* (- u1) (fma 0.5 (* amt (+ amt -2.0)) 0.5))) t_0))))
float code(float u2, float u3, float u1, float amt, float u4) { float t_0 = (0.5f * (amt * amt)) * (u4 * (amt + -1.0f)); float tmp; if (u4 <= -50000000188416.0f) { tmp = t_0; } else if (u4 <= 39999999311872.0f) { tmp = amt * (-u1 * fmaf(0.5f, (amt * (amt + -2.0f)), 0.5f)); } else { tmp = t_0; } return tmp; }
function code(u2, u3, u1, amt, u4) t_0 = Float32(Float32(Float32(0.5) * Float32(amt * amt)) * Float32(u4 * Float32(amt + Float32(-1.0)))) tmp = Float32(0.0) if (u4 <= Float32(-50000000188416.0)) tmp = t_0; elseif (u4 <= Float32(39999999311872.0)) tmp = Float32(amt * Float32(Float32(-u1) * fma(Float32(0.5), Float32(amt * Float32(amt + Float32(-2.0))), Float32(0.5)))); else tmp = t_0; end return tmp end
\begin{array}{l} \\ \begin{array}{l} t_0 := \left(0.5 \cdot \left(amt \cdot amt\right)\right) \cdot \left(u4 \cdot \left(amt + -1\right)\right)\\ \mathbf{if}\;u4 \leq -50000000188416:\\ \;\;\;\;t_0\\ \mathbf{elif}\;u4 \leq 39999999311872:\\ \;\;\;\;amt \cdot \left(\left(-u1\right) \cdot \mathsf{fma}\left(0.5, amt \cdot \left(amt + -2\right), 0.5\right)\right)\\ \mathbf{else}:\\ \;\;\;\;t_0\\ \end{array} \end{array}
if u4 < -5.00000002e13 or 3.99999993e13 < u4
Initial program 71.2%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.0%
Taylor expanded in u4 around inf
Applied rewrites59.6%
if -5.00000002e13 < u4 < 3.99999993e13
Initial program 77.9%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites94.3%
Taylor expanded in u1 around -inf
Applied rewrites31.9%
Final simplification41.8%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (let* ((t_0 (* (* 0.5 (* amt amt)) (* u4 (+ amt -1.0))))) (if (<= u4 -50000000188416.0) t_0 (if (<= u4 39999999311872.0) (* (* u1 amt) (fma 0.5 (* amt (- 2.0 amt)) -0.5)) t_0))))
float code(float u2, float u3, float u1, float amt, float u4) { float t_0 = (0.5f * (amt * amt)) * (u4 * (amt + -1.0f)); float tmp; if (u4 <= -50000000188416.0f) { tmp = t_0; } else if (u4 <= 39999999311872.0f) { tmp = (u1 * amt) * fmaf(0.5f, (amt * (2.0f - amt)), -0.5f); } else { tmp = t_0; } return tmp; }
function code(u2, u3, u1, amt, u4) t_0 = Float32(Float32(Float32(0.5) * Float32(amt * amt)) * Float32(u4 * Float32(amt + Float32(-1.0)))) tmp = Float32(0.0) if (u4 <= Float32(-50000000188416.0)) tmp = t_0; elseif (u4 <= Float32(39999999311872.0)) tmp = Float32(Float32(u1 * amt) * fma(Float32(0.5), Float32(amt * Float32(Float32(2.0) - amt)), Float32(-0.5))); else tmp = t_0; end return tmp end
\begin{array}{l} \\ \begin{array}{l} t_0 := \left(0.5 \cdot \left(amt \cdot amt\right)\right) \cdot \left(u4 \cdot \left(amt + -1\right)\right)\\ \mathbf{if}\;u4 \leq -50000000188416:\\ \;\;\;\;t_0\\ \mathbf{elif}\;u4 \leq 39999999311872:\\ \;\;\;\;\left(u1 \cdot amt\right) \cdot \mathsf{fma}\left(0.5, amt \cdot \left(2 - amt\right), -0.5\right)\\ \mathbf{else}:\\ \;\;\;\;t_0\\ \end{array} \end{array}
if u4 < -5.00000002e13 or 3.99999993e13 < u4
Initial program 71.2%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.0%
Taylor expanded in u4 around inf
Applied rewrites59.6%
if -5.00000002e13 < u4 < 3.99999993e13
Initial program 77.9%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites94.3%
Taylor expanded in u1 around inf
Applied rewrites31.9%
Final simplification41.7%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (* (* 0.5 (* amt amt)) (* u4 (+ amt -1.0))))
float code(float u2, float u3, float u1, float amt, float u4) { return (0.5f * (amt * amt)) * (u4 * (amt + -1.0f)); }
real(4) function code(u2, u3, u1, amt, u4) real(4), intent (in) :: u2 real(4), intent (in) :: u3 real(4), intent (in) :: u1 real(4), intent (in) :: amt real(4), intent (in) :: u4 code = (0.5e0 * (amt * amt)) * (u4 * (amt + (-1.0e0))) end function
function code(u2, u3, u1, amt, u4) return Float32(Float32(Float32(0.5) * Float32(amt * amt)) * Float32(u4 * Float32(amt + Float32(-1.0)))) end
function tmp = code(u2, u3, u1, amt, u4) tmp = (single(0.5) * (amt * amt)) * (u4 * (amt + single(-1.0))); end
\begin{array}{l} \\ \left(0.5 \cdot \left(amt \cdot amt\right)\right) \cdot \left(u4 \cdot \left(amt + -1\right)\right) \end{array}
Initial program 75.5%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites94.9%
Taylor expanded in u4 around inf
Applied rewrites27.5%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (* (- u3 u1) (* amt 0.5)))
float code(float u2, float u3, float u1, float amt, float u4) { return (u3 - u1) * (amt * 0.5f); }
real(4) function code(u2, u3, u1, amt, u4) real(4), intent (in) :: u2 real(4), intent (in) :: u3 real(4), intent (in) :: u1 real(4), intent (in) :: amt real(4), intent (in) :: u4 code = (u3 - u1) * (amt * 0.5e0) end function
function code(u2, u3, u1, amt, u4) return Float32(Float32(u3 - u1) * Float32(amt * Float32(0.5))) end
function tmp = code(u2, u3, u1, amt, u4) tmp = (u3 - u1) * (amt * single(0.5)); end
\begin{array}{l} \\ \left(u3 - u1\right) \cdot \left(amt \cdot 0.5\right) \end{array}
Initial program 75.5%
Taylor expanded in u2 around 0
+-commutative
N/A
distribute-lft-in
N/A
distribute-lft-out
N/A
associate-*r*
N/A
metadata-eval
N/A
associate-*r*
N/A
metadata-eval
N/A
*-commutative
N/A
associate-*r*
N/A
*-commutative
N/A
Applied rewrites67.4%
Taylor expanded in amt around 0
Applied rewrites14.9%
Final simplification14.9%
(FPCore (u2 u3 u1 amt u4) :precision binary32 (* u2 1.52587890625e-5))
float code(float u2, float u3, float u1, float amt, float u4) { return u2 * 1.52587890625e-5f; }
real(4) function code(u2, u3, u1, amt, u4) real(4), intent (in) :: u2 real(4), intent (in) :: u3 real(4), intent (in) :: u1 real(4), intent (in) :: amt real(4), intent (in) :: u4 code = u2 * 1.52587890625e-5 end function
function code(u2, u3, u1, amt, u4) return Float32(u2 * Float32(1.52587890625e-5)) end
function tmp = code(u2, u3, u1, amt, u4) tmp = u2 * single(1.52587890625e-5); end
\begin{array}{l} \\ u2 \cdot 1.52587890625 \cdot 10^{-5} \end{array}
Initial program 75.5%
Taylor expanded in amt around 0
*-commutative
N/A
lower-*.f32
4.4
Applied rewrites4.4%
herbie shell --seed 5
(FPCore (u2 u3 u1 amt u4)
:name "(* 7.62939453125e-6 (+ (+ (+ (* 2.0 u2) (* (- u3 u1) (* amt 65536))) (* (- (+ (- (* 2.0 u1) (* 5.0 u2)) (* 4.0 u3)) u4) (* (pow amt 2) 65536))) (* (+ (- (- (* 3.0 u2) u1) (* 3.0 u3)) u4) (* (pow amt 3) 65536))))"
:precision binary32
:pre (and (<= 0.5 amt) (<= amt 1.0))
(* 7.62939453125e-6 (+ (+ (+ (* 2.0 u2) (* (- u3 u1) (* amt 65536.0))) (* (- (+ (- (* 2.0 u1) (* 5.0 u2)) (* 4.0 u3)) u4) (* (pow amt 2.0) 65536.0))) (* (+ (- (- (* 3.0 u2) u1) (* 3.0 u3)) u4) (* (pow amt 3.0) 65536.0)))))