This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Increase internal precision of ldbl-128ibm decimal printf



On 03/17/2016 04:56 PM, Andreas Schwab wrote:
> "Paul E. Murphy" <murphyp@linux.vnet.ibm.com> writes:
> 
>> +  /* Hold 7 extra bits of precision in the mantissa.  This allows
>> +     the normalizing shifts below to prevent losing precision when
>> +     the signs differ and the exponents are sufficiently far apart.  */
>> +  lo <<= 7;
> 
> That magical number should probably get a name.

Suggestions? It was noted as an "IEEE 854 adjustment" constant in
printf_fphex.c, and otherwise integrated into the shifts later on.

INTERNAL_PRECISION_SHIFT? Setting it 1 should fix the I case noted
in the comments.

> 
>>  	  /* we have a borrow from the hidden bit, so shift left 1.  */
>> -	  hi = 0x0ffffffffffffeLL | (lo >> 51);
>> -	  lo = 0x1fffffffffffffLL & (lo << 1);
>> +	  hi = 0x000ffffffffffffeLL | (lo >> (52 + 7));
>> +	  lo = 0x0fffffffffffffffLL & (lo << 1);
> 
> Not 51 + 7?

That is intentional.  It should be moving the high bit of lo
lo into position 0.  This is identical to how the ldbl-128ibm
printf_fphex.c, which does round trip these numbers correctly.

I.e ((1<<53)-1)>>51 == 3.  The implicit bit is already factored
into lo, so the existing shift appears wrong here. 

> 
> Andreas.
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]