\begin{array}{l}
\mathbf{if}\;\left(\left|y - \sqrt{y \cdot y + 1}\right| - \frac{1}{y + \sqrt{y \cdot y + 1}}\right) \cdot \left(\left|y - \sqrt{y \cdot y + 1}\right| - \frac{1}{y + \sqrt{y \cdot y + 1}}\right) + {\left({10}^{-300}\right)}^{\left(10^{4} \cdot \left(y + 1\right)\right)} = 0.0:\\
\;\;\;\;1\\
\mathbf{else}:\\
\;\;\;\;\frac{e^{\left(\left|y - \sqrt{y \cdot y + 1}\right| - \frac{1}{y + \sqrt{y \cdot y + 1}}\right) \cdot \left(\left|y - \sqrt{y \cdot y + 1}\right| - \frac{1}{y + \sqrt{y \cdot y + 1}}\right) + {\left({10}^{-300}\right)}^{\left(10^{4} \cdot \left(y + 1\right)\right)}} - 1}{\left(\left|y - \sqrt{y \cdot y + 1}\right| - \frac{1}{y + \sqrt{y \cdot y + 1}}\right) \cdot \left(\left|y - \sqrt{y \cdot y + 1}\right| - \frac{1}{y + \sqrt{y \cdot y + 1}}\right) + {\left({10}^{-300}\right)}^{\left(10^{4} \cdot \left(y + 1\right)\right)}}\\
\end{array}\begin{array}{l}
\mathbf{if}\;\left(\left|y - \sqrt{y \cdot y + 1}\right| - \frac{1}{y + \sqrt{y \cdot y + 1}}\right) \cdot \log \left(e^{\sqrt[3]{{\left(\left|y - \sqrt{y \cdot y + 1}\right| - \frac{1}{y + \sqrt{y \cdot y + 1}}\right)}^{3}}}\right) + {\left({10}^{-300}\right)}^{\left(10^{4} \cdot \left(y + 1\right)\right)} = 0.0:\\
\;\;\;\;1\\
\mathbf{else}:\\
\;\;\;\;\frac{e^{\left(0.5 \cdot \frac{1}{y} + \left(2 \cdot y + \left|y - \sqrt{{y}^{2} + 1}\right|\right)\right) \cdot \left(\left|y - \sqrt{y \cdot y + 1}\right| - \frac{1}{y + \sqrt{y \cdot y + 1}}\right) + {\left({10}^{-300}\right)}^{\left(10^{4} \cdot \left(y + 1\right)\right)}} - 1}{\left(0.5 \cdot \frac{1}{y} + \left(2 \cdot y + \left|y - \sqrt{{y}^{2} + 1}\right|\right)\right) \cdot \left(\left|y - \sqrt{y \cdot y + 1}\right| - \frac{1}{y + \sqrt{y \cdot y + 1}}\right) + {\left({10}^{-300}\right)}^{\left(10^{4} \cdot \left(y + 1\right)\right)}}\\
\end{array}double f(double y) {
double r101151 = y;
double r101152 = r101151 * r101151;
double r101153 = 1.0;
double r101154 = r101152 + r101153;
double r101155 = sqrt(r101154);
double r101156 = r101151 - r101155;
double r101157 = fabs(r101156);
double r101158 = r101151 + r101155;
double r101159 = r101153 / r101158;
double r101160 = r101157 - r101159;
double r101161 = r101160 * r101160;
double r101162 = 10.0;
double r101163 = -300.0;
double r101164 = pow(r101162, r101163);
double r101165 = 10000.0;
double r101166 = r101151 + r101153;
double r101167 = r101165 * r101166;
double r101168 = pow(r101164, r101167);
double r101169 = r101161 + r101168;
double r101170 = 0.0;
double r101171 = r101169 == r101170;
double r101172 = exp(r101169);
double r101173 = r101172 - r101153;
double r101174 = r101173 / r101169;
double r101175 = r101171 ? r101153 : r101174;
return r101175;
}
double f(double y) {
double r101176 = y;
double r101177 = r101176 * r101176;
double r101178 = 1.0;
double r101179 = r101177 + r101178;
double r101180 = sqrt(r101179);
double r101181 = r101176 - r101180;
double r101182 = fabs(r101181);
double r101183 = r101176 + r101180;
double r101184 = r101178 / r101183;
double r101185 = r101182 - r101184;
double r101186 = 3.0;
double r101187 = pow(r101185, r101186);
double r101188 = cbrt(r101187);
double r101189 = exp(r101188);
double r101190 = log(r101189);
double r101191 = r101185 * r101190;
double r101192 = 10.0;
double r101193 = -300.0;
double r101194 = pow(r101192, r101193);
double r101195 = 10000.0;
double r101196 = r101176 + r101178;
double r101197 = r101195 * r101196;
double r101198 = pow(r101194, r101197);
double r101199 = r101191 + r101198;
double r101200 = 0.0;
double r101201 = r101199 == r101200;
double r101202 = 0.5;
double r101203 = 1.0;
double r101204 = r101203 / r101176;
double r101205 = r101202 * r101204;
double r101206 = 2.0;
double r101207 = r101206 * r101176;
double r101208 = 2.0;
double r101209 = pow(r101176, r101208);
double r101210 = r101209 + r101178;
double r101211 = sqrt(r101210);
double r101212 = r101176 - r101211;
double r101213 = fabs(r101212);
double r101214 = r101207 + r101213;
double r101215 = r101205 + r101214;
double r101216 = r101215 * r101185;
double r101217 = r101216 + r101198;
double r101218 = exp(r101217);
double r101219 = r101218 - r101178;
double r101220 = r101219 / r101217;
double r101221 = r101201 ? r101178 : r101220;
return r101221;
}



Bits error versus y
Results
Initial program 60.8
Taylor expanded around -inf 59.2
Taylor expanded around -inf 37.0
rmApplied add-log-exp36.3
Applied add-log-exp33.1
Applied diff-log33.1
Simplified33.4
rmApplied add-cbrt-cube32.6
Simplified32.6
Final simplification32.6
herbie shell --seed 2020033
(FPCore (y)
:name "Kahan's Unum-Targeted Monster"
:precision binary64
:pre (<= 1 y 9999)
(if (== (+ (* (- (fabs (- y (sqrt (+ (* y y) 1)))) (/ 1 (+ y (sqrt (+ (* y y) 1))))) (- (fabs (- y (sqrt (+ (* y y) 1)))) (/ 1 (+ y (sqrt (+ (* y y) 1)))))) (pow (pow 10 -300) (* 10000.0 (+ y 1)))) 0.0) 1 (/ (- (exp (+ (* (- (fabs (- y (sqrt (+ (* y y) 1)))) (/ 1 (+ y (sqrt (+ (* y y) 1))))) (- (fabs (- y (sqrt (+ (* y y) 1)))) (/ 1 (+ y (sqrt (+ (* y y) 1)))))) (pow (pow 10 -300) (* 10000.0 (+ y 1))))) 1) (+ (* (- (fabs (- y (sqrt (+ (* y y) 1)))) (/ 1 (+ y (sqrt (+ (* y y) 1))))) (- (fabs (- y (sqrt (+ (* y y) 1)))) (/ 1 (+ y (sqrt (+ (* y y) 1)))))) (pow (pow 10 -300) (* 10000.0 (+ y 1)))))))