https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67570

--- Comment #2 from BENAÏSSA <ka_bena at yahoo dot fr> ---

Thank you for your reply.
              A.BENAÏSSA

Post scriptum:
Please can you confirm if you have time that the following
positive floating point values are correct.

----------------------------------
 MIN_DENORMALIZED
   1.401298 E-0045 for float
   4.940656 E-0324 for double
   3.645200 E-4951 for long double
   6.475175 E-4966 for __float128
----------------------------------
 HUGE_DENORMALIZED
   1.175494 E-0038 for float        
   2.225074 E-0308 for double       
   6.724206 E-4932 for long double 
   3.362103 E-4932 for __float128 
----------------------------------
 MIN_NORMALIZED
   1.763242 E-0038 for float      
   3.337611 E-0308 for double       
   3.362103 E-4932 for long double 
   5.043155 E-4932 for __float128 
----------------------------------
 HUGE_NORMALIZED
   3.402823 E+0038 for float        
   1.797693 E+0308 for double       
   1.189731 E+4932 for long double 
   1.189731 E+4932 for __float128 
----------------------------------

Note:

Multiplying (float)MIN_NORMALIZED * (float)MIN_NORMALIZED and 
viewing this value with printf("%E..) we obtains 
result = 3.109021E-076 wuich is a valid double normalized value.

The float binary representation of result is:
0 00000000 00000000000000000000000 and this is correct 
because result is lower than (float)MIN_DENORMALIZED.

For coherency because:

1-  (float) * (float) = (float)
2-  sizeof( (float)MIN_NORMALIZED * (float)MIN_NORMALIZED) ) = 4

the result of 
printf("%E\n" , (float)MIN_NORMALIZED * (float)MIN_NORMALIZED) ); 
I suppose must be 0.E0F. 


     Le Lundi 14 septembre 2015 18h52, joseph at codesourcery dot com
<gcc-bugzi...@gcc.gnu.org> a écrit :


 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67570

--- Comment #1 from joseph at codesourcery dot com <joseph at codesourcery dot
com> ---
If I understand what you are doing correctly, this is an unnormal 
representation (exponent not zero or maximal, explicit MSB of mantissa 
zero).  Such representations, which cannot be produced by floating-point 
operations, are considered trap representations in C terms (undefined 
behavior if used, no consistency expected or required).  Valid 
representations must have that MSB set for nonzero exponents and clear for 
zero exponents.

Reply via email to