[Bug c/69088] type conversion to int

2016-01-02 Thread ka_bena at yahoo dot fr
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69088

--- Comment #2 from BENAÏSSA  ---
/*
thank you for your answer.
 A.Benaïssa
Comment:
  Please consider this case: 
*/

#include  
int main()
{ 
  float A = 0.F  ;
  _Bool  B1  = 1.F / A ;
  signed char    B2  = 1.F / A ;
  unsigned char  B3  = 1.F / A ;
  signed short   B4  = 1.F / A ;
  unsigned short B5  = 1.F / A ;
  signed int B6  = 1.F / A ;
  unsigned int   B7  = 1.F / A ;
  signed long    B8  = 1.F / A ;
  unsigned long  B9  = 1.F / A ;
  signed long long   B10 = 1.F / A ;
  unsigned long long B11 = 1.F / A ;

  double C = 0.  ;
  _Bool  D1  = 1. / C ;
  signed char    D2  = 1. / C ;
  unsigned char  D3  = 1. / C ;
  signed short   D4  = 1. / C ;
  unsigned short D5  = 1. / C ;
  signed int D6  = 1. / C ;
  unsigned int   D7  = 1. / C ;
  signed long    D8  = 1. / C ;
  unsigned long  D9  = 1. / C ;
  signed long long   D10 = 1. / C ;
  unsigned long long D11 = 1. / C ;

  long double E = 0.L  ;
  _Bool  F1  = 1.L / E ;
  signed char    F2  = 1.L / E ;
  unsigned char  F3  = 1.L / E ;
  signed short   F4  = 1.L / E ;
  unsigned short F5  = 1.L / E ;
  signed int F6  = 1.L / E ;
  unsigned int   F7  = 1.L / E ;
  signed long    F8  = 1.L / E ;
  unsigned long  F9  = 1.L / E ;
  signed long long   F10 = 1.L / E ;
  unsigned long long F11 = 1.L / E ;

  __float128 G = 0.Q  ;
  _Bool  H1  = 1.Q / G ;
  signed char    H2  = 1.Q / G ;
  unsigned char  H3  = 1.Q / G ;
  signed short   H4  = 1.Q / G ;
  unsigned short H5  = 1.Q / G ;
  signed int H6  = 1.Q / G ;
  unsigned int   H7  = 1.Q / G ;
  signed long    H8  = 1.Q / G ;
  unsigned long  H9  = 1.Q / G ;
  signed long long   H10 = 1.Q / G ;
  unsigned long long H11 = 1.Q / G ;

  printf("_Bool\n") ;
  printf("  B1 = %d \n" , B1) ;
  printf("  D1 = %d \n" , D1) ;
  printf("  F1 = %d \n" , F1) ;
  printf("  H1 = %d \n" , H1) ;
  printf("char signed\n") ;
  printf("  B2 = %d \n" , (int)B2) ;
  printf("  D2 = %d \n" , (int)D2) ;
  printf("  F2 = %d \n" , (int)F2) ;
  printf("  H2 = %d \n" , (int)H2) ;
  printf("char unsigned\n") ;
  printf("  B3 = %u \n" , (int unsigned)B3) ;
  printf("  D3 = %u \n" , (int unsigned)D3) ;
  printf("  F3 = %u \n" , (int unsigned)F3) ;
  printf("  H3 = %u \n" , (int unsigned)H3) ;
  printf("short signed\n") ;
  printf("  B4 = %hd \n" , B4) ;
  printf("  D4 = %hd \n" , D4) ;
  printf("  F4 = %hd \n" , F4) ;
  printf("  H4 = %hd \n" , H4) ;
  printf("short unsigned\n") ;
  printf("  B5 = %hu \n" , B5) ;
  printf("  D5 = %hu \n" , D5) ;
  printf("  F5 = %hu \n" , F5) ;
  printf("  H5 = %hu \n" , H5) ;
  printf("int signed\n") ;
  printf("  B6 = %d \n" , B6) ;
  printf("  D6 = %d \n" , D6) ;
  printf("  F6 = %d \n" , F6) ;
  printf("  H6 = %d \n" , H6) ;
  printf("int unsigned\n") ;
  printf("  B7 = %u \n" , B7) ;
  printf("  D7 = %u \n" , D7) ;
  printf("  F7 = %u \n" , F7) ;
  printf("  H7 = %u \n" , H7) ;
  printf("long\n") ;
  printf("  B8 = %d \n" , B8) ;
  printf("  D8 = %d \n" , D8) ;
  printf("  F8 = %d \n" , F8) ;
  printf("  H8 = %d \n" , H8) ;
  printf("long unsigned \n") ;
  printf("  B9 = %lu \n" , B9) ;
  printf("  D9 = %lu \n" , D9) ;
  printf("  F9 = %lu \n" , F9) ;
  printf("  H9 = %lu \n" , H9) ;
  printf("long long \n") ;
  printf("  B10 = %lld \n" , B10) ;
  printf("  D10 = %lld \n" , D10) ;
  printf("  F10 = %lld \n" , F10) ;
  printf("  H10 = %lld \n" , H10) ;
  printf("long long unsigned\n") ;
  printf("  B11 = %llu \n" , B11) ;
  printf("  D11 = %llu \n" , D11) ;
  printf("  F11 = %llu \n" , F11) ;
  printf("  H11 = %llu \n" , H11) ;

return 0;
}
/*
RESULTS::

_Bool
  B1 = 1 
  D1 = 1 
  F1 = 1 
  H1 = 1 
char signed
  B2 = 0 
  D2 = 0 
  F2 = 0 
  H2 = -1 
char unsigned
  B3 = 0 
  D3 = 0 
  F3 = 0 
  H3 = 0 
short signed
  B4 = -32768 
  D4 = -32768 
  F4 = -32768 
  H4 = -1 
short unsigned
  B5 = 0 
  D5 = 0 
  F5 = 0 
  H5 = 0 
int signed
  B6 = -2147483648 
  D6 = -2147483648 
  F6 = -2147483648 
  H6 = 2147483647 
int unsigned
  B7 = 0 
  D7 = 0 
  F7 = 0 
  H7 = 0 
long
  B8 = -2147483648 
  D8 = -2147483648 
  F8 = -2147483648 
  H8 = 2147483647 
long unsigned 
  B9 = 0 
  D9 = 0 
  F9 = 0 
  H9 = 0 
long long 
  B10 = -9223372036854775808 
  D10 = -9223372036854775808 
  F10 = -9223372036854775808 
  H10 = 9223372036854775807 
long long unsigned
  B11 = 0 
  D11 = 0 
  F11 = 0 
  H11 = 0 

it is clear that there is no real infinite value for any floating 
point representation but instead there is a symbolic representation
of infinites values by a finite sequence of bits.
This finite sequence of bits allows us to create a simple algebra 
on infinite's.
The type conversion from valid floating values to integer values is 
always possible in C.
This not means that for "infinites floating point values" , the result
of type 

[Bug c/69088] type conversion to int

2015-12-30 Thread sch...@linux-m68k.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69088

Andreas Schwab  changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution|--- |INVALID

--- Comment #1 from Andreas Schwab  ---
Inf is not a finite value in the range of int, thus the conversion invokes
undefined behaviour.