(root)/
gawk-5.2.2/
awklib/
eg/
test-programs/
gen-float-table.c
       1  #include <stdio.h>
       2  #include <math.h>
       3  #include <stdbool.h>
       4  
       5  #define def_func(name, op) \
       6      bool name(double left, double right) { \
       7          return left op right; \
       8      }
       9  
      10  def_func(eq, ==)
      11  def_func(ne, !=)
      12  def_func(lt, <)
      13  def_func(le, <=)
      14  def_func(gt, >)
      15  def_func(ge, >=)
      16  
      17  struct {
      18      const char *name;
      19      bool (*func)(double left, double right);
      20  } functions[] = {
      21      { "==", eq },
      22      { "!=", ne },
      23      { "< ", lt },
      24      { "<=", le },
      25      { "> ", gt },
      26      { ">=", ge },
      27      { 0, 0 }
      28  };
      29  
      30  int main()
      31  {
      32      double values[] = {
      33          -sqrt(-1),     // nan
      34          sqrt(-1),      // -nan
      35          -log(0.0),     // inf
      36          log(0.0)       // -inf
      37      };
      38      double compare[] = { 2.0,
      39          -sqrt(-1),     // nan
      40          sqrt(-1),      // -nan
      41          -log(0.0),     // inf
      42          log(0.0)       // -inf
      43      };
      44  
      45      int i, j, k;
      46  
      47      for (i = 0; i < 4; i++) {
      48          for (j = 0; j < 5; j++) {
      49              for (k = 0; functions[k].name != NULL; k++) {
      50                  printf("%g %s %g -> %s\n", values[i],
      51                                  functions[k].name,
      52                                  compare[j],
      53                      functions[k].func(values[i], compare[j]) ? "True" : "False");
      54              }
      55              printf("\n");
      56          }
      57      }
      58  
      59      return 0;
      60  }