\left(0.5 \cdot \cos re\right) \cdot \left(e^{0 - im} - e^{im}\right)\begin{array}{l}
\mathbf{if}\;\left(0.5 \cdot \cos re\right) \cdot \left(e^{-im} - e^{im}\right) \le 1.6380449607278358 \cdot 10^{-06}:\\
\;\;\;\;\left(\cos re \cdot \left(-2 \cdot 0.5\right)\right) \cdot im - \cos re \cdot (\left({im}^{5}\right) \cdot 0.008333333333333333 + \left(\left(im \cdot 0.16666666666666666\right) \cdot \left(im \cdot im\right)\right))_*\\
\mathbf{else}:\\
\;\;\;\;\left(\left(0.5 \cdot \cos re\right) \cdot \left(\sqrt{e^{-im}} + \sqrt{e^{im}}\right)\right) \cdot \left(\sqrt{e^{-im}} - \sqrt{e^{im}}\right)\\
\end{array}double f(double re, double im) {
double r35231326 = 0.5;
double r35231327 = re;
double r35231328 = cos(r35231327);
double r35231329 = r35231326 * r35231328;
double r35231330 = 0.0;
double r35231331 = im;
double r35231332 = r35231330 - r35231331;
double r35231333 = exp(r35231332);
double r35231334 = exp(r35231331);
double r35231335 = r35231333 - r35231334;
double r35231336 = r35231329 * r35231335;
return r35231336;
}
double f(double re, double im) {
double r35231337 = 0.5;
double r35231338 = re;
double r35231339 = cos(r35231338);
double r35231340 = r35231337 * r35231339;
double r35231341 = im;
double r35231342 = -r35231341;
double r35231343 = exp(r35231342);
double r35231344 = exp(r35231341);
double r35231345 = r35231343 - r35231344;
double r35231346 = r35231340 * r35231345;
double r35231347 = 1.6380449607278358e-06;
bool r35231348 = r35231346 <= r35231347;
double r35231349 = -2.0;
double r35231350 = r35231349 * r35231337;
double r35231351 = r35231339 * r35231350;
double r35231352 = r35231351 * r35231341;
double r35231353 = 5.0;
double r35231354 = pow(r35231341, r35231353);
double r35231355 = 0.008333333333333333;
double r35231356 = 0.16666666666666666;
double r35231357 = r35231341 * r35231356;
double r35231358 = r35231341 * r35231341;
double r35231359 = r35231357 * r35231358;
double r35231360 = fma(r35231354, r35231355, r35231359);
double r35231361 = r35231339 * r35231360;
double r35231362 = r35231352 - r35231361;
double r35231363 = sqrt(r35231343);
double r35231364 = sqrt(r35231344);
double r35231365 = r35231363 + r35231364;
double r35231366 = r35231340 * r35231365;
double r35231367 = r35231363 - r35231364;
double r35231368 = r35231366 * r35231367;
double r35231369 = r35231348 ? r35231362 : r35231368;
return r35231369;
}




Bits error versus re




Bits error versus im
| Original | 57.9 |
|---|---|
| Target | 0.2 |
| Herbie | 0.5 |
if (* (* 0.5 (cos re)) (- (exp (- 0 im)) (exp im))) < 1.6380449607278358e-06Initial program 58.7
Taylor expanded around 0 0.4
Simplified0.5
rmApplied add-sqr-sqrt1.6
Applied prod-diff1.6
Applied distribute-rgt-in1.1
Simplified1.6
Taylor expanded around inf 1.6
Simplified0.4
if 1.6380449607278358e-06 < (* (* 0.5 (cos re)) (- (exp (- 0 im)) (exp im))) Initial program 4.8
rmApplied add-sqr-sqrt5.3
Applied add-sqr-sqrt5.7
Applied difference-of-squares5.7
Applied associate-*r*5.7
Final simplification0.5
herbie shell --seed 2019107 +o rules:numerics
(FPCore (re im)
:name "math.sin on complex, imaginary part"
:herbie-target
(if (< (fabs im) 1) (- (* (cos re) (+ (+ im (* (* (* 1/6 im) im) im)) (* (* (* (* (* 1/120 im) im) im) im) im)))) (* (* 0.5 (cos re)) (- (exp (- 0 im)) (exp im))))
(* (* 0.5 (cos re)) (- (exp (- 0 im)) (exp im))))