60 sign = signF128UI64( uiA64 );
61 exp = expF128UI64( uiA64 );
62 sig64 = fracF128UI64( uiA64 );
66 shiftDist = 0x402F - exp;
67 if ( shiftDist < 0 ) {
70 if ( shiftDist < -14 ) {
72 (uiA64 ==
UINT64_C( 0xC03E000000000000 ))
73 && (sig0 <
UINT64_C( 0x0002000000000000 ))
75 if ( exact && sig0 ) {
78 return -
INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1;
87 sig64 |=
UINT64_C( 0x0001000000000000 );
88 negShiftDist = -shiftDist;
89 absZ = sig64<<negShiftDist | sig0>>(shiftDist & 63);
90 if ( exact && (
uint64_t) (sig0<<negShiftDist) ) {
96 if ( 49 <= shiftDist ) {
97 if ( exact && (exp | sig64 | sig0) ) {
104 sig64 |=
UINT64_C( 0x0001000000000000 );
105 absZ = sig64>>shiftDist;
106 if ( exact && (sig0 || (absZ<<shiftDist != sig64)) ) {
110 return sign ? -absZ : absZ;