docs: private double decodeCanonEv(int val)
      {
          int sign = 1;
          if (val < 0)
          {
              val = -val;
              sign = -1;
          }
  
          int frac = val & 0x1f;
          val -= frac;
  
          if (frac == 0x0c)
              frac = 0x20 / 3;
          else if (frac == 0x14)
              frac = 0x40 / 3;
  
          return sign * (val + frac) / (double)0x20;
      }