
(FPCore (i) :precision binary64 (let* ((t_0 (* (* 2.0 i) (* 2.0 i)))) (/ (/ (* (* i i) (* i i)) t_0) (- t_0 1.0))))
double code(double i) {
double t_0 = (2.0 * i) * (2.0 * i);
return (((i * i) * (i * i)) / t_0) / (t_0 - 1.0);
}
real(8) function code(i)
use fmin_fmax_functions
real(8), intent (in) :: i
real(8) :: t_0
t_0 = (2.0d0 * i) * (2.0d0 * i)
code = (((i * i) * (i * i)) / t_0) / (t_0 - 1.0d0)
end function
public static double code(double i) {
double t_0 = (2.0 * i) * (2.0 * i);
return (((i * i) * (i * i)) / t_0) / (t_0 - 1.0);
}
def code(i): t_0 = (2.0 * i) * (2.0 * i) return (((i * i) * (i * i)) / t_0) / (t_0 - 1.0)
function code(i) t_0 = Float64(Float64(2.0 * i) * Float64(2.0 * i)) return Float64(Float64(Float64(Float64(i * i) * Float64(i * i)) / t_0) / Float64(t_0 - 1.0)) end
function tmp = code(i) t_0 = (2.0 * i) * (2.0 * i); tmp = (((i * i) * (i * i)) / t_0) / (t_0 - 1.0); end
code[i_] := Block[{t$95$0 = N[(N[(2.0 * i), $MachinePrecision] * N[(2.0 * i), $MachinePrecision]), $MachinePrecision]}, N[(N[(N[(N[(i * i), $MachinePrecision] * N[(i * i), $MachinePrecision]), $MachinePrecision] / t$95$0), $MachinePrecision] / N[(t$95$0 - 1.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
t_0 := \left(2 \cdot i\right) \cdot \left(2 \cdot i\right)\\
\frac{\frac{\left(i \cdot i\right) \cdot \left(i \cdot i\right)}{t\_0}}{t\_0 - 1}
\end{array}
Herbie found 6 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (i) :precision binary64 (let* ((t_0 (* (* 2.0 i) (* 2.0 i)))) (/ (/ (* (* i i) (* i i)) t_0) (- t_0 1.0))))
double code(double i) {
double t_0 = (2.0 * i) * (2.0 * i);
return (((i * i) * (i * i)) / t_0) / (t_0 - 1.0);
}
real(8) function code(i)
use fmin_fmax_functions
real(8), intent (in) :: i
real(8) :: t_0
t_0 = (2.0d0 * i) * (2.0d0 * i)
code = (((i * i) * (i * i)) / t_0) / (t_0 - 1.0d0)
end function
public static double code(double i) {
double t_0 = (2.0 * i) * (2.0 * i);
return (((i * i) * (i * i)) / t_0) / (t_0 - 1.0);
}
def code(i): t_0 = (2.0 * i) * (2.0 * i) return (((i * i) * (i * i)) / t_0) / (t_0 - 1.0)
function code(i) t_0 = Float64(Float64(2.0 * i) * Float64(2.0 * i)) return Float64(Float64(Float64(Float64(i * i) * Float64(i * i)) / t_0) / Float64(t_0 - 1.0)) end
function tmp = code(i) t_0 = (2.0 * i) * (2.0 * i); tmp = (((i * i) * (i * i)) / t_0) / (t_0 - 1.0); end
code[i_] := Block[{t$95$0 = N[(N[(2.0 * i), $MachinePrecision] * N[(2.0 * i), $MachinePrecision]), $MachinePrecision]}, N[(N[(N[(N[(i * i), $MachinePrecision] * N[(i * i), $MachinePrecision]), $MachinePrecision] / t$95$0), $MachinePrecision] / N[(t$95$0 - 1.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
t_0 := \left(2 \cdot i\right) \cdot \left(2 \cdot i\right)\\
\frac{\frac{\left(i \cdot i\right) \cdot \left(i \cdot i\right)}{t\_0}}{t\_0 - 1}
\end{array}
(FPCore (i)
:precision binary64
(if (<= (fabs i) 110.0)
(/
1.0
(/
(fma 2.0 (fabs i) -1.0)
(/
(* (* (* (fabs i) (fabs i)) 0.25) 1.0)
(fma 2.0 (fabs i) 1.0))))
(if (<= (fabs i) 4e+133) (* (* 0.0 0.0) -0.25) 0.0625)))double code(double i) {
double tmp;
if (fabs(i) <= 110.0) {
tmp = 1.0 / (fma(2.0, fabs(i), -1.0) / ((((fabs(i) * fabs(i)) * 0.25) * 1.0) / fma(2.0, fabs(i), 1.0)));
} else if (fabs(i) <= 4e+133) {
tmp = (0.0 * 0.0) * -0.25;
} else {
tmp = 0.0625;
}
return tmp;
}
function code(i) tmp = 0.0 if (abs(i) <= 110.0) tmp = Float64(1.0 / Float64(fma(2.0, abs(i), -1.0) / Float64(Float64(Float64(Float64(abs(i) * abs(i)) * 0.25) * 1.0) / fma(2.0, abs(i), 1.0)))); elseif (abs(i) <= 4e+133) tmp = Float64(Float64(0.0 * 0.0) * -0.25); else tmp = 0.0625; end return tmp end
code[i_] := If[LessEqual[N[Abs[i], $MachinePrecision], 110.0], N[(1.0 / N[(N[(2.0 * N[Abs[i], $MachinePrecision] + -1.0), $MachinePrecision] / N[(N[(N[(N[(N[Abs[i], $MachinePrecision] * N[Abs[i], $MachinePrecision]), $MachinePrecision] * 0.25), $MachinePrecision] * 1.0), $MachinePrecision] / N[(2.0 * N[Abs[i], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[N[Abs[i], $MachinePrecision], 4e+133], N[(N[(0.0 * 0.0), $MachinePrecision] * -0.25), $MachinePrecision], 0.0625]]
\begin{array}{l}
\mathbf{if}\;\left|i\right| \leq 110:\\
\;\;\;\;\frac{1}{\frac{\mathsf{fma}\left(2, \left|i\right|, -1\right)}{\frac{\left(\left(\left|i\right| \cdot \left|i\right|\right) \cdot 0.25\right) \cdot 1}{\mathsf{fma}\left(2, \left|i\right|, 1\right)}}}\\
\mathbf{elif}\;\left|i\right| \leq 4 \cdot 10^{+133}:\\
\;\;\;\;\left(0 \cdot 0\right) \cdot -0.25\\
\mathbf{else}:\\
\;\;\;\;0.0625\\
\end{array}
if i < 110Initial program 20.3%
lift-/.f64N/A
lift--.f64N/A
lift-*.f64N/A
difference-of-sqr-1N/A
associate-/r*N/A
div-flipN/A
remove-sound-/N/A
lower-/.f64N/A
remove-sound-/N/A
lower-/.f64N/A
Applied rewrites51.7%
if 110 < i < 4.0000000000000001e133Initial program 20.3%
lift-/.f64N/A
lift-/.f64N/A
associate-/l/N/A
lift-*.f64N/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f64N/A
lift-*.f64N/A
lift-*.f64N/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites26.9%
Taylor expanded in i around 0
Applied rewrites39.0%
Taylor expanded in undef-var around zero
Applied rewrites64.1%
Taylor expanded in undef-var around zero
Applied rewrites64.1%
if 4.0000000000000001e133 < i Initial program 20.3%
Taylor expanded in i around inf
Applied rewrites26.7%
(FPCore (i)
:precision binary64
(if (<= (fabs i) 110.0)
(/
1.0
(/
(fma (* 4.0 (fabs i)) (fabs i) -1.0)
(* 0.25 (* (fabs i) (fabs i)))))
(if (<= (fabs i) 4e+133) (* (* 0.0 0.0) -0.25) 0.0625)))double code(double i) {
double tmp;
if (fabs(i) <= 110.0) {
tmp = 1.0 / (fma((4.0 * fabs(i)), fabs(i), -1.0) / (0.25 * (fabs(i) * fabs(i))));
} else if (fabs(i) <= 4e+133) {
tmp = (0.0 * 0.0) * -0.25;
} else {
tmp = 0.0625;
}
return tmp;
}
function code(i) tmp = 0.0 if (abs(i) <= 110.0) tmp = Float64(1.0 / Float64(fma(Float64(4.0 * abs(i)), abs(i), -1.0) / Float64(0.25 * Float64(abs(i) * abs(i))))); elseif (abs(i) <= 4e+133) tmp = Float64(Float64(0.0 * 0.0) * -0.25); else tmp = 0.0625; end return tmp end
code[i_] := If[LessEqual[N[Abs[i], $MachinePrecision], 110.0], N[(1.0 / N[(N[(N[(4.0 * N[Abs[i], $MachinePrecision]), $MachinePrecision] * N[Abs[i], $MachinePrecision] + -1.0), $MachinePrecision] / N[(0.25 * N[(N[Abs[i], $MachinePrecision] * N[Abs[i], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[N[Abs[i], $MachinePrecision], 4e+133], N[(N[(0.0 * 0.0), $MachinePrecision] * -0.25), $MachinePrecision], 0.0625]]
\begin{array}{l}
\mathbf{if}\;\left|i\right| \leq 110:\\
\;\;\;\;\frac{1}{\frac{\mathsf{fma}\left(4 \cdot \left|i\right|, \left|i\right|, -1\right)}{0.25 \cdot \left(\left|i\right| \cdot \left|i\right|\right)}}\\
\mathbf{elif}\;\left|i\right| \leq 4 \cdot 10^{+133}:\\
\;\;\;\;\left(0 \cdot 0\right) \cdot -0.25\\
\mathbf{else}:\\
\;\;\;\;0.0625\\
\end{array}
if i < 110Initial program 20.3%
lift-/.f64N/A
lift-/.f64N/A
lift-*.f64N/A
lift-*.f64N/A
times-fracN/A
associate-/l*N/A
lower-*.f64N/A
lift-*.f64N/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f64N/A
lift-*.f64N/A
count-2-revN/A
lower-+.f64N/A
lower-/.f64N/A
Applied rewrites64.3%
Applied rewrites51.2%
if 110 < i < 4.0000000000000001e133Initial program 20.3%
lift-/.f64N/A
lift-/.f64N/A
associate-/l/N/A
lift-*.f64N/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f64N/A
lift-*.f64N/A
lift-*.f64N/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites26.9%
Taylor expanded in i around 0
Applied rewrites39.0%
Taylor expanded in undef-var around zero
Applied rewrites64.1%
Taylor expanded in undef-var around zero
Applied rewrites64.1%
if 4.0000000000000001e133 < i Initial program 20.3%
Taylor expanded in i around inf
Applied rewrites26.7%
(FPCore (i) :precision binary64 (if (<= (fabs i) 110.0) (* (/ (fabs i) (fma 16.0 (* (fabs i) (fabs i)) -4.0)) (fabs i)) (if (<= (fabs i) 4e+133) (* (* 0.0 0.0) -0.25) 0.0625)))
double code(double i) {
double tmp;
if (fabs(i) <= 110.0) {
tmp = (fabs(i) / fma(16.0, (fabs(i) * fabs(i)), -4.0)) * fabs(i);
} else if (fabs(i) <= 4e+133) {
tmp = (0.0 * 0.0) * -0.25;
} else {
tmp = 0.0625;
}
return tmp;
}
function code(i) tmp = 0.0 if (abs(i) <= 110.0) tmp = Float64(Float64(abs(i) / fma(16.0, Float64(abs(i) * abs(i)), -4.0)) * abs(i)); elseif (abs(i) <= 4e+133) tmp = Float64(Float64(0.0 * 0.0) * -0.25); else tmp = 0.0625; end return tmp end
code[i_] := If[LessEqual[N[Abs[i], $MachinePrecision], 110.0], N[(N[(N[Abs[i], $MachinePrecision] / N[(16.0 * N[(N[Abs[i], $MachinePrecision] * N[Abs[i], $MachinePrecision]), $MachinePrecision] + -4.0), $MachinePrecision]), $MachinePrecision] * N[Abs[i], $MachinePrecision]), $MachinePrecision], If[LessEqual[N[Abs[i], $MachinePrecision], 4e+133], N[(N[(0.0 * 0.0), $MachinePrecision] * -0.25), $MachinePrecision], 0.0625]]
\begin{array}{l}
\mathbf{if}\;\left|i\right| \leq 110:\\
\;\;\;\;\frac{\left|i\right|}{\mathsf{fma}\left(16, \left|i\right| \cdot \left|i\right|, -4\right)} \cdot \left|i\right|\\
\mathbf{elif}\;\left|i\right| \leq 4 \cdot 10^{+133}:\\
\;\;\;\;\left(0 \cdot 0\right) \cdot -0.25\\
\mathbf{else}:\\
\;\;\;\;0.0625\\
\end{array}
if i < 110Initial program 20.3%
lift-/.f64N/A
lift-/.f64N/A
lift-*.f64N/A
lift-*.f64N/A
times-fracN/A
associate-/l*N/A
lower-*.f64N/A
lift-*.f64N/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f64N/A
lift-*.f64N/A
count-2-revN/A
lower-+.f64N/A
lower-/.f64N/A
Applied rewrites64.3%
Applied rewrites64.3%
lift-*.f64N/A
lift-/.f64N/A
associate-*l/N/A
frac-2negN/A
distribute-frac-neg2N/A
distribute-rgt-neg-outN/A
associate-*l/N/A
lift-/.f64N/A
distribute-rgt-neg-outN/A
*-commutativeN/A
distribute-lft-neg-outN/A
lift-/.f64N/A
frac-2negN/A
metadata-evalN/A
associate-*r/N/A
mul-1-negN/A
*-commutativeN/A
associate-*l*N/A
metadata-evalN/A
metadata-evalN/A
mult-flipN/A
Applied rewrites64.3%
if 110 < i < 4.0000000000000001e133Initial program 20.3%
lift-/.f64N/A
lift-/.f64N/A
associate-/l/N/A
lift-*.f64N/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f64N/A
lift-*.f64N/A
lift-*.f64N/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites26.9%
Taylor expanded in i around 0
Applied rewrites39.0%
Taylor expanded in undef-var around zero
Applied rewrites64.1%
Taylor expanded in undef-var around zero
Applied rewrites64.1%
if 4.0000000000000001e133 < i Initial program 20.3%
Taylor expanded in i around inf
Applied rewrites26.7%
(FPCore (i) :precision binary64 (if (<= (fabs i) 7e-9) (* (* (fabs i) (fabs i)) -0.25) (if (<= (fabs i) 4e+133) (* (* 0.0 0.0) -0.25) 0.0625)))
double code(double i) {
double tmp;
if (fabs(i) <= 7e-9) {
tmp = (fabs(i) * fabs(i)) * -0.25;
} else if (fabs(i) <= 4e+133) {
tmp = (0.0 * 0.0) * -0.25;
} else {
tmp = 0.0625;
}
return tmp;
}
real(8) function code(i)
use fmin_fmax_functions
real(8), intent (in) :: i
real(8) :: tmp
if (abs(i) <= 7d-9) then
tmp = (abs(i) * abs(i)) * (-0.25d0)
else if (abs(i) <= 4d+133) then
tmp = (0.0d0 * 0.0d0) * (-0.25d0)
else
tmp = 0.0625d0
end if
code = tmp
end function
public static double code(double i) {
double tmp;
if (Math.abs(i) <= 7e-9) {
tmp = (Math.abs(i) * Math.abs(i)) * -0.25;
} else if (Math.abs(i) <= 4e+133) {
tmp = (0.0 * 0.0) * -0.25;
} else {
tmp = 0.0625;
}
return tmp;
}
def code(i): tmp = 0 if math.fabs(i) <= 7e-9: tmp = (math.fabs(i) * math.fabs(i)) * -0.25 elif math.fabs(i) <= 4e+133: tmp = (0.0 * 0.0) * -0.25 else: tmp = 0.0625 return tmp
function code(i) tmp = 0.0 if (abs(i) <= 7e-9) tmp = Float64(Float64(abs(i) * abs(i)) * -0.25); elseif (abs(i) <= 4e+133) tmp = Float64(Float64(0.0 * 0.0) * -0.25); else tmp = 0.0625; end return tmp end
function tmp_2 = code(i) tmp = 0.0; if (abs(i) <= 7e-9) tmp = (abs(i) * abs(i)) * -0.25; elseif (abs(i) <= 4e+133) tmp = (0.0 * 0.0) * -0.25; else tmp = 0.0625; end tmp_2 = tmp; end
code[i_] := If[LessEqual[N[Abs[i], $MachinePrecision], 7e-9], N[(N[(N[Abs[i], $MachinePrecision] * N[Abs[i], $MachinePrecision]), $MachinePrecision] * -0.25), $MachinePrecision], If[LessEqual[N[Abs[i], $MachinePrecision], 4e+133], N[(N[(0.0 * 0.0), $MachinePrecision] * -0.25), $MachinePrecision], 0.0625]]
\begin{array}{l}
\mathbf{if}\;\left|i\right| \leq 7 \cdot 10^{-9}:\\
\;\;\;\;\left(\left|i\right| \cdot \left|i\right|\right) \cdot -0.25\\
\mathbf{elif}\;\left|i\right| \leq 4 \cdot 10^{+133}:\\
\;\;\;\;\left(0 \cdot 0\right) \cdot -0.25\\
\mathbf{else}:\\
\;\;\;\;0.0625\\
\end{array}
if i < 6.9999999999999998e-9Initial program 20.3%
lift-/.f64N/A
lift-/.f64N/A
associate-/l/N/A
lift-*.f64N/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f64N/A
lift-*.f64N/A
lift-*.f64N/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites26.9%
Taylor expanded in i around 0
Applied rewrites39.0%
if 6.9999999999999998e-9 < i < 4.0000000000000001e133Initial program 20.3%
lift-/.f64N/A
lift-/.f64N/A
associate-/l/N/A
lift-*.f64N/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f64N/A
lift-*.f64N/A
lift-*.f64N/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites26.9%
Taylor expanded in i around 0
Applied rewrites39.0%
Taylor expanded in undef-var around zero
Applied rewrites64.1%
Taylor expanded in undef-var around zero
Applied rewrites64.1%
if 4.0000000000000001e133 < i Initial program 20.3%
Taylor expanded in i around inf
Applied rewrites26.7%
(FPCore (i) :precision binary64 (if (<= (fabs i) 0.023) (* (* (fabs i) (fabs i)) -0.25) 0.0625))
double code(double i) {
double tmp;
if (fabs(i) <= 0.023) {
tmp = (fabs(i) * fabs(i)) * -0.25;
} else {
tmp = 0.0625;
}
return tmp;
}
real(8) function code(i)
use fmin_fmax_functions
real(8), intent (in) :: i
real(8) :: tmp
if (abs(i) <= 0.023d0) then
tmp = (abs(i) * abs(i)) * (-0.25d0)
else
tmp = 0.0625d0
end if
code = tmp
end function
public static double code(double i) {
double tmp;
if (Math.abs(i) <= 0.023) {
tmp = (Math.abs(i) * Math.abs(i)) * -0.25;
} else {
tmp = 0.0625;
}
return tmp;
}
def code(i): tmp = 0 if math.fabs(i) <= 0.023: tmp = (math.fabs(i) * math.fabs(i)) * -0.25 else: tmp = 0.0625 return tmp
function code(i) tmp = 0.0 if (abs(i) <= 0.023) tmp = Float64(Float64(abs(i) * abs(i)) * -0.25); else tmp = 0.0625; end return tmp end
function tmp_2 = code(i) tmp = 0.0; if (abs(i) <= 0.023) tmp = (abs(i) * abs(i)) * -0.25; else tmp = 0.0625; end tmp_2 = tmp; end
code[i_] := If[LessEqual[N[Abs[i], $MachinePrecision], 0.023], N[(N[(N[Abs[i], $MachinePrecision] * N[Abs[i], $MachinePrecision]), $MachinePrecision] * -0.25), $MachinePrecision], 0.0625]
\begin{array}{l}
\mathbf{if}\;\left|i\right| \leq 0.023:\\
\;\;\;\;\left(\left|i\right| \cdot \left|i\right|\right) \cdot -0.25\\
\mathbf{else}:\\
\;\;\;\;0.0625\\
\end{array}
if i < 0.023Initial program 20.3%
lift-/.f64N/A
lift-/.f64N/A
associate-/l/N/A
lift-*.f64N/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f64N/A
lift-*.f64N/A
lift-*.f64N/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites26.9%
Taylor expanded in i around 0
Applied rewrites39.0%
if 0.023 < i Initial program 20.3%
Taylor expanded in i around inf
Applied rewrites26.7%
(FPCore (i) :precision binary64 0.0625)
double code(double i) {
return 0.0625;
}
real(8) function code(i)
use fmin_fmax_functions
real(8), intent (in) :: i
code = 0.0625d0
end function
public static double code(double i) {
return 0.0625;
}
def code(i): return 0.0625
function code(i) return 0.0625 end
function tmp = code(i) tmp = 0.0625; end
code[i_] := 0.0625
0.0625
Initial program 20.3%
Taylor expanded in i around inf
Applied rewrites26.7%
herbie shell --seed 2025313 -o setup:search
(FPCore (i)
:name "Octave 3.8, jcobi/4, as called"
:precision binary64
:pre (> i 0.0)
(/ (/ (* (* i i) (* i i)) (* (* 2.0 i) (* 2.0 i))) (- (* (* 2.0 i) (* 2.0 i)) 1.0)))