(FPCore (P0 P1 amt V1 V0) :precision binary32 (/ (+ (+ (+ P0 (* P1 (* amt 65536.0))) (* (- (- (* 3.0 (- P1 P0)) V1) (* 2.0 V0)) (* (pow amt 2.0) 65536.0))) (* (+ (+ (* 2.0 (- P0 P1)) V0) V1) (* (pow amt 3.0) 65536.0))) 65536.0))
float code(float P0, float P1, float amt, float V1, float V0) { return (((P0 + (P1 * (amt * 65536.0f))) + ((((3.0f * (P1 - P0)) - V1) - (2.0f * V0)) * (powf(amt, 2.0f) * 65536.0f))) + ((((2.0f * (P0 - P1)) + V0) + V1) * (powf(amt, 3.0f) * 65536.0f))) / 65536.0f; }
real(4) function code(p0, p1, amt, v1, v0) real(4), intent (in) :: p0 real(4), intent (in) :: p1 real(4), intent (in) :: amt real(4), intent (in) :: v1 real(4), intent (in) :: v0 code = (((p0 + (p1 * (amt * 65536.0e0))) + ((((3.0e0 * (p1 - p0)) - v1) - (2.0e0 * v0)) * ((amt ** 2.0e0) * 65536.0e0))) + ((((2.0e0 * (p0 - p1)) + v0) + v1) * ((amt ** 3.0e0) * 65536.0e0))) / 65536.0e0 end function
function code(P0, P1, amt, V1, V0) return Float32(Float32(Float32(Float32(P0 + Float32(P1 * Float32(amt * Float32(65536.0)))) + Float32(Float32(Float32(Float32(Float32(3.0) * Float32(P1 - P0)) - V1) - Float32(Float32(2.0) * V0)) * Float32((amt ^ Float32(2.0)) * Float32(65536.0)))) + Float32(Float32(Float32(Float32(Float32(2.0) * Float32(P0 - P1)) + V0) + V1) * Float32((amt ^ Float32(3.0)) * Float32(65536.0)))) / Float32(65536.0)) end
function tmp = code(P0, P1, amt, V1, V0) tmp = (((P0 + (P1 * (amt * single(65536.0)))) + ((((single(3.0) * (P1 - P0)) - V1) - (single(2.0) * V0)) * ((amt ^ single(2.0)) * single(65536.0)))) + ((((single(2.0) * (P0 - P1)) + V0) + V1) * ((amt ^ single(3.0)) * single(65536.0)))) / single(65536.0); end
\begin{array}{l} \\ \frac{\left(\left(P0 + P1 \cdot \left(amt \cdot 65536\right)\right) + \left(\left(3 \cdot \left(P1 - P0\right) - V1\right) - 2 \cdot V0\right) \cdot \left({amt}^{2} \cdot 65536\right)\right) + \left(\left(2 \cdot \left(P0 - P1\right) + V0\right) + V1\right) \cdot \left({amt}^{3} \cdot 65536\right)}{65536} \end{array}
Sampling outcomes in binary32 precision:
Herbie found 17 alternatives:
Alternative | Accuracy | Speedup |
---|
(FPCore (P0 P1 amt V1 V0) :precision binary32 (/ (+ (+ (+ P0 (* P1 (* amt 65536.0))) (* (- (- (* 3.0 (- P1 P0)) V1) (* 2.0 V0)) (* (pow amt 2.0) 65536.0))) (* (+ (+ (* 2.0 (- P0 P1)) V0) V1) (* (pow amt 3.0) 65536.0))) 65536.0))
float code(float P0, float P1, float amt, float V1, float V0) { return (((P0 + (P1 * (amt * 65536.0f))) + ((((3.0f * (P1 - P0)) - V1) - (2.0f * V0)) * (powf(amt, 2.0f) * 65536.0f))) + ((((2.0f * (P0 - P1)) + V0) + V1) * (powf(amt, 3.0f) * 65536.0f))) / 65536.0f; }
real(4) function code(p0, p1, amt, v1, v0) real(4), intent (in) :: p0 real(4), intent (in) :: p1 real(4), intent (in) :: amt real(4), intent (in) :: v1 real(4), intent (in) :: v0 code = (((p0 + (p1 * (amt * 65536.0e0))) + ((((3.0e0 * (p1 - p0)) - v1) - (2.0e0 * v0)) * ((amt ** 2.0e0) * 65536.0e0))) + ((((2.0e0 * (p0 - p1)) + v0) + v1) * ((amt ** 3.0e0) * 65536.0e0))) / 65536.0e0 end function
function code(P0, P1, amt, V1, V0) return Float32(Float32(Float32(Float32(P0 + Float32(P1 * Float32(amt * Float32(65536.0)))) + Float32(Float32(Float32(Float32(Float32(3.0) * Float32(P1 - P0)) - V1) - Float32(Float32(2.0) * V0)) * Float32((amt ^ Float32(2.0)) * Float32(65536.0)))) + Float32(Float32(Float32(Float32(Float32(2.0) * Float32(P0 - P1)) + V0) + V1) * Float32((amt ^ Float32(3.0)) * Float32(65536.0)))) / Float32(65536.0)) end
function tmp = code(P0, P1, amt, V1, V0) tmp = (((P0 + (P1 * (amt * single(65536.0)))) + ((((single(3.0) * (P1 - P0)) - V1) - (single(2.0) * V0)) * ((amt ^ single(2.0)) * single(65536.0)))) + ((((single(2.0) * (P0 - P1)) + V0) + V1) * ((amt ^ single(3.0)) * single(65536.0)))) / single(65536.0); end
\begin{array}{l} \\ \frac{\left(\left(P0 + P1 \cdot \left(amt \cdot 65536\right)\right) + \left(\left(3 \cdot \left(P1 - P0\right) - V1\right) - 2 \cdot V0\right) \cdot \left({amt}^{2} \cdot 65536\right)\right) + \left(\left(2 \cdot \left(P0 - P1\right) + V0\right) + V1\right) \cdot \left({amt}^{3} \cdot 65536\right)}{65536} \end{array}
(FPCore (P0 P1 amt V1 V0) :precision binary32 (fma amt (fma amt (fma V0 -2.0 (fma 3.0 (- P1 P0) (fma amt (fma 2.0 (- P0 P1) V0) (* V1 (+ amt -1.0))))) P1) (* P0 1.52587890625e-5)))
float code(float P0, float P1, float amt, float V1, float V0) { return fmaf(amt, fmaf(amt, fmaf(V0, -2.0f, fmaf(3.0f, (P1 - P0), fmaf(amt, fmaf(2.0f, (P0 - P1), V0), (V1 * (amt + -1.0f))))), P1), (P0 * 1.52587890625e-5f)); }
function code(P0, P1, amt, V1, V0) return fma(amt, fma(amt, fma(V0, Float32(-2.0), fma(Float32(3.0), Float32(P1 - P0), fma(amt, fma(Float32(2.0), Float32(P0 - P1), V0), Float32(V1 * Float32(amt + Float32(-1.0)))))), P1), Float32(P0 * Float32(1.52587890625e-5))) end
\begin{array}{l} \\ \mathsf{fma}\left(amt, \mathsf{fma}\left(amt, \mathsf{fma}\left(V0, -2, \mathsf{fma}\left(3, P1 - P0, \mathsf{fma}\left(amt, \mathsf{fma}\left(2, P0 - P1, V0\right), V1 \cdot \left(amt + -1\right)\right)\right)\right), P1\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right) \end{array}
Initial program 75.2%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.5%
Taylor expanded in V1 around 0
Applied rewrites98.0%
(FPCore (P0 P1 amt V1 V0) :precision binary32 (if (<= P1 -500000000.0) (fma amt (fma amt (fma V0 -2.0 (fma amt (fma 2.0 (- P0 P1) V0) (* 3.0 (- P1 P0)))) P1) (* P0 1.52587890625e-5)) (if (<= P1 49999999215337470.0) (fma (* amt amt) (fma P0 -3.0 (- (fma amt (+ V0 (fma 2.0 P0 V1)) (* V0 -2.0)) V1)) (* P0 1.52587890625e-5)) (fma amt (fma amt (fma 3.0 (- P1 P0) (fma amt (fma 2.0 (- P0 P1) V1) (- V1))) P1) (* P0 1.52587890625e-5)))))
float code(float P0, float P1, float amt, float V1, float V0) { float tmp; if (P1 <= -500000000.0f) { tmp = fmaf(amt, fmaf(amt, fmaf(V0, -2.0f, fmaf(amt, fmaf(2.0f, (P0 - P1), V0), (3.0f * (P1 - P0)))), P1), (P0 * 1.52587890625e-5f)); } else if (P1 <= 49999999215337470.0f) { tmp = fmaf((amt * amt), fmaf(P0, -3.0f, (fmaf(amt, (V0 + fmaf(2.0f, P0, V1)), (V0 * -2.0f)) - V1)), (P0 * 1.52587890625e-5f)); } else { tmp = fmaf(amt, fmaf(amt, fmaf(3.0f, (P1 - P0), fmaf(amt, fmaf(2.0f, (P0 - P1), V1), -V1)), P1), (P0 * 1.52587890625e-5f)); } return tmp; }
function code(P0, P1, amt, V1, V0) tmp = Float32(0.0) if (P1 <= Float32(-500000000.0)) tmp = fma(amt, fma(amt, fma(V0, Float32(-2.0), fma(amt, fma(Float32(2.0), Float32(P0 - P1), V0), Float32(Float32(3.0) * Float32(P1 - P0)))), P1), Float32(P0 * Float32(1.52587890625e-5))); elseif (P1 <= Float32(49999999215337470.0)) tmp = fma(Float32(amt * amt), fma(P0, Float32(-3.0), Float32(fma(amt, Float32(V0 + fma(Float32(2.0), P0, V1)), Float32(V0 * Float32(-2.0))) - V1)), Float32(P0 * Float32(1.52587890625e-5))); else tmp = fma(amt, fma(amt, fma(Float32(3.0), Float32(P1 - P0), fma(amt, fma(Float32(2.0), Float32(P0 - P1), V1), Float32(-V1))), P1), Float32(P0 * Float32(1.52587890625e-5))); end return tmp end
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;P1 \leq -500000000:\\ \;\;\;\;\mathsf{fma}\left(amt, \mathsf{fma}\left(amt, \mathsf{fma}\left(V0, -2, \mathsf{fma}\left(amt, \mathsf{fma}\left(2, P0 - P1, V0\right), 3 \cdot \left(P1 - P0\right)\right)\right), P1\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{elif}\;P1 \leq 49999999215337470:\\ \;\;\;\;\mathsf{fma}\left(amt \cdot amt, \mathsf{fma}\left(P0, -3, \mathsf{fma}\left(amt, V0 + \mathsf{fma}\left(2, P0, V1\right), V0 \cdot -2\right) - V1\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(amt, \mathsf{fma}\left(amt, \mathsf{fma}\left(3, P1 - P0, \mathsf{fma}\left(amt, \mathsf{fma}\left(2, P0 - P1, V1\right), -V1\right)\right), P1\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \end{array} \end{array}
if P1 < -5e8
Initial program 74.1%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.2%
Taylor expanded in V1 around 0
Applied rewrites86.1%
if -5e8 < P1 < 4.99999992e16
Initial program 79.4%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.2%
Taylor expanded in P1 around 0
Applied rewrites89.7%
if 4.99999992e16 < P1
Initial program 50.6%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites98.3%
Taylor expanded in V0 around 0
Applied rewrites93.5%
Final simplification89.5%
(FPCore (P0 P1 amt V1 V0) :precision binary32 (if (<= P1 -4999999913984.0) (* amt (fma amt (fma V0 -2.0 (- (fma amt (+ V0 (fma P1 -2.0 V1)) (* P1 3.0)) V1)) P1)) (if (<= P1 49999999215337470.0) (fma (* amt amt) (fma P0 -3.0 (- (fma amt (+ V0 (fma 2.0 P0 V1)) (* V0 -2.0)) V1)) (* P0 1.52587890625e-5)) (fma amt (fma amt (fma 3.0 (- P1 P0) (fma amt (fma 2.0 (- P0 P1) V1) (- V1))) P1) (* P0 1.52587890625e-5)))))
float code(float P0, float P1, float amt, float V1, float V0) { float tmp; if (P1 <= -4999999913984.0f) { tmp = amt * fmaf(amt, fmaf(V0, -2.0f, (fmaf(amt, (V0 + fmaf(P1, -2.0f, V1)), (P1 * 3.0f)) - V1)), P1); } else if (P1 <= 49999999215337470.0f) { tmp = fmaf((amt * amt), fmaf(P0, -3.0f, (fmaf(amt, (V0 + fmaf(2.0f, P0, V1)), (V0 * -2.0f)) - V1)), (P0 * 1.52587890625e-5f)); } else { tmp = fmaf(amt, fmaf(amt, fmaf(3.0f, (P1 - P0), fmaf(amt, fmaf(2.0f, (P0 - P1), V1), -V1)), P1), (P0 * 1.52587890625e-5f)); } return tmp; }
function code(P0, P1, amt, V1, V0) tmp = Float32(0.0) if (P1 <= Float32(-4999999913984.0)) tmp = Float32(amt * fma(amt, fma(V0, Float32(-2.0), Float32(fma(amt, Float32(V0 + fma(P1, Float32(-2.0), V1)), Float32(P1 * Float32(3.0))) - V1)), P1)); elseif (P1 <= Float32(49999999215337470.0)) tmp = fma(Float32(amt * amt), fma(P0, Float32(-3.0), Float32(fma(amt, Float32(V0 + fma(Float32(2.0), P0, V1)), Float32(V0 * Float32(-2.0))) - V1)), Float32(P0 * Float32(1.52587890625e-5))); else tmp = fma(amt, fma(amt, fma(Float32(3.0), Float32(P1 - P0), fma(amt, fma(Float32(2.0), Float32(P0 - P1), V1), Float32(-V1))), P1), Float32(P0 * Float32(1.52587890625e-5))); end return tmp end
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;P1 \leq -4999999913984:\\ \;\;\;\;amt \cdot \mathsf{fma}\left(amt, \mathsf{fma}\left(V0, -2, \mathsf{fma}\left(amt, V0 + \mathsf{fma}\left(P1, -2, V1\right), P1 \cdot 3\right) - V1\right), P1\right)\\ \mathbf{elif}\;P1 \leq 49999999215337470:\\ \;\;\;\;\mathsf{fma}\left(amt \cdot amt, \mathsf{fma}\left(P0, -3, \mathsf{fma}\left(amt, V0 + \mathsf{fma}\left(2, P0, V1\right), V0 \cdot -2\right) - V1\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(amt, \mathsf{fma}\left(amt, \mathsf{fma}\left(3, P1 - P0, \mathsf{fma}\left(amt, \mathsf{fma}\left(2, P0 - P1, V1\right), -V1\right)\right), P1\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \end{array} \end{array}
if P1 < -4999999910000
Initial program 67.7%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites95.8%
Taylor expanded in P0 around 0
Applied rewrites83.8%
if -4999999910000 < P1 < 4.99999992e16
Initial program 80.2%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.3%
Taylor expanded in P1 around 0
Applied rewrites89.0%
if 4.99999992e16 < P1
Initial program 50.6%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites98.3%
Taylor expanded in V0 around 0
Applied rewrites93.5%
Final simplification88.9%
(FPCore (P0 P1 amt V1 V0) :precision binary32 (let* ((t_0 (* amt (fma amt (fma V0 -2.0 (- (fma amt (+ V0 (fma P1 -2.0 V1)) (* P1 3.0)) V1)) P1)))) (if (<= V0 -2.0000000400817547e+20) t_0 (if (<= V0 39999999311872.0) (fma amt (fma amt (fma 3.0 (- P1 P0) (fma amt (fma 2.0 (- P0 P1) V1) (- V1))) P1) (* P0 1.52587890625e-5)) t_0))))
float code(float P0, float P1, float amt, float V1, float V0) { float t_0 = amt * fmaf(amt, fmaf(V0, -2.0f, (fmaf(amt, (V0 + fmaf(P1, -2.0f, V1)), (P1 * 3.0f)) - V1)), P1); float tmp; if (V0 <= -2.0000000400817547e+20f) { tmp = t_0; } else if (V0 <= 39999999311872.0f) { tmp = fmaf(amt, fmaf(amt, fmaf(3.0f, (P1 - P0), fmaf(amt, fmaf(2.0f, (P0 - P1), V1), -V1)), P1), (P0 * 1.52587890625e-5f)); } else { tmp = t_0; } return tmp; }
function code(P0, P1, amt, V1, V0) t_0 = Float32(amt * fma(amt, fma(V0, Float32(-2.0), Float32(fma(amt, Float32(V0 + fma(P1, Float32(-2.0), V1)), Float32(P1 * Float32(3.0))) - V1)), P1)) tmp = Float32(0.0) if (V0 <= Float32(-2.0000000400817547e+20)) tmp = t_0; elseif (V0 <= Float32(39999999311872.0)) tmp = fma(amt, fma(amt, fma(Float32(3.0), Float32(P1 - P0), fma(amt, fma(Float32(2.0), Float32(P0 - P1), V1), Float32(-V1))), P1), Float32(P0 * Float32(1.52587890625e-5))); else tmp = t_0; end return tmp end
\begin{array}{l} \\ \begin{array}{l} t_0 := amt \cdot \mathsf{fma}\left(amt, \mathsf{fma}\left(V0, -2, \mathsf{fma}\left(amt, V0 + \mathsf{fma}\left(P1, -2, V1\right), P1 \cdot 3\right) - V1\right), P1\right)\\ \mathbf{if}\;V0 \leq -2.0000000400817547 \cdot 10^{+20}:\\ \;\;\;\;t_0\\ \mathbf{elif}\;V0 \leq 39999999311872:\\ \;\;\;\;\mathsf{fma}\left(amt, \mathsf{fma}\left(amt, \mathsf{fma}\left(3, P1 - P0, \mathsf{fma}\left(amt, \mathsf{fma}\left(2, P0 - P1, V1\right), -V1\right)\right), P1\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{else}:\\ \;\;\;\;t_0\\ \end{array} \end{array}
if V0 < -2.00000004e20 or 3.99999993e13 < V0
Initial program 68.4%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites97.7%
Taylor expanded in P0 around 0
Applied rewrites86.6%
if -2.00000004e20 < V0 < 3.99999993e13
Initial program 78.2%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites95.9%
Taylor expanded in V0 around 0
Applied rewrites87.6%
(FPCore (P0 P1 amt V1 V0) :precision binary32 (let* ((t_0 (fma amt (fma amt (* P0 (fma amt 2.0 -3.0)) P1) (* P0 1.52587890625e-5)))) (if (<= P0 -1.0000000200408773e+20) t_0 (if (<= P0 40000001090256900.0) (* amt (fma amt (fma V0 -2.0 (- (fma amt (+ V0 (fma P1 -2.0 V1)) (* P1 3.0)) V1)) P1)) t_0))))
float code(float P0, float P1, float amt, float V1, float V0) { float t_0 = fmaf(amt, fmaf(amt, (P0 * fmaf(amt, 2.0f, -3.0f)), P1), (P0 * 1.52587890625e-5f)); float tmp; if (P0 <= -1.0000000200408773e+20f) { tmp = t_0; } else if (P0 <= 40000001090256900.0f) { tmp = amt * fmaf(amt, fmaf(V0, -2.0f, (fmaf(amt, (V0 + fmaf(P1, -2.0f, V1)), (P1 * 3.0f)) - V1)), P1); } else { tmp = t_0; } return tmp; }
function code(P0, P1, amt, V1, V0) t_0 = fma(amt, fma(amt, Float32(P0 * fma(amt, Float32(2.0), Float32(-3.0))), P1), Float32(P0 * Float32(1.52587890625e-5))) tmp = Float32(0.0) if (P0 <= Float32(-1.0000000200408773e+20)) tmp = t_0; elseif (P0 <= Float32(40000001090256900.0)) tmp = Float32(amt * fma(amt, fma(V0, Float32(-2.0), Float32(fma(amt, Float32(V0 + fma(P1, Float32(-2.0), V1)), Float32(P1 * Float32(3.0))) - V1)), P1)); else tmp = t_0; end return tmp end
\begin{array}{l} \\ \begin{array}{l} t_0 := \mathsf{fma}\left(amt, \mathsf{fma}\left(amt, P0 \cdot \mathsf{fma}\left(amt, 2, -3\right), P1\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{if}\;P0 \leq -1.0000000200408773 \cdot 10^{+20}:\\ \;\;\;\;t_0\\ \mathbf{elif}\;P0 \leq 40000001090256900:\\ \;\;\;\;amt \cdot \mathsf{fma}\left(amt, \mathsf{fma}\left(V0, -2, \mathsf{fma}\left(amt, V0 + \mathsf{fma}\left(P1, -2, V1\right), P1 \cdot 3\right) - V1\right), P1\right)\\ \mathbf{else}:\\ \;\;\;\;t_0\\ \end{array} \end{array}
if P0 < -1.00000002e20 or 4.00000011e16 < P0
Initial program 61.0%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites93.9%
Taylor expanded in P0 around inf
Applied rewrites73.0%
if -1.00000002e20 < P0 < 4.00000011e16
Initial program 80.9%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites97.5%
Taylor expanded in P0 around 0
Applied rewrites84.0%
(FPCore (P0 P1 amt V1 V0) :precision binary32 (fma amt (fma amt (fma amt (fma 2.0 (- P0 P1) (+ V1 V0)) (fma 3.0 (- P1 P0) (fma V0 -2.0 (- V1)))) P1) (* P0 1.52587890625e-5)))
float code(float P0, float P1, float amt, float V1, float V0) { return fmaf(amt, fmaf(amt, fmaf(amt, fmaf(2.0f, (P0 - P1), (V1 + V0)), fmaf(3.0f, (P1 - P0), fmaf(V0, -2.0f, -V1))), P1), (P0 * 1.52587890625e-5f)); }
function code(P0, P1, amt, V1, V0) return fma(amt, fma(amt, fma(amt, fma(Float32(2.0), Float32(P0 - P1), Float32(V1 + V0)), fma(Float32(3.0), Float32(P1 - P0), fma(V0, Float32(-2.0), Float32(-V1)))), P1), Float32(P0 * Float32(1.52587890625e-5))) end
\begin{array}{l} \\ \mathsf{fma}\left(amt, \mathsf{fma}\left(amt, \mathsf{fma}\left(amt, \mathsf{fma}\left(2, P0 - P1, V1 + V0\right), \mathsf{fma}\left(3, P1 - P0, \mathsf{fma}\left(V0, -2, -V1\right)\right)\right), P1\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right) \end{array}
Initial program 75.2%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.5%
(FPCore (P0 P1 amt V1 V0) :precision binary32 (fma P0 1.52587890625e-5 (* amt (fma amt (fma amt (+ V0 (fma 2.0 (- P0 P1) V1)) (- (fma 3.0 (- P1 P0) (* V0 -2.0)) V1)) P1))))
float code(float P0, float P1, float amt, float V1, float V0) { return fmaf(P0, 1.52587890625e-5f, (amt * fmaf(amt, fmaf(amt, (V0 + fmaf(2.0f, (P0 - P1), V1)), (fmaf(3.0f, (P1 - P0), (V0 * -2.0f)) - V1)), P1))); }
function code(P0, P1, amt, V1, V0) return fma(P0, Float32(1.52587890625e-5), Float32(amt * fma(amt, fma(amt, Float32(V0 + fma(Float32(2.0), Float32(P0 - P1), V1)), Float32(fma(Float32(3.0), Float32(P1 - P0), Float32(V0 * Float32(-2.0))) - V1)), P1))) end
\begin{array}{l} \\ \mathsf{fma}\left(P0, 1.52587890625 \cdot 10^{-5}, amt \cdot \mathsf{fma}\left(amt, \mathsf{fma}\left(amt, V0 + \mathsf{fma}\left(2, P0 - P1, V1\right), \mathsf{fma}\left(3, P1 - P0, V0 \cdot -2\right) - V1\right), P1\right)\right) \end{array}
Initial program 75.2%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.5%
Applied rewrites96.3%
(FPCore (P0 P1 amt V1 V0) :precision binary32 (let* ((t_0 (fma amt (fma amt (* P0 (fma amt 2.0 -3.0)) P1) (* P0 1.52587890625e-5)))) (if (<= P0 -1000000000.0) t_0 (if (<= P0 -5.000000156871975e-23) (fma amt (fma amt (* V1 (+ amt -1.0)) P1) (* P0 1.52587890625e-5)) (if (<= P0 2000000.0) (fma amt (fma amt (* V0 (+ amt -2.0)) P1) (* P0 1.52587890625e-5)) t_0)))))
float code(float P0, float P1, float amt, float V1, float V0) { float t_0 = fmaf(amt, fmaf(amt, (P0 * fmaf(amt, 2.0f, -3.0f)), P1), (P0 * 1.52587890625e-5f)); float tmp; if (P0 <= -1000000000.0f) { tmp = t_0; } else if (P0 <= -5.000000156871975e-23f) { tmp = fmaf(amt, fmaf(amt, (V1 * (amt + -1.0f)), P1), (P0 * 1.52587890625e-5f)); } else if (P0 <= 2000000.0f) { tmp = fmaf(amt, fmaf(amt, (V0 * (amt + -2.0f)), P1), (P0 * 1.52587890625e-5f)); } else { tmp = t_0; } return tmp; }
function code(P0, P1, amt, V1, V0) t_0 = fma(amt, fma(amt, Float32(P0 * fma(amt, Float32(2.0), Float32(-3.0))), P1), Float32(P0 * Float32(1.52587890625e-5))) tmp = Float32(0.0) if (P0 <= Float32(-1000000000.0)) tmp = t_0; elseif (P0 <= Float32(-5.000000156871975e-23)) tmp = fma(amt, fma(amt, Float32(V1 * Float32(amt + Float32(-1.0))), P1), Float32(P0 * Float32(1.52587890625e-5))); elseif (P0 <= Float32(2000000.0)) tmp = fma(amt, fma(amt, Float32(V0 * Float32(amt + Float32(-2.0))), P1), Float32(P0 * Float32(1.52587890625e-5))); else tmp = t_0; end return tmp end
\begin{array}{l} \\ \begin{array}{l} t_0 := \mathsf{fma}\left(amt, \mathsf{fma}\left(amt, P0 \cdot \mathsf{fma}\left(amt, 2, -3\right), P1\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{if}\;P0 \leq -1000000000:\\ \;\;\;\;t_0\\ \mathbf{elif}\;P0 \leq -5.000000156871975 \cdot 10^{-23}:\\ \;\;\;\;\mathsf{fma}\left(amt, \mathsf{fma}\left(amt, V1 \cdot \left(amt + -1\right), P1\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{elif}\;P0 \leq 2000000:\\ \;\;\;\;\mathsf{fma}\left(amt, \mathsf{fma}\left(amt, V0 \cdot \left(amt + -2\right), P1\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{else}:\\ \;\;\;\;t_0\\ \end{array} \end{array}
if P0 < -1e9 or 2e6 < P0
Initial program 68.0%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites94.9%
Taylor expanded in P0 around inf
Applied rewrites64.7%
if -1e9 < P0 < -5.00000016e-23
Initial program 80.5%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites97.5%
Taylor expanded in V1 around inf
Applied rewrites53.0%
if -5.00000016e-23 < P0 < 2e6
Initial program 80.1%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites97.5%
Taylor expanded in V0 around inf
Applied rewrites49.8%
(FPCore (P0 P1 amt V1 V0) :precision binary32 (if (<= P0 -1000000000.0) (fma amt (* P0 (* amt (fma amt 2.0 -3.0))) (* P0 1.52587890625e-5)) (if (<= P0 -5.000000156871975e-23) (fma amt (fma amt (* V1 (+ amt -1.0)) P1) (* P0 1.52587890625e-5)) (if (<= P0 2000000.0) (fma amt (fma amt (* V0 (+ amt -2.0)) P1) (* P0 1.52587890625e-5)) (* P0 (fma (* amt amt) (fma amt 2.0 -3.0) 1.52587890625e-5))))))
float code(float P0, float P1, float amt, float V1, float V0) { float tmp; if (P0 <= -1000000000.0f) { tmp = fmaf(amt, (P0 * (amt * fmaf(amt, 2.0f, -3.0f))), (P0 * 1.52587890625e-5f)); } else if (P0 <= -5.000000156871975e-23f) { tmp = fmaf(amt, fmaf(amt, (V1 * (amt + -1.0f)), P1), (P0 * 1.52587890625e-5f)); } else if (P0 <= 2000000.0f) { tmp = fmaf(amt, fmaf(amt, (V0 * (amt + -2.0f)), P1), (P0 * 1.52587890625e-5f)); } else { tmp = P0 * fmaf((amt * amt), fmaf(amt, 2.0f, -3.0f), 1.52587890625e-5f); } return tmp; }
function code(P0, P1, amt, V1, V0) tmp = Float32(0.0) if (P0 <= Float32(-1000000000.0)) tmp = fma(amt, Float32(P0 * Float32(amt * fma(amt, Float32(2.0), Float32(-3.0)))), Float32(P0 * Float32(1.52587890625e-5))); elseif (P0 <= Float32(-5.000000156871975e-23)) tmp = fma(amt, fma(amt, Float32(V1 * Float32(amt + Float32(-1.0))), P1), Float32(P0 * Float32(1.52587890625e-5))); elseif (P0 <= Float32(2000000.0)) tmp = fma(amt, fma(amt, Float32(V0 * Float32(amt + Float32(-2.0))), P1), Float32(P0 * Float32(1.52587890625e-5))); else tmp = Float32(P0 * fma(Float32(amt * amt), fma(amt, Float32(2.0), Float32(-3.0)), Float32(1.52587890625e-5))); end return tmp end
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;P0 \leq -1000000000:\\ \;\;\;\;\mathsf{fma}\left(amt, P0 \cdot \left(amt \cdot \mathsf{fma}\left(amt, 2, -3\right)\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{elif}\;P0 \leq -5.000000156871975 \cdot 10^{-23}:\\ \;\;\;\;\mathsf{fma}\left(amt, \mathsf{fma}\left(amt, V1 \cdot \left(amt + -1\right), P1\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{elif}\;P0 \leq 2000000:\\ \;\;\;\;\mathsf{fma}\left(amt, \mathsf{fma}\left(amt, V0 \cdot \left(amt + -2\right), P1\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{else}:\\ \;\;\;\;P0 \cdot \mathsf{fma}\left(amt \cdot amt, \mathsf{fma}\left(amt, 2, -3\right), 1.52587890625 \cdot 10^{-5}\right)\\ \end{array} \end{array}
if P0 < -1e9
Initial program 61.0%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites92.4%
Taylor expanded in P0 around inf
Applied rewrites60.6%
if -1e9 < P0 < -5.00000016e-23
Initial program 80.5%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites97.5%
Taylor expanded in V1 around inf
Applied rewrites53.0%
if -5.00000016e-23 < P0 < 2e6
Initial program 80.1%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites97.5%
Taylor expanded in V0 around inf
Applied rewrites49.8%
if 2e6 < P0
Initial program 75.3%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites97.6%
Taylor expanded in P0 around inf
Applied rewrites62.8%
(FPCore (P0 P1 amt V1 V0) :precision binary32 (let* ((t_0 (* P0 (fma (* amt amt) (fma amt 2.0 -3.0) 1.52587890625e-5)))) (if (<= P0 -1000000000.0) t_0 (if (<= P0 -5.000000156871975e-23) (fma amt (fma amt (* V1 (+ amt -1.0)) P1) (* P0 1.52587890625e-5)) (if (<= P0 2000000.0) (fma amt (fma amt (* V0 (+ amt -2.0)) P1) (* P0 1.52587890625e-5)) t_0)))))
float code(float P0, float P1, float amt, float V1, float V0) { float t_0 = P0 * fmaf((amt * amt), fmaf(amt, 2.0f, -3.0f), 1.52587890625e-5f); float tmp; if (P0 <= -1000000000.0f) { tmp = t_0; } else if (P0 <= -5.000000156871975e-23f) { tmp = fmaf(amt, fmaf(amt, (V1 * (amt + -1.0f)), P1), (P0 * 1.52587890625e-5f)); } else if (P0 <= 2000000.0f) { tmp = fmaf(amt, fmaf(amt, (V0 * (amt + -2.0f)), P1), (P0 * 1.52587890625e-5f)); } else { tmp = t_0; } return tmp; }
function code(P0, P1, amt, V1, V0) t_0 = Float32(P0 * fma(Float32(amt * amt), fma(amt, Float32(2.0), Float32(-3.0)), Float32(1.52587890625e-5))) tmp = Float32(0.0) if (P0 <= Float32(-1000000000.0)) tmp = t_0; elseif (P0 <= Float32(-5.000000156871975e-23)) tmp = fma(amt, fma(amt, Float32(V1 * Float32(amt + Float32(-1.0))), P1), Float32(P0 * Float32(1.52587890625e-5))); elseif (P0 <= Float32(2000000.0)) tmp = fma(amt, fma(amt, Float32(V0 * Float32(amt + Float32(-2.0))), P1), Float32(P0 * Float32(1.52587890625e-5))); else tmp = t_0; end return tmp end
\begin{array}{l} \\ \begin{array}{l} t_0 := P0 \cdot \mathsf{fma}\left(amt \cdot amt, \mathsf{fma}\left(amt, 2, -3\right), 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{if}\;P0 \leq -1000000000:\\ \;\;\;\;t_0\\ \mathbf{elif}\;P0 \leq -5.000000156871975 \cdot 10^{-23}:\\ \;\;\;\;\mathsf{fma}\left(amt, \mathsf{fma}\left(amt, V1 \cdot \left(amt + -1\right), P1\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{elif}\;P0 \leq 2000000:\\ \;\;\;\;\mathsf{fma}\left(amt, \mathsf{fma}\left(amt, V0 \cdot \left(amt + -2\right), P1\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{else}:\\ \;\;\;\;t_0\\ \end{array} \end{array}
if P0 < -1e9 or 2e6 < P0
Initial program 68.0%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites94.9%
Taylor expanded in P0 around inf
Applied rewrites61.6%
if -1e9 < P0 < -5.00000016e-23
Initial program 80.5%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites97.5%
Taylor expanded in V1 around inf
Applied rewrites53.0%
if -5.00000016e-23 < P0 < 2e6
Initial program 80.1%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites97.5%
Taylor expanded in V0 around inf
Applied rewrites49.8%
(FPCore (P0 P1 amt V1 V0) :precision binary32 (let* ((t_0 (* P0 (fma (* amt amt) (fma amt 2.0 -3.0) 1.52587890625e-5)))) (if (<= P0 -1000000000.0) t_0 (if (<= P0 -5.000000156871975e-23) (* V1 (* (+ amt -1.0) (* amt amt))) (if (<= P0 2000000.0) (fma amt (fma amt (* V0 (+ amt -2.0)) P1) (* P0 1.52587890625e-5)) t_0)))))
float code(float P0, float P1, float amt, float V1, float V0) { float t_0 = P0 * fmaf((amt * amt), fmaf(amt, 2.0f, -3.0f), 1.52587890625e-5f); float tmp; if (P0 <= -1000000000.0f) { tmp = t_0; } else if (P0 <= -5.000000156871975e-23f) { tmp = V1 * ((amt + -1.0f) * (amt * amt)); } else if (P0 <= 2000000.0f) { tmp = fmaf(amt, fmaf(amt, (V0 * (amt + -2.0f)), P1), (P0 * 1.52587890625e-5f)); } else { tmp = t_0; } return tmp; }
function code(P0, P1, amt, V1, V0) t_0 = Float32(P0 * fma(Float32(amt * amt), fma(amt, Float32(2.0), Float32(-3.0)), Float32(1.52587890625e-5))) tmp = Float32(0.0) if (P0 <= Float32(-1000000000.0)) tmp = t_0; elseif (P0 <= Float32(-5.000000156871975e-23)) tmp = Float32(V1 * Float32(Float32(amt + Float32(-1.0)) * Float32(amt * amt))); elseif (P0 <= Float32(2000000.0)) tmp = fma(amt, fma(amt, Float32(V0 * Float32(amt + Float32(-2.0))), P1), Float32(P0 * Float32(1.52587890625e-5))); else tmp = t_0; end return tmp end
\begin{array}{l} \\ \begin{array}{l} t_0 := P0 \cdot \mathsf{fma}\left(amt \cdot amt, \mathsf{fma}\left(amt, 2, -3\right), 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{if}\;P0 \leq -1000000000:\\ \;\;\;\;t_0\\ \mathbf{elif}\;P0 \leq -5.000000156871975 \cdot 10^{-23}:\\ \;\;\;\;V1 \cdot \left(\left(amt + -1\right) \cdot \left(amt \cdot amt\right)\right)\\ \mathbf{elif}\;P0 \leq 2000000:\\ \;\;\;\;\mathsf{fma}\left(amt, \mathsf{fma}\left(amt, V0 \cdot \left(amt + -2\right), P1\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{else}:\\ \;\;\;\;t_0\\ \end{array} \end{array}
if P0 < -1e9 or 2e6 < P0
Initial program 68.0%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites94.9%
Taylor expanded in P0 around inf
Applied rewrites61.6%
if -1e9 < P0 < -5.00000016e-23
Initial program 80.5%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites97.5%
Taylor expanded in V1 around inf
Applied rewrites45.8%
if -5.00000016e-23 < P0 < 2e6
Initial program 80.1%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites97.5%
Taylor expanded in V0 around inf
Applied rewrites49.8%
Final simplification53.8%
(FPCore (P0 P1 amt V1 V0) :precision binary32 (let* ((t_0 (* P0 (fma (* amt amt) (fma amt 2.0 -3.0) 1.52587890625e-5)))) (if (<= P0 -1000000000.0) t_0 (if (<= P0 -5.000000156871975e-23) (* V1 (* (+ amt -1.0) (* amt amt))) (if (<= P0 2000000.0) (fma amt (* V0 (* amt (+ amt -2.0))) (* P0 1.52587890625e-5)) t_0)))))
float code(float P0, float P1, float amt, float V1, float V0) { float t_0 = P0 * fmaf((amt * amt), fmaf(amt, 2.0f, -3.0f), 1.52587890625e-5f); float tmp; if (P0 <= -1000000000.0f) { tmp = t_0; } else if (P0 <= -5.000000156871975e-23f) { tmp = V1 * ((amt + -1.0f) * (amt * amt)); } else if (P0 <= 2000000.0f) { tmp = fmaf(amt, (V0 * (amt * (amt + -2.0f))), (P0 * 1.52587890625e-5f)); } else { tmp = t_0; } return tmp; }
function code(P0, P1, amt, V1, V0) t_0 = Float32(P0 * fma(Float32(amt * amt), fma(amt, Float32(2.0), Float32(-3.0)), Float32(1.52587890625e-5))) tmp = Float32(0.0) if (P0 <= Float32(-1000000000.0)) tmp = t_0; elseif (P0 <= Float32(-5.000000156871975e-23)) tmp = Float32(V1 * Float32(Float32(amt + Float32(-1.0)) * Float32(amt * amt))); elseif (P0 <= Float32(2000000.0)) tmp = fma(amt, Float32(V0 * Float32(amt * Float32(amt + Float32(-2.0)))), Float32(P0 * Float32(1.52587890625e-5))); else tmp = t_0; end return tmp end
\begin{array}{l} \\ \begin{array}{l} t_0 := P0 \cdot \mathsf{fma}\left(amt \cdot amt, \mathsf{fma}\left(amt, 2, -3\right), 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{if}\;P0 \leq -1000000000:\\ \;\;\;\;t_0\\ \mathbf{elif}\;P0 \leq -5.000000156871975 \cdot 10^{-23}:\\ \;\;\;\;V1 \cdot \left(\left(amt + -1\right) \cdot \left(amt \cdot amt\right)\right)\\ \mathbf{elif}\;P0 \leq 2000000:\\ \;\;\;\;\mathsf{fma}\left(amt, V0 \cdot \left(amt \cdot \left(amt + -2\right)\right), P0 \cdot 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{else}:\\ \;\;\;\;t_0\\ \end{array} \end{array}
if P0 < -1e9 or 2e6 < P0
Initial program 68.0%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites94.9%
Taylor expanded in P0 around inf
Applied rewrites61.6%
if -1e9 < P0 < -5.00000016e-23
Initial program 80.5%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites97.5%
Taylor expanded in V1 around inf
Applied rewrites45.8%
if -5.00000016e-23 < P0 < 2e6
Initial program 80.1%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites97.5%
Taylor expanded in V0 around inf
Applied rewrites44.9%
Final simplification51.9%
(FPCore (P0 P1 amt V1 V0) :precision binary32 (let* ((t_0 (* P0 (fma (* amt amt) (fma amt 2.0 -3.0) 1.52587890625e-5)))) (if (<= P0 -1000000000.0) t_0 (if (<= P0 -5.000000156871975e-23) (* V1 (* (+ amt -1.0) (* amt amt))) (if (<= P0 2000000.0) (* V0 (* (* amt amt) (+ amt -2.0))) t_0)))))
float code(float P0, float P1, float amt, float V1, float V0) { float t_0 = P0 * fmaf((amt * amt), fmaf(amt, 2.0f, -3.0f), 1.52587890625e-5f); float tmp; if (P0 <= -1000000000.0f) { tmp = t_0; } else if (P0 <= -5.000000156871975e-23f) { tmp = V1 * ((amt + -1.0f) * (amt * amt)); } else if (P0 <= 2000000.0f) { tmp = V0 * ((amt * amt) * (amt + -2.0f)); } else { tmp = t_0; } return tmp; }
function code(P0, P1, amt, V1, V0) t_0 = Float32(P0 * fma(Float32(amt * amt), fma(amt, Float32(2.0), Float32(-3.0)), Float32(1.52587890625e-5))) tmp = Float32(0.0) if (P0 <= Float32(-1000000000.0)) tmp = t_0; elseif (P0 <= Float32(-5.000000156871975e-23)) tmp = Float32(V1 * Float32(Float32(amt + Float32(-1.0)) * Float32(amt * amt))); elseif (P0 <= Float32(2000000.0)) tmp = Float32(V0 * Float32(Float32(amt * amt) * Float32(amt + Float32(-2.0)))); else tmp = t_0; end return tmp end
\begin{array}{l} \\ \begin{array}{l} t_0 := P0 \cdot \mathsf{fma}\left(amt \cdot amt, \mathsf{fma}\left(amt, 2, -3\right), 1.52587890625 \cdot 10^{-5}\right)\\ \mathbf{if}\;P0 \leq -1000000000:\\ \;\;\;\;t_0\\ \mathbf{elif}\;P0 \leq -5.000000156871975 \cdot 10^{-23}:\\ \;\;\;\;V1 \cdot \left(\left(amt + -1\right) \cdot \left(amt \cdot amt\right)\right)\\ \mathbf{elif}\;P0 \leq 2000000:\\ \;\;\;\;V0 \cdot \left(\left(amt \cdot amt\right) \cdot \left(amt + -2\right)\right)\\ \mathbf{else}:\\ \;\;\;\;t_0\\ \end{array} \end{array}
if P0 < -1e9 or 2e6 < P0
Initial program 68.0%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites94.9%
Taylor expanded in P0 around inf
Applied rewrites61.6%
if -1e9 < P0 < -5.00000016e-23
Initial program 80.5%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites97.5%
Taylor expanded in V1 around inf
Applied rewrites45.8%
if -5.00000016e-23 < P0 < 2e6
Initial program 80.1%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites97.5%
Taylor expanded in V0 around inf
Applied rewrites44.4%
Final simplification51.7%
(FPCore (P0 P1 amt V1 V0) :precision binary32 (let* ((t_0 (* V0 (* (* amt amt) (+ amt -2.0))))) (if (<= V0 -20.0) t_0 (if (<= V0 200.0) (* V1 (* (+ amt -1.0) (* amt amt))) t_0))))
float code(float P0, float P1, float amt, float V1, float V0) { float t_0 = V0 * ((amt * amt) * (amt + -2.0f)); float tmp; if (V0 <= -20.0f) { tmp = t_0; } else if (V0 <= 200.0f) { tmp = V1 * ((amt + -1.0f) * (amt * amt)); } else { tmp = t_0; } return tmp; }
real(4) function code(p0, p1, amt, v1, v0) real(4), intent (in) :: p0 real(4), intent (in) :: p1 real(4), intent (in) :: amt real(4), intent (in) :: v1 real(4), intent (in) :: v0 real(4) :: t_0 real(4) :: tmp t_0 = v0 * ((amt * amt) * (amt + (-2.0e0))) if (v0 <= (-20.0e0)) then tmp = t_0 else if (v0 <= 200.0e0) then tmp = v1 * ((amt + (-1.0e0)) * (amt * amt)) else tmp = t_0 end if code = tmp end function
function code(P0, P1, amt, V1, V0) t_0 = Float32(V0 * Float32(Float32(amt * amt) * Float32(amt + Float32(-2.0)))) tmp = Float32(0.0) if (V0 <= Float32(-20.0)) tmp = t_0; elseif (V0 <= Float32(200.0)) tmp = Float32(V1 * Float32(Float32(amt + Float32(-1.0)) * Float32(amt * amt))); else tmp = t_0; end return tmp end
function tmp_2 = code(P0, P1, amt, V1, V0) t_0 = V0 * ((amt * amt) * (amt + single(-2.0))); tmp = single(0.0); if (V0 <= single(-20.0)) tmp = t_0; elseif (V0 <= single(200.0)) tmp = V1 * ((amt + single(-1.0)) * (amt * amt)); else tmp = t_0; end tmp_2 = tmp; end
\begin{array}{l} \\ \begin{array}{l} t_0 := V0 \cdot \left(\left(amt \cdot amt\right) \cdot \left(amt + -2\right)\right)\\ \mathbf{if}\;V0 \leq -20:\\ \;\;\;\;t_0\\ \mathbf{elif}\;V0 \leq 200:\\ \;\;\;\;V1 \cdot \left(\left(amt + -1\right) \cdot \left(amt \cdot amt\right)\right)\\ \mathbf{else}:\\ \;\;\;\;t_0\\ \end{array} \end{array}
if V0 < -20 or 200 < V0
Initial program 75.1%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.8%
Taylor expanded in V0 around inf
Applied rewrites45.6%
if -20 < V0 < 200
Initial program 75.3%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.1%
Taylor expanded in V1 around inf
Applied rewrites36.2%
Final simplification40.9%
(FPCore (P0 P1 amt V1 V0) :precision binary32 (* V0 (* (* amt amt) (+ amt -2.0))))
float code(float P0, float P1, float amt, float V1, float V0) { return V0 * ((amt * amt) * (amt + -2.0f)); }
real(4) function code(p0, p1, amt, v1, v0) real(4), intent (in) :: p0 real(4), intent (in) :: p1 real(4), intent (in) :: amt real(4), intent (in) :: v1 real(4), intent (in) :: v0 code = v0 * ((amt * amt) * (amt + (-2.0e0))) end function
function code(P0, P1, amt, V1, V0) return Float32(V0 * Float32(Float32(amt * amt) * Float32(amt + Float32(-2.0)))) end
function tmp = code(P0, P1, amt, V1, V0) tmp = V0 * ((amt * amt) * (amt + single(-2.0))); end
\begin{array}{l} \\ V0 \cdot \left(\left(amt \cdot amt\right) \cdot \left(amt + -2\right)\right) \end{array}
Initial program 75.2%
Taylor expanded in amt around 0
+-commutative
N/A
lower-fma.f32
N/A
Applied rewrites96.5%
Taylor expanded in V0 around inf
Applied rewrites27.0%
(FPCore (P0 P1 amt V1 V0) :precision binary32 (* amt (fma (* P1 amt) 3.0 P1)))
float code(float P0, float P1, float amt, float V1, float V0) { return amt * fmaf((P1 * amt), 3.0f, P1); }
function code(P0, P1, amt, V1, V0) return Float32(amt * fma(Float32(P1 * amt), Float32(3.0), P1)) end
\begin{array}{l} \\ amt \cdot \mathsf{fma}\left(P1 \cdot amt, 3, P1\right) \end{array}
Initial program 75.2%
Taylor expanded in P1 around -inf
*-commutative
N/A
associate-*l*
N/A
lower-*.f32
N/A
lower-*.f32
N/A
Applied rewrites22.0%
Taylor expanded in amt around 0
Applied rewrites10.8%
(FPCore (P0 P1 amt V1 V0) :precision binary32 (* P1 amt))
float code(float P0, float P1, float amt, float V1, float V0) { return P1 * amt; }
real(4) function code(p0, p1, amt, v1, v0) real(4), intent (in) :: p0 real(4), intent (in) :: p1 real(4), intent (in) :: amt real(4), intent (in) :: v1 real(4), intent (in) :: v0 code = p1 * amt end function
function code(P0, P1, amt, V1, V0) return Float32(P1 * amt) end
function tmp = code(P0, P1, amt, V1, V0) tmp = P1 * amt; end
\begin{array}{l} \\ P1 \cdot amt \end{array}
Initial program 75.2%
Taylor expanded in P1 around -inf
*-commutative
N/A
associate-*l*
N/A
lower-*.f32
N/A
lower-*.f32
N/A
Applied rewrites22.0%
Taylor expanded in amt around 0
Applied rewrites10.6%
herbie shell --seed 5
(FPCore (P0 P1 amt V1 V0)
:name "(/ (+ (+ (+ P0 (* P1 (* amt 65536))) (* (- (- (* 3.0 (- P1 P0)) V1) (* 2.0 V0)) (* (pow amt 2) 65536))) (* (+ (+ (* 2.0 (- P0 P1)) V0) V1) (* (pow amt 3) 65536))) 65536)"
:precision binary32
:pre (and (<= 0.85 amt) (<= amt 1.0))
(/ (+ (+ (+ P0 (* P1 (* amt 65536.0))) (* (- (- (* 3.0 (- P1 P0)) V1) (* 2.0 V0)) (* (pow amt 2.0) 65536.0))) (* (+ (+ (* 2.0 (- P0 P1)) V0) V1) (* (pow amt 3.0) 65536.0))) 65536.0))