Пример #1
0
static long
internal_equality (long al, long ah, long bl, long bh, long neq)
{
  FP_DECL_EX;
  FP_DECL_Q(A); FP_DECL_Q(B);
  long r;

  FP_UNPACK_RAW_Q(A, a);
  FP_UNPACK_RAW_Q(B, b);

  if ((A_e == _FP_EXPMAX_Q && !_FP_FRAC_ZEROP_2(A))
       || (B_e == _FP_EXPMAX_Q && !_FP_FRAC_ZEROP_2(B)))
    {
      /* EQ and NE signal invalid operation only if either operand is SNaN.  */
      if (FP_ISSIGNAN_Q(A) || FP_ISSIGNAN_Q(B))
	{
	  FP_SET_EXCEPTION(FP_EX_INVALID);
	  FP_HANDLE_EXCEPTIONS;
	}
      return -1;
    }

  r = (A_e == B_e
       && _FP_FRAC_EQ_2 (A, B)
       && (A_s == B_s || (!A_e && _FP_FRAC_ZEROP_2(A))));
  r ^= neq;

  return r;
}
Пример #2
0
int _Q_fne(const long double a, const long double b)
{
  FP_DECL_EX;
  FP_DECL_Q(A); FP_DECL_Q(B);
  int r;

  FP_UNPACK_RAW_Q(A, a);
  FP_UNPACK_RAW_Q(B, b);
  FP_CMP_EQ_Q(r, A, B);
  if (r && (FP_ISSIGNAN_Q(A) || FP_ISSIGNAN_Q(B)))
    FP_SET_EXCEPTION(FP_EX_INVALID);
  FP_HANDLE_EXCEPTIONS;

  return r;
}
Пример #3
0
int __eqtf2(TFtype a, TFtype b)
{
  FP_DECL_EX;
  FP_DECL_Q(A); FP_DECL_Q(B);
  int r;

  FP_UNPACK_RAW_Q(A, a);
  FP_UNPACK_RAW_Q(B, b);
  FP_CMP_EQ_Q(r, A, B);
  if (r && (FP_ISSIGNAN_Q(A) || FP_ISSIGNAN_Q(B)))
    FP_SET_EXCEPTION(FP_EX_INVALID);
  FP_HANDLE_EXCEPTIONS;

  return r;
}
Пример #4
0
CMPtype __letf2(TFtype a, TFtype b)
{
  FP_DECL_EX;
  FP_DECL_Q(A); FP_DECL_Q(B);
  CMPtype r;

  FP_UNPACK_RAW_Q(A, a);
  FP_UNPACK_RAW_Q(B, b);
  FP_CMP_Q(r, A, B, 2);
  if (r == 2 && (FP_ISSIGNAN_Q(A) || FP_ISSIGNAN_Q(B)))
    FP_SET_EXCEPTION(FP_EX_INVALID);
  FP_HANDLE_EXCEPTIONS;

  return r;
}
Пример #5
0
int _Q_cmp(const long double a, const long double b)
{
  FP_DECL_EX;
  FP_DECL_Q(A); FP_DECL_Q(B);
  int r;

  FP_UNPACK_RAW_Q(A, a);
  FP_UNPACK_RAW_Q(B, b);
  FP_CMP_Q(r, B, A, 3);
  if (r == -1) r = 2;
  if (r == 3 && (FP_ISSIGNAN_Q(A) || FP_ISSIGNAN_Q(B)))
    FP_SET_EXCEPTION(FP_EX_INVALID);
  FP_HANDLE_EXCEPTIONS;

  return r;
}