Lines 241-254
fmal(long double x, long double y, long double z)
Link Here
|
241 |
|
241 |
|
242 |
spread = ex + ey; |
242 |
spread = ex + ey; |
243 |
|
243 |
|
244 |
if (r.hi == 0.0) { |
244 |
if (r.hi == 0.0 && xy.lo == 0) { |
245 |
/* |
245 |
/* |
246 |
* When the addends cancel to 0, ensure that the result has |
246 |
* When the addends cancel to 0, ensure that the result has |
247 |
* the correct sign. |
247 |
* the correct sign. |
248 |
*/ |
248 |
*/ |
249 |
fesetround(oround); |
249 |
fesetround(oround); |
250 |
volatile long double vzs = zs; /* XXX gcc CSE bug workaround */ |
250 |
volatile long double vzs = zs; /* XXX gcc CSE bug workaround */ |
251 |
return (xy.hi + vzs + ldexpl(xy.lo, spread)); |
251 |
return (xy.hi + vzs); |
252 |
} |
252 |
} |
253 |
|
253 |
|
254 |
if (oround != FE_TONEAREST) { |
254 |
if (oround != FE_TONEAREST) { |