++*q;
}
return
- normalizeRoundAndPackFloatx80(
- 80, zSign, bExp + expDiff, aSig0, aSig1, status );
+ normalizeRoundAndPackFloatx80(status->floatx80_rounding_precision,
+ zSign, bExp + expDiff, aSig0, aSig1, status );
}
#endif // End of modification
*q += qTemp;
}
return
- normalizeRoundAndPackFloatx80(
- 80, zSign, bExp + expDiff, aSig0, aSig1, status );
+ normalizeRoundAndPackFloatx80(status->floatx80_rounding_precision,
+ zSign, bExp + expDiff, aSig0, aSig1, status );
}
#endif // end of addition for Previous
normalizeFloatx80Subnormal( aSig, &aExp, &aSig );
}
- if ( bExp < 0x3FFF ) return a;
+ if (bExp < 0x3FFF) {
+ return roundAndPackFloatx80(
+ status->floatx80_rounding_precision, aSign, aExp, aSig, 0, status);
+ }
if ( 0x400F < bExp ) {
aExp = bSign ? -0x6001 : 0xE000;
if (compact > 0x400CB167) {
if (compact > 0x400CB2B3) {
RESET_PREC;
- return roundAndPackFloatx80(status->floatx80_rounding_precision, 0, 0x8000, one_sig, 0, status);
+ a = roundAndPackFloatx80(status->floatx80_rounding_precision, 0, 0x8000, one_sig, 0, status);
+ float_raise(float_flag_inexact, status);
+ return a;
} else {
fp0 = packFloatx80(0, aExp, aSig);
fp0 = floatx80_sub(fp0, float64_to_floatx80(LIT64(0x40C62D38D3D64634), status), status);
if (compact > 0x400CB2B3) {
RESET_PREC;
- return roundAndPackFloatx80(status->floatx80_rounding_precision, aSign, 0x8000, aSig, 0, status);
+ a = roundAndPackFloatx80(status->floatx80_rounding_precision, aSign, 0x8000, aSig, 0, status);
+ float_raise(float_flag_inexact, status);
+ return a;
} else {
fp0 = floatx80_abs(a, status); // Y = |X|
fp0 = floatx80_sub(fp0, float64_to_floatx80(LIT64(0x40C62D38D3D64634), status), status); // (|X|-16381LOG2_LEAD)