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