Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <float.h>
  4.  
  5. #include "util/u_math.h"
  6. #include "util/u_half.h"
  7.  
  8. int
  9. main(int argc, char **argv)
  10. {
  11.    unsigned i;
  12.    unsigned roundtrip_fails = 0;
  13.  
  14.    for(i = 0; i < 1 << 16; ++i)
  15.    {
  16.       uint16_t h = (uint16_t) i;
  17.       union fi f;
  18.       uint16_t rh;
  19.  
  20.       f.f = util_half_to_float(h);
  21.       rh = util_float_to_half(f.f);
  22.  
  23.       if (h != rh && !(util_is_half_nan(h) && util_is_half_nan(rh))) {
  24.          printf("Roundtrip failed: %x -> %x = %f -> %x\n", h, f.ui, f.f, rh);
  25.          ++roundtrip_fails;
  26.       }
  27.    }
  28.  
  29.    if(roundtrip_fails)
  30.       printf("Failure! %u/65536 half floats failed a conversion to float and back.\n", roundtrip_fails);
  31.    else
  32.       printf("Success!\n");
  33.  
  34.    return 0;
  35. }
  36.