(FPCore (acceleration distance velocity) :precision binary64 (/ (- (sqrt (+ (* (* 2.0 acceleration) distance) (* velocity velocity))) velocity) acceleration))
double code(double acceleration, double distance, double velocity) { return (sqrt((((2.0 * acceleration) * distance) + (velocity * velocity))) - velocity) / acceleration; }
real(8) function code(acceleration, distance, velocity) real(8), intent (in) :: acceleration real(8), intent (in) :: distance real(8), intent (in) :: velocity code = (sqrt((((2.0d0 * acceleration) * distance) + (velocity * velocity))) - velocity) / acceleration end function
public static double code(double acceleration, double distance, double velocity) { return (Math.sqrt((((2.0 * acceleration) * distance) + (velocity * velocity))) - velocity) / acceleration; }
def code(acceleration, distance, velocity): return (math.sqrt((((2.0 * acceleration) * distance) + (velocity * velocity))) - velocity) / acceleration
function code(acceleration, distance, velocity) return Float64(Float64(sqrt(Float64(Float64(Float64(2.0 * acceleration) * distance) + Float64(velocity * velocity))) - velocity) / acceleration) end
function tmp = code(acceleration, distance, velocity) tmp = (sqrt((((2.0 * acceleration) * distance) + (velocity * velocity))) - velocity) / acceleration; end
code[acceleration_, distance_, velocity_] := N[(N[(N[Sqrt[N[(N[(N[(2.0 * acceleration), $MachinePrecision] * distance), $MachinePrecision] + N[(velocity * velocity), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - velocity), $MachinePrecision] / acceleration), $MachinePrecision]
\begin{array}{l} \\ \frac{\sqrt{\left(2 \cdot acceleration\right) \cdot distance + velocity \cdot velocity} - velocity}{acceleration} \end{array}
Sampling outcomes in binary64 precision:
Herbie found 9 alternatives:
Alternative | Accuracy | Speedup |
---|
(FPCore (acceleration distance velocity) :precision binary64 (/ (- (sqrt (+ (* (* 2.0 acceleration) distance) (* velocity velocity))) velocity) acceleration))
double code(double acceleration, double distance, double velocity) { return (sqrt((((2.0 * acceleration) * distance) + (velocity * velocity))) - velocity) / acceleration; }
real(8) function code(acceleration, distance, velocity) real(8), intent (in) :: acceleration real(8), intent (in) :: distance real(8), intent (in) :: velocity code = (sqrt((((2.0d0 * acceleration) * distance) + (velocity * velocity))) - velocity) / acceleration end function
public static double code(double acceleration, double distance, double velocity) { return (Math.sqrt((((2.0 * acceleration) * distance) + (velocity * velocity))) - velocity) / acceleration; }
def code(acceleration, distance, velocity): return (math.sqrt((((2.0 * acceleration) * distance) + (velocity * velocity))) - velocity) / acceleration
function code(acceleration, distance, velocity) return Float64(Float64(sqrt(Float64(Float64(Float64(2.0 * acceleration) * distance) + Float64(velocity * velocity))) - velocity) / acceleration) end
function tmp = code(acceleration, distance, velocity) tmp = (sqrt((((2.0 * acceleration) * distance) + (velocity * velocity))) - velocity) / acceleration; end
code[acceleration_, distance_, velocity_] := N[(N[(N[Sqrt[N[(N[(N[(2.0 * acceleration), $MachinePrecision] * distance), $MachinePrecision] + N[(velocity * velocity), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - velocity), $MachinePrecision] / acceleration), $MachinePrecision]
\begin{array}{l} \\ \frac{\sqrt{\left(2 \cdot acceleration\right) \cdot distance + velocity \cdot velocity} - velocity}{acceleration} \end{array}
(FPCore (acceleration distance velocity) :precision binary64 (let* ((t_0 (/ (- (sqrt (+ (* (* 2.0 acceleration) distance) (* velocity velocity))) velocity) acceleration))) (if (or (<= t_0 -5e-127) (not (<= t_0 5e-150))) (- (/ (sqrt (fma velocity velocity (* distance (* acceleration 2.0)))) acceleration) (/ velocity acceleration)) (/ distance velocity))))
double code(double acceleration, double distance, double velocity) { double t_0 = (sqrt((((2.0 * acceleration) * distance) + (velocity * velocity))) - velocity) / acceleration; double tmp; if ((t_0 <= -5e-127) || !(t_0 <= 5e-150)) { tmp = (sqrt(fma(velocity, velocity, (distance * (acceleration * 2.0)))) / acceleration) - (velocity / acceleration); } else { tmp = distance / velocity; } return tmp; }
function code(acceleration, distance, velocity) t_0 = Float64(Float64(sqrt(Float64(Float64(Float64(2.0 * acceleration) * distance) + Float64(velocity * velocity))) - velocity) / acceleration) tmp = 0.0 if ((t_0 <= -5e-127) || !(t_0 <= 5e-150)) tmp = Float64(Float64(sqrt(fma(velocity, velocity, Float64(distance * Float64(acceleration * 2.0)))) / acceleration) - Float64(velocity / acceleration)); else tmp = Float64(distance / velocity); end return tmp end
code[acceleration_, distance_, velocity_] := Block[{t$95$0 = N[(N[(N[Sqrt[N[(N[(N[(2.0 * acceleration), $MachinePrecision] * distance), $MachinePrecision] + N[(velocity * velocity), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - velocity), $MachinePrecision] / acceleration), $MachinePrecision]}, If[Or[LessEqual[t$95$0, -5e-127], N[Not[LessEqual[t$95$0, 5e-150]], $MachinePrecision]], N[(N[(N[Sqrt[N[(velocity * velocity + N[(distance * N[(acceleration * 2.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] / acceleration), $MachinePrecision] - N[(velocity / acceleration), $MachinePrecision]), $MachinePrecision], N[(distance / velocity), $MachinePrecision]]]
\begin{array}{l} \\ \begin{array}{l} t_0 := \frac{\sqrt{\left(2 \cdot acceleration\right) \cdot distance + velocity \cdot velocity} - velocity}{acceleration}\\ \mathbf{if}\;t\_0 \leq -5 \cdot 10^{-127} \lor \neg \left(t\_0 \leq 5 \cdot 10^{-150}\right):\\ \;\;\;\;\frac{\sqrt{\mathsf{fma}\left(velocity, velocity, distance \cdot \left(acceleration \cdot 2\right)\right)}}{acceleration} - \frac{velocity}{acceleration}\\ \mathbf{else}:\\ \;\;\;\;\frac{distance}{velocity}\\ \end{array} \end{array}
if (/.f64 (-.f64 (sqrt.f64 (+.f64 (*.f64 (*.f64 #s(literal 2 binary64) acceleration) distance) (*.f64 velocity velocity))) velocity) acceleration) < -4.9999999999999997e-127 or 4.9999999999999999e-150 < (/.f64 (-.f64 (sqrt.f64 (+.f64 (*.f64 (*.f64 #s(literal 2 binary64) acceleration) distance) (*.f64 velocity velocity))) velocity) acceleration)
Initial program 75.5%
lift-/.f64
N/A
lift--.f64
N/A
div-sub
N/A
lower--.f64
N/A
lower-/.f64
N/A
lift-+.f64
N/A
+-commutative
N/A
lift-*.f64
N/A
lower-fma.f64
N/A
lift-*.f64
N/A
*-commutative
N/A
lower-*.f64
N/A
lift-*.f64
N/A
*-commutative
N/A
lower-*.f64
N/A
lower-/.f64
75.6
Applied rewrites75.6%
if -4.9999999999999997e-127 < (/.f64 (-.f64 (sqrt.f64 (+.f64 (*.f64 (*.f64 #s(literal 2 binary64) acceleration) distance) (*.f64 velocity velocity))) velocity) acceleration) < 4.9999999999999999e-150
Initial program 4.3%
Taylor expanded in acceleration around 0
lower-/.f64
91.9
Applied rewrites91.9%
Final simplification80.1%
(FPCore (acceleration distance velocity) :precision binary64 (let* ((t_0 (/ (- (sqrt (+ (* (* 2.0 acceleration) distance) (* velocity velocity))) velocity) acceleration))) (if (or (<= t_0 -5e-127) (not (<= t_0 5e-150))) (/ (- (sqrt (fma (* distance 2.0) acceleration (* velocity velocity))) velocity) acceleration) (/ distance velocity))))
double code(double acceleration, double distance, double velocity) { double t_0 = (sqrt((((2.0 * acceleration) * distance) + (velocity * velocity))) - velocity) / acceleration; double tmp; if ((t_0 <= -5e-127) || !(t_0 <= 5e-150)) { tmp = (sqrt(fma((distance * 2.0), acceleration, (velocity * velocity))) - velocity) / acceleration; } else { tmp = distance / velocity; } return tmp; }
function code(acceleration, distance, velocity) t_0 = Float64(Float64(sqrt(Float64(Float64(Float64(2.0 * acceleration) * distance) + Float64(velocity * velocity))) - velocity) / acceleration) tmp = 0.0 if ((t_0 <= -5e-127) || !(t_0 <= 5e-150)) tmp = Float64(Float64(sqrt(fma(Float64(distance * 2.0), acceleration, Float64(velocity * velocity))) - velocity) / acceleration); else tmp = Float64(distance / velocity); end return tmp end
code[acceleration_, distance_, velocity_] := Block[{t$95$0 = N[(N[(N[Sqrt[N[(N[(N[(2.0 * acceleration), $MachinePrecision] * distance), $MachinePrecision] + N[(velocity * velocity), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - velocity), $MachinePrecision] / acceleration), $MachinePrecision]}, If[Or[LessEqual[t$95$0, -5e-127], N[Not[LessEqual[t$95$0, 5e-150]], $MachinePrecision]], N[(N[(N[Sqrt[N[(N[(distance * 2.0), $MachinePrecision] * acceleration + N[(velocity * velocity), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - velocity), $MachinePrecision] / acceleration), $MachinePrecision], N[(distance / velocity), $MachinePrecision]]]
\begin{array}{l} \\ \begin{array}{l} t_0 := \frac{\sqrt{\left(2 \cdot acceleration\right) \cdot distance + velocity \cdot velocity} - velocity}{acceleration}\\ \mathbf{if}\;t\_0 \leq -5 \cdot 10^{-127} \lor \neg \left(t\_0 \leq 5 \cdot 10^{-150}\right):\\ \;\;\;\;\frac{\sqrt{\mathsf{fma}\left(distance \cdot 2, acceleration, velocity \cdot velocity\right)} - velocity}{acceleration}\\ \mathbf{else}:\\ \;\;\;\;\frac{distance}{velocity}\\ \end{array} \end{array}
if (/.f64 (-.f64 (sqrt.f64 (+.f64 (*.f64 (*.f64 #s(literal 2 binary64) acceleration) distance) (*.f64 velocity velocity))) velocity) acceleration) < -4.9999999999999997e-127 or 4.9999999999999999e-150 < (/.f64 (-.f64 (sqrt.f64 (+.f64 (*.f64 (*.f64 #s(literal 2 binary64) acceleration) distance) (*.f64 velocity velocity))) velocity) acceleration)
Initial program 75.5%
lift-+.f64
N/A
lift-*.f64
N/A
lift-*.f64
N/A
associate-*l*
N/A
*-commutative
N/A
associate-*r*
N/A
lower-fma.f64
N/A
*-commutative
N/A
lower-*.f64
75.5
Applied rewrites75.5%
if -4.9999999999999997e-127 < (/.f64 (-.f64 (sqrt.f64 (+.f64 (*.f64 (*.f64 #s(literal 2 binary64) acceleration) distance) (*.f64 velocity velocity))) velocity) acceleration) < 4.9999999999999999e-150
Initial program 4.3%
Taylor expanded in acceleration around 0
lower-/.f64
91.9
Applied rewrites91.9%
Final simplification80.1%
(FPCore (acceleration distance velocity) :precision binary64 (let* ((t_0 (/ (- (sqrt (+ (* (* 2.0 acceleration) distance) (* velocity velocity))) velocity) acceleration))) (if (<= t_0 -5e-127) (/ (- (sqrt (fma (* distance 2.0) acceleration (* velocity velocity))) velocity) acceleration) (if (<= t_0 5e-150) (/ distance velocity) (/ (- (sqrt (fma (* distance acceleration) 2.0 (* velocity velocity))) velocity) acceleration)))))
double code(double acceleration, double distance, double velocity) { double t_0 = (sqrt((((2.0 * acceleration) * distance) + (velocity * velocity))) - velocity) / acceleration; double tmp; if (t_0 <= -5e-127) { tmp = (sqrt(fma((distance * 2.0), acceleration, (velocity * velocity))) - velocity) / acceleration; } else if (t_0 <= 5e-150) { tmp = distance / velocity; } else { tmp = (sqrt(fma((distance * acceleration), 2.0, (velocity * velocity))) - velocity) / acceleration; } return tmp; }
function code(acceleration, distance, velocity) t_0 = Float64(Float64(sqrt(Float64(Float64(Float64(2.0 * acceleration) * distance) + Float64(velocity * velocity))) - velocity) / acceleration) tmp = 0.0 if (t_0 <= -5e-127) tmp = Float64(Float64(sqrt(fma(Float64(distance * 2.0), acceleration, Float64(velocity * velocity))) - velocity) / acceleration); elseif (t_0 <= 5e-150) tmp = Float64(distance / velocity); else tmp = Float64(Float64(sqrt(fma(Float64(distance * acceleration), 2.0, Float64(velocity * velocity))) - velocity) / acceleration); end return tmp end
code[acceleration_, distance_, velocity_] := Block[{t$95$0 = N[(N[(N[Sqrt[N[(N[(N[(2.0 * acceleration), $MachinePrecision] * distance), $MachinePrecision] + N[(velocity * velocity), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - velocity), $MachinePrecision] / acceleration), $MachinePrecision]}, If[LessEqual[t$95$0, -5e-127], N[(N[(N[Sqrt[N[(N[(distance * 2.0), $MachinePrecision] * acceleration + N[(velocity * velocity), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - velocity), $MachinePrecision] / acceleration), $MachinePrecision], If[LessEqual[t$95$0, 5e-150], N[(distance / velocity), $MachinePrecision], N[(N[(N[Sqrt[N[(N[(distance * acceleration), $MachinePrecision] * 2.0 + N[(velocity * velocity), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - velocity), $MachinePrecision] / acceleration), $MachinePrecision]]]]
\begin{array}{l} \\ \begin{array}{l} t_0 := \frac{\sqrt{\left(2 \cdot acceleration\right) \cdot distance + velocity \cdot velocity} - velocity}{acceleration}\\ \mathbf{if}\;t\_0 \leq -5 \cdot 10^{-127}:\\ \;\;\;\;\frac{\sqrt{\mathsf{fma}\left(distance \cdot 2, acceleration, velocity \cdot velocity\right)} - velocity}{acceleration}\\ \mathbf{elif}\;t\_0 \leq 5 \cdot 10^{-150}:\\ \;\;\;\;\frac{distance}{velocity}\\ \mathbf{else}:\\ \;\;\;\;\frac{\sqrt{\mathsf{fma}\left(distance \cdot acceleration, 2, velocity \cdot velocity\right)} - velocity}{acceleration}\\ \end{array} \end{array}
if (/.f64 (-.f64 (sqrt.f64 (+.f64 (*.f64 (*.f64 #s(literal 2 binary64) acceleration) distance) (*.f64 velocity velocity))) velocity) acceleration) < -4.9999999999999997e-127
Initial program 77.8%
lift-+.f64
N/A
lift-*.f64
N/A
lift-*.f64
N/A
associate-*l*
N/A
*-commutative
N/A
associate-*r*
N/A
lower-fma.f64
N/A
*-commutative
N/A
lower-*.f64
77.8
Applied rewrites77.8%
if -4.9999999999999997e-127 < (/.f64 (-.f64 (sqrt.f64 (+.f64 (*.f64 (*.f64 #s(literal 2 binary64) acceleration) distance) (*.f64 velocity velocity))) velocity) acceleration) < 4.9999999999999999e-150
Initial program 4.3%
Taylor expanded in acceleration around 0
lower-/.f64
91.9
Applied rewrites91.9%
if 4.9999999999999999e-150 < (/.f64 (-.f64 (sqrt.f64 (+.f64 (*.f64 (*.f64 #s(literal 2 binary64) acceleration) distance) (*.f64 velocity velocity))) velocity) acceleration)
Initial program 73.5%
lift-+.f64
N/A
lift-*.f64
N/A
lift-*.f64
N/A
associate-*l*
N/A
*-commutative
N/A
lower-fma.f64
N/A
*-commutative
N/A
lower-*.f64
73.5
Applied rewrites73.5%
(FPCore (acceleration distance velocity) :precision binary64 (if (<= velocity -7.4e-205) (/ (- (- velocity) velocity) acceleration) (if (<= velocity 6e-262) (- (sqrt (* (/ distance acceleration) 2.0)) (/ velocity acceleration)) (if (<= velocity 1.95e-200) (* (sqrt (/ distance acceleration)) (- (sqrt 2.0))) (if (<= velocity 7.4e-127) (/ (- (sqrt (* (* distance acceleration) 2.0)) velocity) acceleration) (/ distance velocity))))))
double code(double acceleration, double distance, double velocity) { double tmp; if (velocity <= -7.4e-205) { tmp = (-velocity - velocity) / acceleration; } else if (velocity <= 6e-262) { tmp = sqrt(((distance / acceleration) * 2.0)) - (velocity / acceleration); } else if (velocity <= 1.95e-200) { tmp = sqrt((distance / acceleration)) * -sqrt(2.0); } else if (velocity <= 7.4e-127) { tmp = (sqrt(((distance * acceleration) * 2.0)) - velocity) / acceleration; } else { tmp = distance / velocity; } return tmp; }
real(8) function code(acceleration, distance, velocity) real(8), intent (in) :: acceleration real(8), intent (in) :: distance real(8), intent (in) :: velocity real(8) :: tmp if (velocity <= (-7.4d-205)) then tmp = (-velocity - velocity) / acceleration else if (velocity <= 6d-262) then tmp = sqrt(((distance / acceleration) * 2.0d0)) - (velocity / acceleration) else if (velocity <= 1.95d-200) then tmp = sqrt((distance / acceleration)) * -sqrt(2.0d0) else if (velocity <= 7.4d-127) then tmp = (sqrt(((distance * acceleration) * 2.0d0)) - velocity) / acceleration else tmp = distance / velocity end if code = tmp end function
public static double code(double acceleration, double distance, double velocity) { double tmp; if (velocity <= -7.4e-205) { tmp = (-velocity - velocity) / acceleration; } else if (velocity <= 6e-262) { tmp = Math.sqrt(((distance / acceleration) * 2.0)) - (velocity / acceleration); } else if (velocity <= 1.95e-200) { tmp = Math.sqrt((distance / acceleration)) * -Math.sqrt(2.0); } else if (velocity <= 7.4e-127) { tmp = (Math.sqrt(((distance * acceleration) * 2.0)) - velocity) / acceleration; } else { tmp = distance / velocity; } return tmp; }
def code(acceleration, distance, velocity): tmp = 0 if velocity <= -7.4e-205: tmp = (-velocity - velocity) / acceleration elif velocity <= 6e-262: tmp = math.sqrt(((distance / acceleration) * 2.0)) - (velocity / acceleration) elif velocity <= 1.95e-200: tmp = math.sqrt((distance / acceleration)) * -math.sqrt(2.0) elif velocity <= 7.4e-127: tmp = (math.sqrt(((distance * acceleration) * 2.0)) - velocity) / acceleration else: tmp = distance / velocity return tmp
function code(acceleration, distance, velocity) tmp = 0.0 if (velocity <= -7.4e-205) tmp = Float64(Float64(Float64(-velocity) - velocity) / acceleration); elseif (velocity <= 6e-262) tmp = Float64(sqrt(Float64(Float64(distance / acceleration) * 2.0)) - Float64(velocity / acceleration)); elseif (velocity <= 1.95e-200) tmp = Float64(sqrt(Float64(distance / acceleration)) * Float64(-sqrt(2.0))); elseif (velocity <= 7.4e-127) tmp = Float64(Float64(sqrt(Float64(Float64(distance * acceleration) * 2.0)) - velocity) / acceleration); else tmp = Float64(distance / velocity); end return tmp end
function tmp_2 = code(acceleration, distance, velocity) tmp = 0.0; if (velocity <= -7.4e-205) tmp = (-velocity - velocity) / acceleration; elseif (velocity <= 6e-262) tmp = sqrt(((distance / acceleration) * 2.0)) - (velocity / acceleration); elseif (velocity <= 1.95e-200) tmp = sqrt((distance / acceleration)) * -sqrt(2.0); elseif (velocity <= 7.4e-127) tmp = (sqrt(((distance * acceleration) * 2.0)) - velocity) / acceleration; else tmp = distance / velocity; end tmp_2 = tmp; end
code[acceleration_, distance_, velocity_] := If[LessEqual[velocity, -7.4e-205], N[(N[((-velocity) - velocity), $MachinePrecision] / acceleration), $MachinePrecision], If[LessEqual[velocity, 6e-262], N[(N[Sqrt[N[(N[(distance / acceleration), $MachinePrecision] * 2.0), $MachinePrecision]], $MachinePrecision] - N[(velocity / acceleration), $MachinePrecision]), $MachinePrecision], If[LessEqual[velocity, 1.95e-200], N[(N[Sqrt[N[(distance / acceleration), $MachinePrecision]], $MachinePrecision] * (-N[Sqrt[2.0], $MachinePrecision])), $MachinePrecision], If[LessEqual[velocity, 7.4e-127], N[(N[(N[Sqrt[N[(N[(distance * acceleration), $MachinePrecision] * 2.0), $MachinePrecision]], $MachinePrecision] - velocity), $MachinePrecision] / acceleration), $MachinePrecision], N[(distance / velocity), $MachinePrecision]]]]]
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;velocity \leq -7.4 \cdot 10^{-205}:\\ \;\;\;\;\frac{\left(-velocity\right) - velocity}{acceleration}\\ \mathbf{elif}\;velocity \leq 6 \cdot 10^{-262}:\\ \;\;\;\;\sqrt{\frac{distance}{acceleration} \cdot 2} - \frac{velocity}{acceleration}\\ \mathbf{elif}\;velocity \leq 1.95 \cdot 10^{-200}:\\ \;\;\;\;\sqrt{\frac{distance}{acceleration}} \cdot \left(-\sqrt{2}\right)\\ \mathbf{elif}\;velocity \leq 7.4 \cdot 10^{-127}:\\ \;\;\;\;\frac{\sqrt{\left(distance \cdot acceleration\right) \cdot 2} - velocity}{acceleration}\\ \mathbf{else}:\\ \;\;\;\;\frac{distance}{velocity}\\ \end{array} \end{array}
if velocity < -7.4000000000000002e-205
Initial program 88.0%
Taylor expanded in velocity around -inf
mul-1-neg
N/A
lower-neg.f64
82.4
Applied rewrites82.4%
if -7.4000000000000002e-205 < velocity < 6.00000000000000036e-262
Initial program 54.4%
Taylor expanded in acceleration around inf
+-commutative
N/A
*-commutative
N/A
lower-fma.f64
N/A
lower-sqrt.f64
N/A
lower-sqrt.f64
N/A
lower-/.f64
N/A
associate-*r/
N/A
mul-1-neg
N/A
lower-/.f64
N/A
lower-neg.f64
61.2
Applied rewrites61.2%
Applied rewrites61.7%
if 6.00000000000000036e-262 < velocity < 1.94999999999999999e-200
Initial program 37.5%
Taylor expanded in acceleration around inf
+-commutative
N/A
*-commutative
N/A
lower-fma.f64
N/A
lower-sqrt.f64
N/A
lower-sqrt.f64
N/A
lower-/.f64
N/A
associate-*r/
N/A
mul-1-neg
N/A
lower-/.f64
N/A
lower-neg.f64
10.9
Applied rewrites10.9%
Taylor expanded in acceleration around -inf
Applied rewrites72.2%
if 1.94999999999999999e-200 < velocity < 7.40000000000000078e-127
Initial program 65.7%
Taylor expanded in acceleration around inf
*-commutative
N/A
lower-*.f64
N/A
*-commutative
N/A
lower-*.f64
63.5
Applied rewrites63.5%
if 7.40000000000000078e-127 < velocity
Initial program 16.2%
Taylor expanded in acceleration around 0
lower-/.f64
88.8
Applied rewrites88.8%
Final simplification77.4%
(FPCore (acceleration distance velocity) :precision binary64 (let* ((t_0 (sqrt (/ distance acceleration)))) (if (<= velocity -7.4e-205) (/ (- (- velocity) velocity) acceleration) (if (<= velocity 6e-262) (* (sqrt 2.0) t_0) (if (<= velocity 1.95e-200) (* t_0 (- (sqrt 2.0))) (if (<= velocity 7.4e-127) (/ (- (sqrt (* (* distance acceleration) 2.0)) velocity) acceleration) (/ distance velocity)))))))
double code(double acceleration, double distance, double velocity) { double t_0 = sqrt((distance / acceleration)); double tmp; if (velocity <= -7.4e-205) { tmp = (-velocity - velocity) / acceleration; } else if (velocity <= 6e-262) { tmp = sqrt(2.0) * t_0; } else if (velocity <= 1.95e-200) { tmp = t_0 * -sqrt(2.0); } else if (velocity <= 7.4e-127) { tmp = (sqrt(((distance * acceleration) * 2.0)) - velocity) / acceleration; } else { tmp = distance / velocity; } return tmp; }
real(8) function code(acceleration, distance, velocity) real(8), intent (in) :: acceleration real(8), intent (in) :: distance real(8), intent (in) :: velocity real(8) :: t_0 real(8) :: tmp t_0 = sqrt((distance / acceleration)) if (velocity <= (-7.4d-205)) then tmp = (-velocity - velocity) / acceleration else if (velocity <= 6d-262) then tmp = sqrt(2.0d0) * t_0 else if (velocity <= 1.95d-200) then tmp = t_0 * -sqrt(2.0d0) else if (velocity <= 7.4d-127) then tmp = (sqrt(((distance * acceleration) * 2.0d0)) - velocity) / acceleration else tmp = distance / velocity end if code = tmp end function
public static double code(double acceleration, double distance, double velocity) { double t_0 = Math.sqrt((distance / acceleration)); double tmp; if (velocity <= -7.4e-205) { tmp = (-velocity - velocity) / acceleration; } else if (velocity <= 6e-262) { tmp = Math.sqrt(2.0) * t_0; } else if (velocity <= 1.95e-200) { tmp = t_0 * -Math.sqrt(2.0); } else if (velocity <= 7.4e-127) { tmp = (Math.sqrt(((distance * acceleration) * 2.0)) - velocity) / acceleration; } else { tmp = distance / velocity; } return tmp; }
def code(acceleration, distance, velocity): t_0 = math.sqrt((distance / acceleration)) tmp = 0 if velocity <= -7.4e-205: tmp = (-velocity - velocity) / acceleration elif velocity <= 6e-262: tmp = math.sqrt(2.0) * t_0 elif velocity <= 1.95e-200: tmp = t_0 * -math.sqrt(2.0) elif velocity <= 7.4e-127: tmp = (math.sqrt(((distance * acceleration) * 2.0)) - velocity) / acceleration else: tmp = distance / velocity return tmp
function code(acceleration, distance, velocity) t_0 = sqrt(Float64(distance / acceleration)) tmp = 0.0 if (velocity <= -7.4e-205) tmp = Float64(Float64(Float64(-velocity) - velocity) / acceleration); elseif (velocity <= 6e-262) tmp = Float64(sqrt(2.0) * t_0); elseif (velocity <= 1.95e-200) tmp = Float64(t_0 * Float64(-sqrt(2.0))); elseif (velocity <= 7.4e-127) tmp = Float64(Float64(sqrt(Float64(Float64(distance * acceleration) * 2.0)) - velocity) / acceleration); else tmp = Float64(distance / velocity); end return tmp end
function tmp_2 = code(acceleration, distance, velocity) t_0 = sqrt((distance / acceleration)); tmp = 0.0; if (velocity <= -7.4e-205) tmp = (-velocity - velocity) / acceleration; elseif (velocity <= 6e-262) tmp = sqrt(2.0) * t_0; elseif (velocity <= 1.95e-200) tmp = t_0 * -sqrt(2.0); elseif (velocity <= 7.4e-127) tmp = (sqrt(((distance * acceleration) * 2.0)) - velocity) / acceleration; else tmp = distance / velocity; end tmp_2 = tmp; end
code[acceleration_, distance_, velocity_] := Block[{t$95$0 = N[Sqrt[N[(distance / acceleration), $MachinePrecision]], $MachinePrecision]}, If[LessEqual[velocity, -7.4e-205], N[(N[((-velocity) - velocity), $MachinePrecision] / acceleration), $MachinePrecision], If[LessEqual[velocity, 6e-262], N[(N[Sqrt[2.0], $MachinePrecision] * t$95$0), $MachinePrecision], If[LessEqual[velocity, 1.95e-200], N[(t$95$0 * (-N[Sqrt[2.0], $MachinePrecision])), $MachinePrecision], If[LessEqual[velocity, 7.4e-127], N[(N[(N[Sqrt[N[(N[(distance * acceleration), $MachinePrecision] * 2.0), $MachinePrecision]], $MachinePrecision] - velocity), $MachinePrecision] / acceleration), $MachinePrecision], N[(distance / velocity), $MachinePrecision]]]]]]
\begin{array}{l} \\ \begin{array}{l} t_0 := \sqrt{\frac{distance}{acceleration}}\\ \mathbf{if}\;velocity \leq -7.4 \cdot 10^{-205}:\\ \;\;\;\;\frac{\left(-velocity\right) - velocity}{acceleration}\\ \mathbf{elif}\;velocity \leq 6 \cdot 10^{-262}:\\ \;\;\;\;\sqrt{2} \cdot t\_0\\ \mathbf{elif}\;velocity \leq 1.95 \cdot 10^{-200}:\\ \;\;\;\;t\_0 \cdot \left(-\sqrt{2}\right)\\ \mathbf{elif}\;velocity \leq 7.4 \cdot 10^{-127}:\\ \;\;\;\;\frac{\sqrt{\left(distance \cdot acceleration\right) \cdot 2} - velocity}{acceleration}\\ \mathbf{else}:\\ \;\;\;\;\frac{distance}{velocity}\\ \end{array} \end{array}
if velocity < -7.4000000000000002e-205
Initial program 88.0%
Taylor expanded in velocity around -inf
mul-1-neg
N/A
lower-neg.f64
82.4
Applied rewrites82.4%
if -7.4000000000000002e-205 < velocity < 6.00000000000000036e-262
Initial program 54.4%
Taylor expanded in acceleration around inf
*-commutative
N/A
lower-*.f64
N/A
lower-sqrt.f64
N/A
lower-sqrt.f64
N/A
lower-/.f64
60.3
Applied rewrites60.3%
if 6.00000000000000036e-262 < velocity < 1.94999999999999999e-200
Initial program 37.5%
Taylor expanded in acceleration around inf
+-commutative
N/A
*-commutative
N/A
lower-fma.f64
N/A
lower-sqrt.f64
N/A
lower-sqrt.f64
N/A
lower-/.f64
N/A
associate-*r/
N/A
mul-1-neg
N/A
lower-/.f64
N/A
lower-neg.f64
10.9
Applied rewrites10.9%
Taylor expanded in acceleration around -inf
Applied rewrites72.2%
if 1.94999999999999999e-200 < velocity < 7.40000000000000078e-127
Initial program 65.7%
Taylor expanded in acceleration around inf
*-commutative
N/A
lower-*.f64
N/A
*-commutative
N/A
lower-*.f64
63.5
Applied rewrites63.5%
if 7.40000000000000078e-127 < velocity
Initial program 16.2%
Taylor expanded in acceleration around 0
lower-/.f64
88.8
Applied rewrites88.8%
Final simplification77.2%
(FPCore (acceleration distance velocity) :precision binary64 (if (<= velocity -1.5e-205) (/ (- (- velocity) velocity) acceleration) (if (<= velocity 7.4e-127) (/ (- (sqrt (* (* distance acceleration) 2.0)) velocity) acceleration) (/ distance velocity))))
double code(double acceleration, double distance, double velocity) { double tmp; if (velocity <= -1.5e-205) { tmp = (-velocity - velocity) / acceleration; } else if (velocity <= 7.4e-127) { tmp = (sqrt(((distance * acceleration) * 2.0)) - velocity) / acceleration; } else { tmp = distance / velocity; } return tmp; }
real(8) function code(acceleration, distance, velocity) real(8), intent (in) :: acceleration real(8), intent (in) :: distance real(8), intent (in) :: velocity real(8) :: tmp if (velocity <= (-1.5d-205)) then tmp = (-velocity - velocity) / acceleration else if (velocity <= 7.4d-127) then tmp = (sqrt(((distance * acceleration) * 2.0d0)) - velocity) / acceleration else tmp = distance / velocity end if code = tmp end function
public static double code(double acceleration, double distance, double velocity) { double tmp; if (velocity <= -1.5e-205) { tmp = (-velocity - velocity) / acceleration; } else if (velocity <= 7.4e-127) { tmp = (Math.sqrt(((distance * acceleration) * 2.0)) - velocity) / acceleration; } else { tmp = distance / velocity; } return tmp; }
def code(acceleration, distance, velocity): tmp = 0 if velocity <= -1.5e-205: tmp = (-velocity - velocity) / acceleration elif velocity <= 7.4e-127: tmp = (math.sqrt(((distance * acceleration) * 2.0)) - velocity) / acceleration else: tmp = distance / velocity return tmp
function code(acceleration, distance, velocity) tmp = 0.0 if (velocity <= -1.5e-205) tmp = Float64(Float64(Float64(-velocity) - velocity) / acceleration); elseif (velocity <= 7.4e-127) tmp = Float64(Float64(sqrt(Float64(Float64(distance * acceleration) * 2.0)) - velocity) / acceleration); else tmp = Float64(distance / velocity); end return tmp end
function tmp_2 = code(acceleration, distance, velocity) tmp = 0.0; if (velocity <= -1.5e-205) tmp = (-velocity - velocity) / acceleration; elseif (velocity <= 7.4e-127) tmp = (sqrt(((distance * acceleration) * 2.0)) - velocity) / acceleration; else tmp = distance / velocity; end tmp_2 = tmp; end
code[acceleration_, distance_, velocity_] := If[LessEqual[velocity, -1.5e-205], N[(N[((-velocity) - velocity), $MachinePrecision] / acceleration), $MachinePrecision], If[LessEqual[velocity, 7.4e-127], N[(N[(N[Sqrt[N[(N[(distance * acceleration), $MachinePrecision] * 2.0), $MachinePrecision]], $MachinePrecision] - velocity), $MachinePrecision] / acceleration), $MachinePrecision], N[(distance / velocity), $MachinePrecision]]]
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;velocity \leq -1.5 \cdot 10^{-205}:\\ \;\;\;\;\frac{\left(-velocity\right) - velocity}{acceleration}\\ \mathbf{elif}\;velocity \leq 7.4 \cdot 10^{-127}:\\ \;\;\;\;\frac{\sqrt{\left(distance \cdot acceleration\right) \cdot 2} - velocity}{acceleration}\\ \mathbf{else}:\\ \;\;\;\;\frac{distance}{velocity}\\ \end{array} \end{array}
if velocity < -1.5e-205
Initial program 86.4%
Taylor expanded in velocity around -inf
mul-1-neg
N/A
lower-neg.f64
81.2
Applied rewrites81.2%
if -1.5e-205 < velocity < 7.40000000000000078e-127
Initial program 55.7%
Taylor expanded in acceleration around inf
*-commutative
N/A
lower-*.f64
N/A
*-commutative
N/A
lower-*.f64
54.8
Applied rewrites54.8%
if 7.40000000000000078e-127 < velocity
Initial program 16.2%
Taylor expanded in acceleration around 0
lower-/.f64
88.8
Applied rewrites88.8%
(FPCore (acceleration distance velocity) :precision binary64 (if (<= velocity -5e-310) (/ (- (- velocity) velocity) acceleration) (/ distance velocity)))
double code(double acceleration, double distance, double velocity) { double tmp; if (velocity <= -5e-310) { tmp = (-velocity - velocity) / acceleration; } else { tmp = distance / velocity; } return tmp; }
real(8) function code(acceleration, distance, velocity) real(8), intent (in) :: acceleration real(8), intent (in) :: distance real(8), intent (in) :: velocity real(8) :: tmp if (velocity <= (-5d-310)) then tmp = (-velocity - velocity) / acceleration else tmp = distance / velocity end if code = tmp end function
public static double code(double acceleration, double distance, double velocity) { double tmp; if (velocity <= -5e-310) { tmp = (-velocity - velocity) / acceleration; } else { tmp = distance / velocity; } return tmp; }
def code(acceleration, distance, velocity): tmp = 0 if velocity <= -5e-310: tmp = (-velocity - velocity) / acceleration else: tmp = distance / velocity return tmp
function code(acceleration, distance, velocity) tmp = 0.0 if (velocity <= -5e-310) tmp = Float64(Float64(Float64(-velocity) - velocity) / acceleration); else tmp = Float64(distance / velocity); end return tmp end
function tmp_2 = code(acceleration, distance, velocity) tmp = 0.0; if (velocity <= -5e-310) tmp = (-velocity - velocity) / acceleration; else tmp = distance / velocity; end tmp_2 = tmp; end
code[acceleration_, distance_, velocity_] := If[LessEqual[velocity, -5e-310], N[(N[((-velocity) - velocity), $MachinePrecision] / acceleration), $MachinePrecision], N[(distance / velocity), $MachinePrecision]]
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;velocity \leq -5 \cdot 10^{-310}:\\ \;\;\;\;\frac{\left(-velocity\right) - velocity}{acceleration}\\ \mathbf{else}:\\ \;\;\;\;\frac{distance}{velocity}\\ \end{array} \end{array}
if velocity < -4.999999999999985e-310
Initial program 79.3%
Taylor expanded in velocity around -inf
mul-1-neg
N/A
lower-neg.f64
66.7
Applied rewrites66.7%
if -4.999999999999985e-310 < velocity
Initial program 37.2%
Taylor expanded in acceleration around 0
lower-/.f64
56.6
Applied rewrites56.6%
(FPCore (acceleration distance velocity) :precision binary64 (if (<= velocity -5e-310) (/ (- velocity) acceleration) (/ distance velocity)))
double code(double acceleration, double distance, double velocity) { double tmp; if (velocity <= -5e-310) { tmp = -velocity / acceleration; } else { tmp = distance / velocity; } return tmp; }
real(8) function code(acceleration, distance, velocity) real(8), intent (in) :: acceleration real(8), intent (in) :: distance real(8), intent (in) :: velocity real(8) :: tmp if (velocity <= (-5d-310)) then tmp = -velocity / acceleration else tmp = distance / velocity end if code = tmp end function
public static double code(double acceleration, double distance, double velocity) { double tmp; if (velocity <= -5e-310) { tmp = -velocity / acceleration; } else { tmp = distance / velocity; } return tmp; }
def code(acceleration, distance, velocity): tmp = 0 if velocity <= -5e-310: tmp = -velocity / acceleration else: tmp = distance / velocity return tmp
function code(acceleration, distance, velocity) tmp = 0.0 if (velocity <= -5e-310) tmp = Float64(Float64(-velocity) / acceleration); else tmp = Float64(distance / velocity); end return tmp end
function tmp_2 = code(acceleration, distance, velocity) tmp = 0.0; if (velocity <= -5e-310) tmp = -velocity / acceleration; else tmp = distance / velocity; end tmp_2 = tmp; end
code[acceleration_, distance_, velocity_] := If[LessEqual[velocity, -5e-310], N[((-velocity) / acceleration), $MachinePrecision], N[(distance / velocity), $MachinePrecision]]
\begin{array}{l} \\ \begin{array}{l} \mathbf{if}\;velocity \leq -5 \cdot 10^{-310}:\\ \;\;\;\;\frac{-velocity}{acceleration}\\ \mathbf{else}:\\ \;\;\;\;\frac{distance}{velocity}\\ \end{array} \end{array}
if velocity < -4.999999999999985e-310
Initial program 79.3%
Taylor expanded in acceleration around inf
+-commutative
N/A
*-commutative
N/A
lower-fma.f64
N/A
lower-sqrt.f64
N/A
lower-sqrt.f64
N/A
lower-/.f64
N/A
associate-*r/
N/A
mul-1-neg
N/A
lower-/.f64
N/A
lower-neg.f64
22.4
Applied rewrites22.4%
Taylor expanded in velocity around inf
Applied rewrites14.9%
if -4.999999999999985e-310 < velocity
Initial program 37.2%
Taylor expanded in acceleration around 0
lower-/.f64
56.6
Applied rewrites56.6%
(FPCore (acceleration distance velocity) :precision binary64 (/ distance velocity))
double code(double acceleration, double distance, double velocity) { return distance / velocity; }
real(8) function code(acceleration, distance, velocity) real(8), intent (in) :: acceleration real(8), intent (in) :: distance real(8), intent (in) :: velocity code = distance / velocity end function
public static double code(double acceleration, double distance, double velocity) { return distance / velocity; }
def code(acceleration, distance, velocity): return distance / velocity
function code(acceleration, distance, velocity) return Float64(distance / velocity) end
function tmp = code(acceleration, distance, velocity) tmp = distance / velocity; end
code[acceleration_, distance_, velocity_] := N[(distance / velocity), $MachinePrecision]
\begin{array}{l} \\ \frac{distance}{velocity} \end{array}
Initial program 55.8%
Taylor expanded in acceleration around 0
lower-/.f64
32.8
Applied rewrites32.8%
herbie shell --seed 1
(FPCore (acceleration distance velocity)
:name "(sqrt(2 * acceleration * distance + velocity * velocity) - velocity) / acceleration"
:precision binary64
:pre (and (and (and (<= -100000.0 acceleration) (<= acceleration 100000.0)) (and (<= -0.0001 distance) (<= distance 0.0001))) (and (<= -1000.0 velocity) (<= velocity 1000.0)))
(/ (- (sqrt (+ (* (* 2.0 acceleration) distance) (* velocity velocity))) velocity) acceleration))