x + \frac{y \cdot \left(z - t\right)}{a - t}\begin{array}{l}
\mathbf{if}\;t \le -1.0071455594193599 \cdot 10^{-271} \lor \neg \left(t \le 8.49657610056407139 \cdot 10^{-71}\right):\\
\;\;\;\;y \cdot \left(\frac{z}{a - t} - \mathsf{log1p}\left(\mathsf{expm1}\left(\frac{t}{a - t}\right)\right)\right) + x\\
\mathbf{else}:\\
\;\;\;\;\frac{y \cdot \left(z - t\right)}{a - t} + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r541858 = x;
double r541859 = y;
double r541860 = z;
double r541861 = t;
double r541862 = r541860 - r541861;
double r541863 = r541859 * r541862;
double r541864 = a;
double r541865 = r541864 - r541861;
double r541866 = r541863 / r541865;
double r541867 = r541858 + r541866;
return r541867;
}
double f(double x, double y, double z, double t, double a) {
double r541868 = t;
double r541869 = -1.0071455594193599e-271;
bool r541870 = r541868 <= r541869;
double r541871 = 8.496576100564071e-71;
bool r541872 = r541868 <= r541871;
double r541873 = !r541872;
bool r541874 = r541870 || r541873;
double r541875 = y;
double r541876 = z;
double r541877 = a;
double r541878 = r541877 - r541868;
double r541879 = r541876 / r541878;
double r541880 = r541868 / r541878;
double r541881 = expm1(r541880);
double r541882 = log1p(r541881);
double r541883 = r541879 - r541882;
double r541884 = r541875 * r541883;
double r541885 = x;
double r541886 = r541884 + r541885;
double r541887 = r541876 - r541868;
double r541888 = r541875 * r541887;
double r541889 = r541888 / r541878;
double r541890 = r541889 + r541885;
double r541891 = r541874 ? r541886 : r541890;
return r541891;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.9 |
|---|---|
| Target | 1.3 |
| Herbie | 1.5 |
if t < -1.0071455594193599e-271 or 8.496576100564071e-71 < t Initial program 12.7
Simplified2.9
rmApplied fma-udef2.9
rmApplied div-inv2.9
Applied associate-*l*0.9
Simplified0.9
rmApplied div-sub0.8
rmApplied log1p-expm1-u0.9
if -1.0071455594193599e-271 < t < 8.496576100564071e-71Initial program 3.8
Simplified3.5
rmApplied fma-udef3.5
rmApplied associate-*l/3.8
Final simplification1.5
herbie shell --seed 2020056 +o rules:numerics
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTicks from plot-0.2.3.4, B"
:precision binary64
:herbie-target
(+ x (/ y (/ (- a t) (- z t))))
(+ x (/ (* y (- z t)) (- a t))))