(FPCore (x y z t a b)
:precision binary64
(* x (exp (+ (* y (- (log z) t)) (* a (- (log (- 1.0 z)) b))))))
↓
(FPCore (x y z t a b)
:precision binary64
(if (<= y -2e-133)
(* x (exp (* y (- t))))
(if (<= y 0.094)
(* x (cbrt (pow (pow (cbrt (exp (* b (- a)))) 3.0) 3.0)))
(* x (pow z y)))))
double code(double x, double y, double z, double t, double a, double b) {
return x * exp(((y * (log(z) - t)) + (a * (log((1.0 - z)) - b))));
}
↓
double code(double x, double y, double z, double t, double a, double b) {
double tmp;
if (y <= -2e-133) {
tmp = x * exp((y * -t));
} else if (y <= 0.094) {
tmp = x * cbrt(pow(pow(cbrt(exp((b * -a))), 3.0), 3.0));
} else {
tmp = x * pow(z, y);
}
return tmp;
}
public static double code(double x, double y, double z, double t, double a, double b) {
return x * Math.exp(((y * (Math.log(z) - t)) + (a * (Math.log((1.0 - z)) - b))));
}
↓
public static double code(double x, double y, double z, double t, double a, double b) {
double tmp;
if (y <= -2e-133) {
tmp = x * Math.exp((y * -t));
} else if (y <= 0.094) {
tmp = x * Math.cbrt(Math.pow(Math.pow(Math.cbrt(Math.exp((b * -a))), 3.0), 3.0));
} else {
tmp = x * Math.pow(z, y);
}
return tmp;
}
function code(x, y, z, t, a, b)
return Float64(x * exp(Float64(Float64(y * Float64(log(z) - t)) + Float64(a * Float64(log(Float64(1.0 - z)) - b)))))
end
↓
function code(x, y, z, t, a, b)
tmp = 0.0
if (y <= -2e-133)
tmp = Float64(x * exp(Float64(y * Float64(-t))));
elseif (y <= 0.094)
tmp = Float64(x * cbrt(((cbrt(exp(Float64(b * Float64(-a)))) ^ 3.0) ^ 3.0)));
else
tmp = Float64(x * (z ^ y));
end
return tmp
end
\[x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}
\]
Taylor expanded in t around inf 19.2
\[\leadsto x \cdot e^{\color{blue}{-1 \cdot \left(y \cdot t\right)}}
\]
Simplified19.2
\[\leadsto x \cdot e^{\color{blue}{t \cdot \left(-y\right)}}
\]
if -2.0000000000000001e-133 < y < 0.094
Initial program 2.4
\[x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}
\]
Simplified0.1
\[\leadsto \color{blue}{x \cdot e^{\mathsf{fma}\left(a, \mathsf{log1p}\left(-z\right) - b, y \cdot \left(\log z - t\right)\right)}}
\]
Applied egg-rr3.9
\[\leadsto x \cdot \color{blue}{\sqrt[3]{{\left(e^{\mathsf{fma}\left(y, \log z - t, a \cdot \left(\mathsf{log1p}\left(z\right) - b\right)\right)}\right)}^{3}}}
\]
Applied egg-rr3.9
\[\leadsto x \cdot \sqrt[3]{{\color{blue}{\left({\left(\sqrt[3]{e^{\mathsf{fma}\left(y, \log z - t, a \cdot \left(\mathsf{log1p}\left(z\right) - b\right)\right)}}\right)}^{3}\right)}}^{3}}
\]
Taylor expanded in b around inf 8.7
\[\leadsto x \cdot \sqrt[3]{{\left({\left(\sqrt[3]{e^{\color{blue}{-1 \cdot \left(a \cdot b\right)}}}\right)}^{3}\right)}^{3}}
\]
Simplified8.7
\[\leadsto x \cdot \sqrt[3]{{\left({\left(\sqrt[3]{e^{\color{blue}{b \cdot \left(-a\right)}}}\right)}^{3}\right)}^{3}}
\]
if 0.094 < y
Initial program 1.0
\[x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}
\]
Simplified0.2
\[\leadsto \color{blue}{x \cdot e^{\mathsf{fma}\left(a, \mathsf{log1p}\left(-z\right) - b, y \cdot \left(\log z - t\right)\right)}}
\]
Taylor expanded in a around 0 1.9
\[\leadsto \color{blue}{x \cdot e^{y \cdot \left(\log z - t\right)}}
\]
herbie shell --seed 2022228
(FPCore (x y z t a b)
:name "Numeric.SpecFunctions:incompleteBetaApprox from math-functions-0.1.5.2, B"
:precision binary64
(* x (exp (+ (* y (- (log z) t)) (* a (- (log (- 1.0 z)) b))))))