On Sun, Mar 26, 2023 at 1:28 AM Tom Lane <t...@sss.pgh.pa.us> wrote: > > I think you can take it as read that simple C test programs on modern > platforms will exhibit IEEE-compliant handling of float infinities. >
For the record, I tried the attached. It gives a warning at compilation time. $gcc float_inf.c float_inf.c: In function ‘main’: float_inf.c:10:17: warning: division by zero [-Wdiv-by-zero] 10 | float inf = 1.0/0; | ^ float_inf.c:11:20: warning: division by zero [-Wdiv-by-zero] 11 | float n_inf = -1.0/0; | ^ $ ./a.out inf = inf -inf = -inf inf + inf = inf inf + -inf = -nan -inf + inf = -nan -inf + -inf = -inf inf - inf = -nan inf - -inf = inf -inf - inf = -inf -inf - -inf = -nan float 0.0 equals 0.0 float 1.0 equals 1.0 5.0 * inf = inf 5.0 * - inf = -inf 5.0 / inf = 0.000000 5.0 / - inf = -0.000000 inf / 5.0 = inf - inf / 5.0 = -inf The changes in the patch are compliant with the observations above. -- Best Wishes, Ashutosh Bapat
#include <stdio.h> void test_flag(int flag, char *flag_name); int main(void) { float inf = 1.0/0; float n_inf = -1.0/0; printf("inf = %f\n", inf); printf("-inf = %f\n", n_inf); /* Additions */ printf("inf + inf = %f\n", inf + inf); printf("inf + -inf = %f\n", inf + n_inf); printf("-inf + inf = %f\n", n_inf + inf); printf("-inf + -inf = %f\n", n_inf + n_inf); /* Subtractions */ printf("inf - inf = %f\n", inf - inf); printf("inf - -inf = %f\n", inf - n_inf); printf("-inf - inf = %f\n", n_inf - inf); printf("-inf - -inf = %f\n", n_inf - n_inf); if (0.0 == 0.0) printf("float 0.0 equals 0.0\n"); if (0.5 + 0.5 == .64 + .36) printf("float 1.0 equals 1.0\n"); /* Multiplication */ printf(" 5.0 * inf = %f\n", 5.0 * inf); printf(" 5.0 * - inf = %f\n", 5.0 * n_inf); /* Division */ printf(" 5.0 / inf = %f\n", 5.0 / inf); printf(" 5.0 / - inf = %f\n", 5.0 / n_inf); printf(" inf / 5.0 = %f\n", inf / 5.0); printf(" - inf / 5.0 = %f\n", n_inf / 5.0); }