x \cdot \log \left(\frac{x}{y}\right) - z\begin{array}{l}
\mathbf{if}\;y \le -4.974644044754423077113473181446697397685 \cdot 10^{-309}:\\
\;\;\;\;x \cdot \left(\log \left(\frac{-1}{y}\right) - \log \left(\frac{-1}{x}\right)\right) - z\\
\mathbf{elif}\;y \le 3.026653167445680484753712447534489416041 \cdot 10^{-81}:\\
\;\;\;\;\left(\log x \cdot x + \log y \cdot \left(-x\right)\right) - z\\
\mathbf{else}:\\
\;\;\;\;\left(x \cdot \left(\log \left(\frac{\sqrt[3]{\sqrt[3]{x}}}{y}\right) + \log \left(\sqrt[3]{\sqrt[3]{x} \cdot \sqrt[3]{x}}\right)\right) - z\right) + x \cdot \log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right)\\
\end{array}double f(double x, double y, double z) {
double r23070155 = x;
double r23070156 = y;
double r23070157 = r23070155 / r23070156;
double r23070158 = log(r23070157);
double r23070159 = r23070155 * r23070158;
double r23070160 = z;
double r23070161 = r23070159 - r23070160;
return r23070161;
}
double f(double x, double y, double z) {
double r23070162 = y;
double r23070163 = -4.974644044754423e-309;
bool r23070164 = r23070162 <= r23070163;
double r23070165 = x;
double r23070166 = -1.0;
double r23070167 = r23070166 / r23070162;
double r23070168 = log(r23070167);
double r23070169 = r23070166 / r23070165;
double r23070170 = log(r23070169);
double r23070171 = r23070168 - r23070170;
double r23070172 = r23070165 * r23070171;
double r23070173 = z;
double r23070174 = r23070172 - r23070173;
double r23070175 = 3.0266531674456805e-81;
bool r23070176 = r23070162 <= r23070175;
double r23070177 = log(r23070165);
double r23070178 = r23070177 * r23070165;
double r23070179 = log(r23070162);
double r23070180 = -r23070165;
double r23070181 = r23070179 * r23070180;
double r23070182 = r23070178 + r23070181;
double r23070183 = r23070182 - r23070173;
double r23070184 = cbrt(r23070165);
double r23070185 = cbrt(r23070184);
double r23070186 = r23070185 / r23070162;
double r23070187 = log(r23070186);
double r23070188 = r23070184 * r23070184;
double r23070189 = cbrt(r23070188);
double r23070190 = log(r23070189);
double r23070191 = r23070187 + r23070190;
double r23070192 = r23070165 * r23070191;
double r23070193 = r23070192 - r23070173;
double r23070194 = log(r23070188);
double r23070195 = r23070165 * r23070194;
double r23070196 = r23070193 + r23070195;
double r23070197 = r23070176 ? r23070183 : r23070196;
double r23070198 = r23070164 ? r23070174 : r23070197;
return r23070198;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 15.3 |
|---|---|
| Target | 7.8 |
| Herbie | 0.5 |
if y < -4.974644044754423e-309Initial program 15.0
Taylor expanded around -inf 0.3
if -4.974644044754423e-309 < y < 3.0266531674456805e-81Initial program 20.1
rmApplied div-inv20.1
Applied log-prod0.3
Applied distribute-rgt-in0.3
Simplified0.3
if 3.0266531674456805e-81 < y Initial program 12.9
rmApplied *-un-lft-identity12.9
Applied add-cube-cbrt12.9
Applied times-frac12.9
Applied log-prod3.1
Applied distribute-lft-in3.1
Applied associate--l+3.1
rmApplied *-un-lft-identity3.1
Applied add-cube-cbrt3.1
Applied cbrt-prod3.1
Applied times-frac3.1
Applied log-prod1.1
Simplified1.1
Final simplification0.5
herbie shell --seed 2019172
(FPCore (x y z)
:name "Numeric.SpecFunctions.Extra:bd0 from math-functions-0.1.5.2"
:herbie-target
(if (< y 7.595077799083773e-308) (- (* x (log (/ x y))) z) (- (* x (- (log x) (log y))) z))
(- (* x (log (/ x y))) z))