
(FPCore (a b) :precision binary64 (/ (exp a) (+ (exp a) (exp b))))
double code(double a, double b) {
return exp(a) / (exp(a) + exp(b));
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
code = exp(a) / (exp(a) + exp(b))
end function
public static double code(double a, double b) {
return Math.exp(a) / (Math.exp(a) + Math.exp(b));
}
def code(a, b): return math.exp(a) / (math.exp(a) + math.exp(b))
function code(a, b) return Float64(exp(a) / Float64(exp(a) + exp(b))) end
function tmp = code(a, b) tmp = exp(a) / (exp(a) + exp(b)); end
code[a_, b_] := N[(N[Exp[a], $MachinePrecision] / N[(N[Exp[a], $MachinePrecision] + N[Exp[b], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{e^{a}}{e^{a} + e^{b}}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 13 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (a b) :precision binary64 (/ (exp a) (+ (exp a) (exp b))))
double code(double a, double b) {
return exp(a) / (exp(a) + exp(b));
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
code = exp(a) / (exp(a) + exp(b))
end function
public static double code(double a, double b) {
return Math.exp(a) / (Math.exp(a) + Math.exp(b));
}
def code(a, b): return math.exp(a) / (math.exp(a) + math.exp(b))
function code(a, b) return Float64(exp(a) / Float64(exp(a) + exp(b))) end
function tmp = code(a, b) tmp = exp(a) / (exp(a) + exp(b)); end
code[a_, b_] := N[(N[Exp[a], $MachinePrecision] / N[(N[Exp[a], $MachinePrecision] + N[Exp[b], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{e^{a}}{e^{a} + e^{b}}
\end{array}
(FPCore (a b) :precision binary64 (if (<= (exp a) 0.99999) (/ (exp a) (+ (exp a) 1.0)) (exp (- 0.0 (log1p (exp b))))))
double code(double a, double b) {
double tmp;
if (exp(a) <= 0.99999) {
tmp = exp(a) / (exp(a) + 1.0);
} else {
tmp = exp((0.0 - log1p(exp(b))));
}
return tmp;
}
public static double code(double a, double b) {
double tmp;
if (Math.exp(a) <= 0.99999) {
tmp = Math.exp(a) / (Math.exp(a) + 1.0);
} else {
tmp = Math.exp((0.0 - Math.log1p(Math.exp(b))));
}
return tmp;
}
def code(a, b): tmp = 0 if math.exp(a) <= 0.99999: tmp = math.exp(a) / (math.exp(a) + 1.0) else: tmp = math.exp((0.0 - math.log1p(math.exp(b)))) return tmp
function code(a, b) tmp = 0.0 if (exp(a) <= 0.99999) tmp = Float64(exp(a) / Float64(exp(a) + 1.0)); else tmp = exp(Float64(0.0 - log1p(exp(b)))); end return tmp end
code[a_, b_] := If[LessEqual[N[Exp[a], $MachinePrecision], 0.99999], N[(N[Exp[a], $MachinePrecision] / N[(N[Exp[a], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[Exp[N[(0.0 - N[Log[1 + N[Exp[b], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;e^{a} \leq 0.99999:\\
\;\;\;\;\frac{e^{a}}{e^{a} + 1}\\
\mathbf{else}:\\
\;\;\;\;e^{0 - \mathsf{log1p}\left(e^{b}\right)}\\
\end{array}
\end{array}
if (exp.f64 a) < 0.999990000000000046Initial program 97.3%
Taylor expanded in b around 0
Simplified98.7%
if 0.999990000000000046 < (exp.f64 a) Initial program 99.4%
Taylor expanded in a around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f6499.6%
Simplified99.6%
inv-powN/A
pow-to-expN/A
exp-lowering-exp.f64N/A
rem-log-expN/A
pow-to-expN/A
inv-powN/A
log-divN/A
metadata-evalN/A
--lowering--.f64N/A
log1p-defineN/A
log1p-lowering-log1p.f64N/A
exp-lowering-exp.f6499.6%
Applied egg-rr99.6%
sub0-negN/A
neg-lowering-neg.f64N/A
log1p-defineN/A
log1p-lowering-log1p.f64N/A
exp-lowering-exp.f6499.6%
Applied egg-rr99.6%
Final simplification99.3%
(FPCore (a b) :precision binary64 (if (<= (exp a) 0.99999) (/ (exp a) (+ (exp a) 1.0)) (/ 1.0 (+ (exp b) 1.0))))
double code(double a, double b) {
double tmp;
if (exp(a) <= 0.99999) {
tmp = exp(a) / (exp(a) + 1.0);
} else {
tmp = 1.0 / (exp(b) + 1.0);
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (exp(a) <= 0.99999d0) then
tmp = exp(a) / (exp(a) + 1.0d0)
else
tmp = 1.0d0 / (exp(b) + 1.0d0)
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (Math.exp(a) <= 0.99999) {
tmp = Math.exp(a) / (Math.exp(a) + 1.0);
} else {
tmp = 1.0 / (Math.exp(b) + 1.0);
}
return tmp;
}
def code(a, b): tmp = 0 if math.exp(a) <= 0.99999: tmp = math.exp(a) / (math.exp(a) + 1.0) else: tmp = 1.0 / (math.exp(b) + 1.0) return tmp
function code(a, b) tmp = 0.0 if (exp(a) <= 0.99999) tmp = Float64(exp(a) / Float64(exp(a) + 1.0)); else tmp = Float64(1.0 / Float64(exp(b) + 1.0)); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (exp(a) <= 0.99999) tmp = exp(a) / (exp(a) + 1.0); else tmp = 1.0 / (exp(b) + 1.0); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[N[Exp[a], $MachinePrecision], 0.99999], N[(N[Exp[a], $MachinePrecision] / N[(N[Exp[a], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], N[(1.0 / N[(N[Exp[b], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;e^{a} \leq 0.99999:\\
\;\;\;\;\frac{e^{a}}{e^{a} + 1}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{e^{b} + 1}\\
\end{array}
\end{array}
if (exp.f64 a) < 0.999990000000000046Initial program 97.3%
Taylor expanded in b around 0
Simplified98.7%
if 0.999990000000000046 < (exp.f64 a) Initial program 99.4%
Taylor expanded in a around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f6499.6%
Simplified99.6%
Final simplification99.3%
(FPCore (a b) :precision binary64 (/ (exp a) (+ (exp a) (exp b))))
double code(double a, double b) {
return exp(a) / (exp(a) + exp(b));
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
code = exp(a) / (exp(a) + exp(b))
end function
public static double code(double a, double b) {
return Math.exp(a) / (Math.exp(a) + Math.exp(b));
}
def code(a, b): return math.exp(a) / (math.exp(a) + math.exp(b))
function code(a, b) return Float64(exp(a) / Float64(exp(a) + exp(b))) end
function tmp = code(a, b) tmp = exp(a) / (exp(a) + exp(b)); end
code[a_, b_] := N[(N[Exp[a], $MachinePrecision] / N[(N[Exp[a], $MachinePrecision] + N[Exp[b], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{e^{a}}{e^{a} + e^{b}}
\end{array}
Initial program 98.8%
(FPCore (a b) :precision binary64 (if (<= a -720000000.0) (/ (exp a) 2.0) (/ 1.0 (+ (exp b) 1.0))))
double code(double a, double b) {
double tmp;
if (a <= -720000000.0) {
tmp = exp(a) / 2.0;
} else {
tmp = 1.0 / (exp(b) + 1.0);
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (a <= (-720000000.0d0)) then
tmp = exp(a) / 2.0d0
else
tmp = 1.0d0 / (exp(b) + 1.0d0)
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (a <= -720000000.0) {
tmp = Math.exp(a) / 2.0;
} else {
tmp = 1.0 / (Math.exp(b) + 1.0);
}
return tmp;
}
def code(a, b): tmp = 0 if a <= -720000000.0: tmp = math.exp(a) / 2.0 else: tmp = 1.0 / (math.exp(b) + 1.0) return tmp
function code(a, b) tmp = 0.0 if (a <= -720000000.0) tmp = Float64(exp(a) / 2.0); else tmp = Float64(1.0 / Float64(exp(b) + 1.0)); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (a <= -720000000.0) tmp = exp(a) / 2.0; else tmp = 1.0 / (exp(b) + 1.0); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[a, -720000000.0], N[(N[Exp[a], $MachinePrecision] / 2.0), $MachinePrecision], N[(1.0 / N[(N[Exp[b], $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;a \leq -720000000:\\
\;\;\;\;\frac{e^{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{e^{b} + 1}\\
\end{array}
\end{array}
if a < -7.2e8Initial program 98.6%
Taylor expanded in b around 0
Simplified100.0%
Taylor expanded in a around 0
Simplified100.0%
if -7.2e8 < a Initial program 98.9%
Taylor expanded in a around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f6498.0%
Simplified98.0%
Final simplification98.5%
(FPCore (a b) :precision binary64 (if (<= b 9.5e+102) (/ (exp a) 2.0) (/ 1.0 (+ 2.0 (* b (+ 1.0 (* b (+ 0.5 (* b 0.16666666666666666)))))))))
double code(double a, double b) {
double tmp;
if (b <= 9.5e+102) {
tmp = exp(a) / 2.0;
} else {
tmp = 1.0 / (2.0 + (b * (1.0 + (b * (0.5 + (b * 0.16666666666666666))))));
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (b <= 9.5d+102) then
tmp = exp(a) / 2.0d0
else
tmp = 1.0d0 / (2.0d0 + (b * (1.0d0 + (b * (0.5d0 + (b * 0.16666666666666666d0))))))
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (b <= 9.5e+102) {
tmp = Math.exp(a) / 2.0;
} else {
tmp = 1.0 / (2.0 + (b * (1.0 + (b * (0.5 + (b * 0.16666666666666666))))));
}
return tmp;
}
def code(a, b): tmp = 0 if b <= 9.5e+102: tmp = math.exp(a) / 2.0 else: tmp = 1.0 / (2.0 + (b * (1.0 + (b * (0.5 + (b * 0.16666666666666666)))))) return tmp
function code(a, b) tmp = 0.0 if (b <= 9.5e+102) tmp = Float64(exp(a) / 2.0); else tmp = Float64(1.0 / Float64(2.0 + Float64(b * Float64(1.0 + Float64(b * Float64(0.5 + Float64(b * 0.16666666666666666))))))); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (b <= 9.5e+102) tmp = exp(a) / 2.0; else tmp = 1.0 / (2.0 + (b * (1.0 + (b * (0.5 + (b * 0.16666666666666666)))))); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[b, 9.5e+102], N[(N[Exp[a], $MachinePrecision] / 2.0), $MachinePrecision], N[(1.0 / N[(2.0 + N[(b * N[(1.0 + N[(b * N[(0.5 + N[(b * 0.16666666666666666), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;b \leq 9.5 \cdot 10^{+102}:\\
\;\;\;\;\frac{e^{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2 + b \cdot \left(1 + b \cdot \left(0.5 + b \cdot 0.16666666666666666\right)\right)}\\
\end{array}
\end{array}
if b < 9.4999999999999992e102Initial program 98.6%
Taylor expanded in b around 0
Simplified75.0%
Taylor expanded in a around 0
Simplified73.3%
if 9.4999999999999992e102 < b Initial program 100.0%
Taylor expanded in a around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64100.0%
Simplified100.0%
Taylor expanded in b around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f64100.0%
Simplified100.0%
(FPCore (a b)
:precision binary64
(let* ((t_0 (* b (* b b)))
(t_1 (- (/ (* b b) 2.0) 2.0))
(t_2 (/ 2.0 (* b b))))
(if (<= b 7200.0)
(+
0.5
(*
a
(+
0.25
(*
(* a a)
(+ -0.020833333333333332 (* (* a a) 0.0020833333333333333))))))
(if (<= b 1.35e+31)
(* -0.020833333333333332 (* a (* a a)))
(if (<= b 1.6e+77)
(/ 1.0 (/ (+ 8.0 (/ (* t_0 t_0) 8.0)) (+ 4.0 (/ t_1 t_2))))
(if (<= b 1.35e+154)
(/ 1.0 (/ (- (* (* b b) (* 0.25 (* b b))) 4.0) t_1))
t_2))))))
double code(double a, double b) {
double t_0 = b * (b * b);
double t_1 = ((b * b) / 2.0) - 2.0;
double t_2 = 2.0 / (b * b);
double tmp;
if (b <= 7200.0) {
tmp = 0.5 + (a * (0.25 + ((a * a) * (-0.020833333333333332 + ((a * a) * 0.0020833333333333333)))));
} else if (b <= 1.35e+31) {
tmp = -0.020833333333333332 * (a * (a * a));
} else if (b <= 1.6e+77) {
tmp = 1.0 / ((8.0 + ((t_0 * t_0) / 8.0)) / (4.0 + (t_1 / t_2)));
} else if (b <= 1.35e+154) {
tmp = 1.0 / ((((b * b) * (0.25 * (b * b))) - 4.0) / t_1);
} else {
tmp = t_2;
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: t_0
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_0 = b * (b * b)
t_1 = ((b * b) / 2.0d0) - 2.0d0
t_2 = 2.0d0 / (b * b)
if (b <= 7200.0d0) then
tmp = 0.5d0 + (a * (0.25d0 + ((a * a) * ((-0.020833333333333332d0) + ((a * a) * 0.0020833333333333333d0)))))
else if (b <= 1.35d+31) then
tmp = (-0.020833333333333332d0) * (a * (a * a))
else if (b <= 1.6d+77) then
tmp = 1.0d0 / ((8.0d0 + ((t_0 * t_0) / 8.0d0)) / (4.0d0 + (t_1 / t_2)))
else if (b <= 1.35d+154) then
tmp = 1.0d0 / ((((b * b) * (0.25d0 * (b * b))) - 4.0d0) / t_1)
else
tmp = t_2
end if
code = tmp
end function
public static double code(double a, double b) {
double t_0 = b * (b * b);
double t_1 = ((b * b) / 2.0) - 2.0;
double t_2 = 2.0 / (b * b);
double tmp;
if (b <= 7200.0) {
tmp = 0.5 + (a * (0.25 + ((a * a) * (-0.020833333333333332 + ((a * a) * 0.0020833333333333333)))));
} else if (b <= 1.35e+31) {
tmp = -0.020833333333333332 * (a * (a * a));
} else if (b <= 1.6e+77) {
tmp = 1.0 / ((8.0 + ((t_0 * t_0) / 8.0)) / (4.0 + (t_1 / t_2)));
} else if (b <= 1.35e+154) {
tmp = 1.0 / ((((b * b) * (0.25 * (b * b))) - 4.0) / t_1);
} else {
tmp = t_2;
}
return tmp;
}
def code(a, b): t_0 = b * (b * b) t_1 = ((b * b) / 2.0) - 2.0 t_2 = 2.0 / (b * b) tmp = 0 if b <= 7200.0: tmp = 0.5 + (a * (0.25 + ((a * a) * (-0.020833333333333332 + ((a * a) * 0.0020833333333333333))))) elif b <= 1.35e+31: tmp = -0.020833333333333332 * (a * (a * a)) elif b <= 1.6e+77: tmp = 1.0 / ((8.0 + ((t_0 * t_0) / 8.0)) / (4.0 + (t_1 / t_2))) elif b <= 1.35e+154: tmp = 1.0 / ((((b * b) * (0.25 * (b * b))) - 4.0) / t_1) else: tmp = t_2 return tmp
function code(a, b) t_0 = Float64(b * Float64(b * b)) t_1 = Float64(Float64(Float64(b * b) / 2.0) - 2.0) t_2 = Float64(2.0 / Float64(b * b)) tmp = 0.0 if (b <= 7200.0) tmp = Float64(0.5 + Float64(a * Float64(0.25 + Float64(Float64(a * a) * Float64(-0.020833333333333332 + Float64(Float64(a * a) * 0.0020833333333333333)))))); elseif (b <= 1.35e+31) tmp = Float64(-0.020833333333333332 * Float64(a * Float64(a * a))); elseif (b <= 1.6e+77) tmp = Float64(1.0 / Float64(Float64(8.0 + Float64(Float64(t_0 * t_0) / 8.0)) / Float64(4.0 + Float64(t_1 / t_2)))); elseif (b <= 1.35e+154) tmp = Float64(1.0 / Float64(Float64(Float64(Float64(b * b) * Float64(0.25 * Float64(b * b))) - 4.0) / t_1)); else tmp = t_2; end return tmp end
function tmp_2 = code(a, b) t_0 = b * (b * b); t_1 = ((b * b) / 2.0) - 2.0; t_2 = 2.0 / (b * b); tmp = 0.0; if (b <= 7200.0) tmp = 0.5 + (a * (0.25 + ((a * a) * (-0.020833333333333332 + ((a * a) * 0.0020833333333333333))))); elseif (b <= 1.35e+31) tmp = -0.020833333333333332 * (a * (a * a)); elseif (b <= 1.6e+77) tmp = 1.0 / ((8.0 + ((t_0 * t_0) / 8.0)) / (4.0 + (t_1 / t_2))); elseif (b <= 1.35e+154) tmp = 1.0 / ((((b * b) * (0.25 * (b * b))) - 4.0) / t_1); else tmp = t_2; end tmp_2 = tmp; end
code[a_, b_] := Block[{t$95$0 = N[(b * N[(b * b), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(N[(b * b), $MachinePrecision] / 2.0), $MachinePrecision] - 2.0), $MachinePrecision]}, Block[{t$95$2 = N[(2.0 / N[(b * b), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[b, 7200.0], N[(0.5 + N[(a * N[(0.25 + N[(N[(a * a), $MachinePrecision] * N[(-0.020833333333333332 + N[(N[(a * a), $MachinePrecision] * 0.0020833333333333333), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[b, 1.35e+31], N[(-0.020833333333333332 * N[(a * N[(a * a), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[b, 1.6e+77], N[(1.0 / N[(N[(8.0 + N[(N[(t$95$0 * t$95$0), $MachinePrecision] / 8.0), $MachinePrecision]), $MachinePrecision] / N[(4.0 + N[(t$95$1 / t$95$2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[b, 1.35e+154], N[(1.0 / N[(N[(N[(N[(b * b), $MachinePrecision] * N[(0.25 * N[(b * b), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - 4.0), $MachinePrecision] / t$95$1), $MachinePrecision]), $MachinePrecision], t$95$2]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := b \cdot \left(b \cdot b\right)\\
t_1 := \frac{b \cdot b}{2} - 2\\
t_2 := \frac{2}{b \cdot b}\\
\mathbf{if}\;b \leq 7200:\\
\;\;\;\;0.5 + a \cdot \left(0.25 + \left(a \cdot a\right) \cdot \left(-0.020833333333333332 + \left(a \cdot a\right) \cdot 0.0020833333333333333\right)\right)\\
\mathbf{elif}\;b \leq 1.35 \cdot 10^{+31}:\\
\;\;\;\;-0.020833333333333332 \cdot \left(a \cdot \left(a \cdot a\right)\right)\\
\mathbf{elif}\;b \leq 1.6 \cdot 10^{+77}:\\
\;\;\;\;\frac{1}{\frac{8 + \frac{t\_0 \cdot t\_0}{8}}{4 + \frac{t\_1}{t\_2}}}\\
\mathbf{elif}\;b \leq 1.35 \cdot 10^{+154}:\\
\;\;\;\;\frac{1}{\frac{\left(b \cdot b\right) \cdot \left(0.25 \cdot \left(b \cdot b\right)\right) - 4}{t\_1}}\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
\end{array}
if b < 7200Initial program 98.4%
Taylor expanded in b around 0
Simplified79.8%
Taylor expanded in a around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6452.6%
Simplified52.6%
if 7200 < b < 1.34999999999999993e31Initial program 100.0%
Taylor expanded in b around 0
Simplified22.5%
Taylor expanded in a around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-commutativeN/A
unpow2N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f642.9%
Simplified2.9%
Taylor expanded in a around inf
*-lowering-*.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6451.5%
Simplified51.5%
if 1.34999999999999993e31 < b < 1.6000000000000001e77Initial program 100.0%
Taylor expanded in a around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64100.0%
Simplified100.0%
Taylor expanded in b around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f644.2%
Simplified4.2%
Taylor expanded in b around inf
metadata-evalN/A
associate-*l/N/A
*-lft-identityN/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f644.2%
Simplified4.2%
flip3-+N/A
/-lowering-/.f64N/A
+-lowering-+.f64N/A
metadata-evalN/A
cube-divN/A
/-lowering-/.f64N/A
unpow-prod-downN/A
*-lowering-*.f64N/A
cube-multN/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
cube-multN/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
+-lowering-+.f64N/A
metadata-evalN/A
Applied egg-rr65.0%
if 1.6000000000000001e77 < b < 1.35000000000000003e154Initial program 100.0%
Taylor expanded in a around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64100.0%
Simplified100.0%
Taylor expanded in b around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f646.7%
Simplified6.7%
Taylor expanded in b around inf
metadata-evalN/A
associate-*l/N/A
*-lft-identityN/A
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f646.7%
Simplified6.7%
+-commutativeN/A
flip-+N/A
/-lowering-/.f64N/A
--lowering--.f64N/A
pow2N/A
div-invN/A
metadata-evalN/A
associate-*l*N/A
unpow-prod-downN/A
pow2N/A
pow2N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
*-commutativeN/A
swap-sqrN/A
metadata-evalN/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
metadata-evalN/A
--lowering--.f64N/A
Applied egg-rr100.0%
if 1.35000000000000003e154 < b Initial program 100.0%
Taylor expanded in a around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64100.0%
Simplified100.0%
Taylor expanded in b around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64100.0%
Simplified100.0%
Taylor expanded in b around inf
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64100.0%
Simplified100.0%
(FPCore (a b)
:precision binary64
(if (<= b 7200.0)
(+
0.5
(*
a
(+
0.25
(*
(* a a)
(+ -0.020833333333333332 (* (* a a) 0.0020833333333333333))))))
(if (<= b 1.28e+98)
(* -0.020833333333333332 (* a (* a a)))
(/ 1.0 (+ 2.0 (* b (+ 1.0 (* b (+ 0.5 (* b 0.16666666666666666))))))))))
double code(double a, double b) {
double tmp;
if (b <= 7200.0) {
tmp = 0.5 + (a * (0.25 + ((a * a) * (-0.020833333333333332 + ((a * a) * 0.0020833333333333333)))));
} else if (b <= 1.28e+98) {
tmp = -0.020833333333333332 * (a * (a * a));
} else {
tmp = 1.0 / (2.0 + (b * (1.0 + (b * (0.5 + (b * 0.16666666666666666))))));
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (b <= 7200.0d0) then
tmp = 0.5d0 + (a * (0.25d0 + ((a * a) * ((-0.020833333333333332d0) + ((a * a) * 0.0020833333333333333d0)))))
else if (b <= 1.28d+98) then
tmp = (-0.020833333333333332d0) * (a * (a * a))
else
tmp = 1.0d0 / (2.0d0 + (b * (1.0d0 + (b * (0.5d0 + (b * 0.16666666666666666d0))))))
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (b <= 7200.0) {
tmp = 0.5 + (a * (0.25 + ((a * a) * (-0.020833333333333332 + ((a * a) * 0.0020833333333333333)))));
} else if (b <= 1.28e+98) {
tmp = -0.020833333333333332 * (a * (a * a));
} else {
tmp = 1.0 / (2.0 + (b * (1.0 + (b * (0.5 + (b * 0.16666666666666666))))));
}
return tmp;
}
def code(a, b): tmp = 0 if b <= 7200.0: tmp = 0.5 + (a * (0.25 + ((a * a) * (-0.020833333333333332 + ((a * a) * 0.0020833333333333333))))) elif b <= 1.28e+98: tmp = -0.020833333333333332 * (a * (a * a)) else: tmp = 1.0 / (2.0 + (b * (1.0 + (b * (0.5 + (b * 0.16666666666666666)))))) return tmp
function code(a, b) tmp = 0.0 if (b <= 7200.0) tmp = Float64(0.5 + Float64(a * Float64(0.25 + Float64(Float64(a * a) * Float64(-0.020833333333333332 + Float64(Float64(a * a) * 0.0020833333333333333)))))); elseif (b <= 1.28e+98) tmp = Float64(-0.020833333333333332 * Float64(a * Float64(a * a))); else tmp = Float64(1.0 / Float64(2.0 + Float64(b * Float64(1.0 + Float64(b * Float64(0.5 + Float64(b * 0.16666666666666666))))))); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (b <= 7200.0) tmp = 0.5 + (a * (0.25 + ((a * a) * (-0.020833333333333332 + ((a * a) * 0.0020833333333333333))))); elseif (b <= 1.28e+98) tmp = -0.020833333333333332 * (a * (a * a)); else tmp = 1.0 / (2.0 + (b * (1.0 + (b * (0.5 + (b * 0.16666666666666666)))))); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[b, 7200.0], N[(0.5 + N[(a * N[(0.25 + N[(N[(a * a), $MachinePrecision] * N[(-0.020833333333333332 + N[(N[(a * a), $MachinePrecision] * 0.0020833333333333333), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[b, 1.28e+98], N[(-0.020833333333333332 * N[(a * N[(a * a), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(1.0 / N[(2.0 + N[(b * N[(1.0 + N[(b * N[(0.5 + N[(b * 0.16666666666666666), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;b \leq 7200:\\
\;\;\;\;0.5 + a \cdot \left(0.25 + \left(a \cdot a\right) \cdot \left(-0.020833333333333332 + \left(a \cdot a\right) \cdot 0.0020833333333333333\right)\right)\\
\mathbf{elif}\;b \leq 1.28 \cdot 10^{+98}:\\
\;\;\;\;-0.020833333333333332 \cdot \left(a \cdot \left(a \cdot a\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2 + b \cdot \left(1 + b \cdot \left(0.5 + b \cdot 0.16666666666666666\right)\right)}\\
\end{array}
\end{array}
if b < 7200Initial program 98.4%
Taylor expanded in b around 0
Simplified79.8%
Taylor expanded in a around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6452.6%
Simplified52.6%
if 7200 < b < 1.28000000000000006e98Initial program 100.0%
Taylor expanded in b around 0
Simplified35.4%
Taylor expanded in a around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-commutativeN/A
unpow2N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f642.6%
Simplified2.6%
Taylor expanded in a around inf
*-lowering-*.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6435.4%
Simplified35.4%
if 1.28000000000000006e98 < b Initial program 100.0%
Taylor expanded in a around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64100.0%
Simplified100.0%
Taylor expanded in b around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6496.1%
Simplified96.1%
(FPCore (a b)
:precision binary64
(if (<= b 7200.0)
(+ 0.5 (* a (+ 0.25 (* a (* a -0.020833333333333332)))))
(if (<= b 1.28e+98)
(* -0.020833333333333332 (* a (* a a)))
(/ 1.0 (+ 2.0 (* b (+ 1.0 (* b (+ 0.5 (* b 0.16666666666666666))))))))))
double code(double a, double b) {
double tmp;
if (b <= 7200.0) {
tmp = 0.5 + (a * (0.25 + (a * (a * -0.020833333333333332))));
} else if (b <= 1.28e+98) {
tmp = -0.020833333333333332 * (a * (a * a));
} else {
tmp = 1.0 / (2.0 + (b * (1.0 + (b * (0.5 + (b * 0.16666666666666666))))));
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (b <= 7200.0d0) then
tmp = 0.5d0 + (a * (0.25d0 + (a * (a * (-0.020833333333333332d0)))))
else if (b <= 1.28d+98) then
tmp = (-0.020833333333333332d0) * (a * (a * a))
else
tmp = 1.0d0 / (2.0d0 + (b * (1.0d0 + (b * (0.5d0 + (b * 0.16666666666666666d0))))))
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (b <= 7200.0) {
tmp = 0.5 + (a * (0.25 + (a * (a * -0.020833333333333332))));
} else if (b <= 1.28e+98) {
tmp = -0.020833333333333332 * (a * (a * a));
} else {
tmp = 1.0 / (2.0 + (b * (1.0 + (b * (0.5 + (b * 0.16666666666666666))))));
}
return tmp;
}
def code(a, b): tmp = 0 if b <= 7200.0: tmp = 0.5 + (a * (0.25 + (a * (a * -0.020833333333333332)))) elif b <= 1.28e+98: tmp = -0.020833333333333332 * (a * (a * a)) else: tmp = 1.0 / (2.0 + (b * (1.0 + (b * (0.5 + (b * 0.16666666666666666)))))) return tmp
function code(a, b) tmp = 0.0 if (b <= 7200.0) tmp = Float64(0.5 + Float64(a * Float64(0.25 + Float64(a * Float64(a * -0.020833333333333332))))); elseif (b <= 1.28e+98) tmp = Float64(-0.020833333333333332 * Float64(a * Float64(a * a))); else tmp = Float64(1.0 / Float64(2.0 + Float64(b * Float64(1.0 + Float64(b * Float64(0.5 + Float64(b * 0.16666666666666666))))))); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (b <= 7200.0) tmp = 0.5 + (a * (0.25 + (a * (a * -0.020833333333333332)))); elseif (b <= 1.28e+98) tmp = -0.020833333333333332 * (a * (a * a)); else tmp = 1.0 / (2.0 + (b * (1.0 + (b * (0.5 + (b * 0.16666666666666666)))))); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[b, 7200.0], N[(0.5 + N[(a * N[(0.25 + N[(a * N[(a * -0.020833333333333332), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[b, 1.28e+98], N[(-0.020833333333333332 * N[(a * N[(a * a), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(1.0 / N[(2.0 + N[(b * N[(1.0 + N[(b * N[(0.5 + N[(b * 0.16666666666666666), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;b \leq 7200:\\
\;\;\;\;0.5 + a \cdot \left(0.25 + a \cdot \left(a \cdot -0.020833333333333332\right)\right)\\
\mathbf{elif}\;b \leq 1.28 \cdot 10^{+98}:\\
\;\;\;\;-0.020833333333333332 \cdot \left(a \cdot \left(a \cdot a\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{2 + b \cdot \left(1 + b \cdot \left(0.5 + b \cdot 0.16666666666666666\right)\right)}\\
\end{array}
\end{array}
if b < 7200Initial program 98.4%
Taylor expanded in b around 0
Simplified79.8%
Taylor expanded in a around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-commutativeN/A
unpow2N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f6452.5%
Simplified52.5%
if 7200 < b < 1.28000000000000006e98Initial program 100.0%
Taylor expanded in b around 0
Simplified35.4%
Taylor expanded in a around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-commutativeN/A
unpow2N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f642.6%
Simplified2.6%
Taylor expanded in a around inf
*-lowering-*.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6435.4%
Simplified35.4%
if 1.28000000000000006e98 < b Initial program 100.0%
Taylor expanded in a around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64100.0%
Simplified100.0%
Taylor expanded in b around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6496.1%
Simplified96.1%
(FPCore (a b)
:precision binary64
(if (<= b 7200.0)
(+ 0.5 (* a (+ 0.25 (* a (* a -0.020833333333333332)))))
(if (<= b 1.35e+154)
(* -0.020833333333333332 (* a (* a a)))
(/ 2.0 (* b b)))))
double code(double a, double b) {
double tmp;
if (b <= 7200.0) {
tmp = 0.5 + (a * (0.25 + (a * (a * -0.020833333333333332))));
} else if (b <= 1.35e+154) {
tmp = -0.020833333333333332 * (a * (a * a));
} else {
tmp = 2.0 / (b * b);
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (b <= 7200.0d0) then
tmp = 0.5d0 + (a * (0.25d0 + (a * (a * (-0.020833333333333332d0)))))
else if (b <= 1.35d+154) then
tmp = (-0.020833333333333332d0) * (a * (a * a))
else
tmp = 2.0d0 / (b * b)
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (b <= 7200.0) {
tmp = 0.5 + (a * (0.25 + (a * (a * -0.020833333333333332))));
} else if (b <= 1.35e+154) {
tmp = -0.020833333333333332 * (a * (a * a));
} else {
tmp = 2.0 / (b * b);
}
return tmp;
}
def code(a, b): tmp = 0 if b <= 7200.0: tmp = 0.5 + (a * (0.25 + (a * (a * -0.020833333333333332)))) elif b <= 1.35e+154: tmp = -0.020833333333333332 * (a * (a * a)) else: tmp = 2.0 / (b * b) return tmp
function code(a, b) tmp = 0.0 if (b <= 7200.0) tmp = Float64(0.5 + Float64(a * Float64(0.25 + Float64(a * Float64(a * -0.020833333333333332))))); elseif (b <= 1.35e+154) tmp = Float64(-0.020833333333333332 * Float64(a * Float64(a * a))); else tmp = Float64(2.0 / Float64(b * b)); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (b <= 7200.0) tmp = 0.5 + (a * (0.25 + (a * (a * -0.020833333333333332)))); elseif (b <= 1.35e+154) tmp = -0.020833333333333332 * (a * (a * a)); else tmp = 2.0 / (b * b); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[b, 7200.0], N[(0.5 + N[(a * N[(0.25 + N[(a * N[(a * -0.020833333333333332), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[b, 1.35e+154], N[(-0.020833333333333332 * N[(a * N[(a * a), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(2.0 / N[(b * b), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;b \leq 7200:\\
\;\;\;\;0.5 + a \cdot \left(0.25 + a \cdot \left(a \cdot -0.020833333333333332\right)\right)\\
\mathbf{elif}\;b \leq 1.35 \cdot 10^{+154}:\\
\;\;\;\;-0.020833333333333332 \cdot \left(a \cdot \left(a \cdot a\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{2}{b \cdot b}\\
\end{array}
\end{array}
if b < 7200Initial program 98.4%
Taylor expanded in b around 0
Simplified79.8%
Taylor expanded in a around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-commutativeN/A
unpow2N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f6452.5%
Simplified52.5%
if 7200 < b < 1.35000000000000003e154Initial program 100.0%
Taylor expanded in b around 0
Simplified39.8%
Taylor expanded in a around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-commutativeN/A
unpow2N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f642.6%
Simplified2.6%
Taylor expanded in a around inf
*-lowering-*.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6437.0%
Simplified37.0%
if 1.35000000000000003e154 < b Initial program 100.0%
Taylor expanded in a around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64100.0%
Simplified100.0%
Taylor expanded in b around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64100.0%
Simplified100.0%
Taylor expanded in b around inf
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64100.0%
Simplified100.0%
(FPCore (a b)
:precision binary64
(if (<= b 7200.0)
(+ 0.5 (* a 0.25))
(if (<= b 1.35e+154)
(* -0.020833333333333332 (* a (* a a)))
(/ 2.0 (* b b)))))
double code(double a, double b) {
double tmp;
if (b <= 7200.0) {
tmp = 0.5 + (a * 0.25);
} else if (b <= 1.35e+154) {
tmp = -0.020833333333333332 * (a * (a * a));
} else {
tmp = 2.0 / (b * b);
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (b <= 7200.0d0) then
tmp = 0.5d0 + (a * 0.25d0)
else if (b <= 1.35d+154) then
tmp = (-0.020833333333333332d0) * (a * (a * a))
else
tmp = 2.0d0 / (b * b)
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (b <= 7200.0) {
tmp = 0.5 + (a * 0.25);
} else if (b <= 1.35e+154) {
tmp = -0.020833333333333332 * (a * (a * a));
} else {
tmp = 2.0 / (b * b);
}
return tmp;
}
def code(a, b): tmp = 0 if b <= 7200.0: tmp = 0.5 + (a * 0.25) elif b <= 1.35e+154: tmp = -0.020833333333333332 * (a * (a * a)) else: tmp = 2.0 / (b * b) return tmp
function code(a, b) tmp = 0.0 if (b <= 7200.0) tmp = Float64(0.5 + Float64(a * 0.25)); elseif (b <= 1.35e+154) tmp = Float64(-0.020833333333333332 * Float64(a * Float64(a * a))); else tmp = Float64(2.0 / Float64(b * b)); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (b <= 7200.0) tmp = 0.5 + (a * 0.25); elseif (b <= 1.35e+154) tmp = -0.020833333333333332 * (a * (a * a)); else tmp = 2.0 / (b * b); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[b, 7200.0], N[(0.5 + N[(a * 0.25), $MachinePrecision]), $MachinePrecision], If[LessEqual[b, 1.35e+154], N[(-0.020833333333333332 * N[(a * N[(a * a), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(2.0 / N[(b * b), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;b \leq 7200:\\
\;\;\;\;0.5 + a \cdot 0.25\\
\mathbf{elif}\;b \leq 1.35 \cdot 10^{+154}:\\
\;\;\;\;-0.020833333333333332 \cdot \left(a \cdot \left(a \cdot a\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{2}{b \cdot b}\\
\end{array}
\end{array}
if b < 7200Initial program 98.4%
Taylor expanded in a around 0
+-commutativeN/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
*-lowering-*.f64N/A
sub-negN/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
distribute-neg-fracN/A
metadata-evalN/A
/-lowering-/.f64N/A
pow-lowering-pow.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f6473.1%
Simplified73.1%
Taylor expanded in b around 0
+-lowering-+.f64N/A
*-lowering-*.f6452.4%
Simplified52.4%
if 7200 < b < 1.35000000000000003e154Initial program 100.0%
Taylor expanded in b around 0
Simplified39.8%
Taylor expanded in a around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-commutativeN/A
unpow2N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f642.6%
Simplified2.6%
Taylor expanded in a around inf
*-lowering-*.f64N/A
cube-multN/A
unpow2N/A
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6437.0%
Simplified37.0%
if 1.35000000000000003e154 < b Initial program 100.0%
Taylor expanded in a around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64100.0%
Simplified100.0%
Taylor expanded in b around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64100.0%
Simplified100.0%
Taylor expanded in b around inf
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f64100.0%
Simplified100.0%
Final simplification56.3%
(FPCore (a b) :precision binary64 (if (<= b 1.6) (+ 0.5 (* a 0.25)) (/ 2.0 (* b b))))
double code(double a, double b) {
double tmp;
if (b <= 1.6) {
tmp = 0.5 + (a * 0.25);
} else {
tmp = 2.0 / (b * b);
}
return tmp;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
real(8) :: tmp
if (b <= 1.6d0) then
tmp = 0.5d0 + (a * 0.25d0)
else
tmp = 2.0d0 / (b * b)
end if
code = tmp
end function
public static double code(double a, double b) {
double tmp;
if (b <= 1.6) {
tmp = 0.5 + (a * 0.25);
} else {
tmp = 2.0 / (b * b);
}
return tmp;
}
def code(a, b): tmp = 0 if b <= 1.6: tmp = 0.5 + (a * 0.25) else: tmp = 2.0 / (b * b) return tmp
function code(a, b) tmp = 0.0 if (b <= 1.6) tmp = Float64(0.5 + Float64(a * 0.25)); else tmp = Float64(2.0 / Float64(b * b)); end return tmp end
function tmp_2 = code(a, b) tmp = 0.0; if (b <= 1.6) tmp = 0.5 + (a * 0.25); else tmp = 2.0 / (b * b); end tmp_2 = tmp; end
code[a_, b_] := If[LessEqual[b, 1.6], N[(0.5 + N[(a * 0.25), $MachinePrecision]), $MachinePrecision], N[(2.0 / N[(b * b), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;b \leq 1.6:\\
\;\;\;\;0.5 + a \cdot 0.25\\
\mathbf{else}:\\
\;\;\;\;\frac{2}{b \cdot b}\\
\end{array}
\end{array}
if b < 1.6000000000000001Initial program 98.3%
Taylor expanded in a around 0
+-commutativeN/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
*-lowering-*.f64N/A
sub-negN/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
distribute-neg-fracN/A
metadata-evalN/A
/-lowering-/.f64N/A
pow-lowering-pow.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f6473.2%
Simplified73.2%
Taylor expanded in b around 0
+-lowering-+.f64N/A
*-lowering-*.f6453.2%
Simplified53.2%
if 1.6000000000000001 < b Initial program 100.0%
Taylor expanded in a around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f6498.7%
Simplified98.7%
Taylor expanded in b around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f6447.9%
Simplified47.9%
Taylor expanded in b around inf
/-lowering-/.f64N/A
unpow2N/A
*-lowering-*.f6447.9%
Simplified47.9%
Final simplification51.7%
(FPCore (a b) :precision binary64 (+ 0.5 (* a 0.25)))
double code(double a, double b) {
return 0.5 + (a * 0.25);
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
code = 0.5d0 + (a * 0.25d0)
end function
public static double code(double a, double b) {
return 0.5 + (a * 0.25);
}
def code(a, b): return 0.5 + (a * 0.25)
function code(a, b) return Float64(0.5 + Float64(a * 0.25)) end
function tmp = code(a, b) tmp = 0.5 + (a * 0.25); end
code[a_, b_] := N[(0.5 + N[(a * 0.25), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
0.5 + a \cdot 0.25
\end{array}
Initial program 98.8%
Taylor expanded in a around 0
+-commutativeN/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
*-lowering-*.f64N/A
sub-negN/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f64N/A
distribute-neg-fracN/A
metadata-evalN/A
/-lowering-/.f64N/A
pow-lowering-pow.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f6480.4%
Simplified80.4%
Taylor expanded in b around 0
+-lowering-+.f64N/A
*-lowering-*.f6438.9%
Simplified38.9%
Final simplification38.9%
(FPCore (a b) :precision binary64 0.5)
double code(double a, double b) {
return 0.5;
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
code = 0.5d0
end function
public static double code(double a, double b) {
return 0.5;
}
def code(a, b): return 0.5
function code(a, b) return 0.5 end
function tmp = code(a, b) tmp = 0.5; end
code[a_, b_] := 0.5
\begin{array}{l}
\\
0.5
\end{array}
Initial program 98.8%
Taylor expanded in a around 0
/-lowering-/.f64N/A
+-lowering-+.f64N/A
exp-lowering-exp.f6480.0%
Simplified80.0%
Taylor expanded in b around 0
Simplified38.6%
(FPCore (a b) :precision binary64 (/ 1.0 (+ 1.0 (exp (- b a)))))
double code(double a, double b) {
return 1.0 / (1.0 + exp((b - a)));
}
real(8) function code(a, b)
real(8), intent (in) :: a
real(8), intent (in) :: b
code = 1.0d0 / (1.0d0 + exp((b - a)))
end function
public static double code(double a, double b) {
return 1.0 / (1.0 + Math.exp((b - a)));
}
def code(a, b): return 1.0 / (1.0 + math.exp((b - a)))
function code(a, b) return Float64(1.0 / Float64(1.0 + exp(Float64(b - a)))) end
function tmp = code(a, b) tmp = 1.0 / (1.0 + exp((b - a))); end
code[a_, b_] := N[(1.0 / N[(1.0 + N[Exp[N[(b - a), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{1}{1 + e^{b - a}}
\end{array}
herbie shell --seed 2024158
(FPCore (a b)
:name "Quotient of sum of exps"
:precision binary64
:alt
(! :herbie-platform default (/ 1 (+ 1 (exp (- b a)))))
(/ (exp a) (+ (exp a) (exp b))))