Пример #1
0
int
main ()
{
    /* Zero.  */
    ASSERT (truncf (0.0f) == 0.0f);
    ASSERT (truncf (minus_zerof) == 0.0f);
    /* Positive numbers.  */
    ASSERT (truncf (0.3f) == 0.0f);
    ASSERT (truncf (0.7f) == 0.0f);
    ASSERT (truncf (1.0f) == 1.0f);
    ASSERT (truncf (1.5f) == 1.0f);
    ASSERT (truncf (1.999f) == 1.0f);
    ASSERT (truncf (2.0f) == 2.0f);
    ASSERT (truncf (65535.99f) == 65535.0f);
    ASSERT (truncf (65536.0f) == 65536.0f);
    ASSERT (truncf (2.341e31f) == 2.341e31f);
    /* Negative numbers.  */
    ASSERT (truncf (-0.3f) == 0.0f);
    ASSERT (truncf (-0.7f) == 0.0f);
    ASSERT (truncf (-1.0f) == -1.0f);
    ASSERT (truncf (-1.5f) == -1.0f);
    ASSERT (truncf (-1.999f) == -1.0f);
    ASSERT (truncf (-2.0f) == -2.0f);
    ASSERT (truncf (-65535.99f) == -65535.0f);
    ASSERT (truncf (-65536.0f) == -65536.0f);
    ASSERT (truncf (-2.341e31f) == -2.341e31f);
    /* Infinite numbers.  */
    ASSERT (truncf (Infinityf ()) == Infinityf ());
    ASSERT (truncf (- Infinityf ()) == - Infinityf ());
    /* NaNs.  */
    ASSERT (isnanf (truncf (NaNf ())));

    return 0;
}
Пример #2
0
int
main ()
{
  /* See IEEE 754, section 6.3:
       "the sign of the result of the round floating-point number to
        integral value operation is the sign of the operand. These rules
        shall apply even when operands or results are zero or infinite."  */

  /* Zero.  */
  ASSERT (!signbit (truncf (0.0f)));
  ASSERT (!!signbit (truncf (minus_zerof)) == !!signbit (minus_zerof));
  /* Positive numbers.  */
  ASSERT (!signbit (truncf (0.3f)));
  ASSERT (!signbit (truncf (0.7f)));
  /* Negative numbers.  */
  ASSERT (!!signbit (truncf (-0.3f)) == !!signbit (minus_zerof));
  ASSERT (!!signbit (truncf (-0.7f)) == !!signbit (minus_zerof));

  /* [MX] shaded specification in POSIX.  */

  /* NaN.  */
  ASSERT (isnanf (truncf (NaNf ())));
  /* Infinity.  */
  ASSERT (truncf (Infinityf ()) == Infinityf ());
  ASSERT (truncf (- Infinityf ()) == - Infinityf ());

  return 0;
}
Пример #3
0
static void
test_signbitf ()
{
  /* Finite values.  */
  ASSERT (!signbit (3.141f));
  ASSERT (!signbit (3.141e30f));
  ASSERT (!signbit (3.141e-30f));
  ASSERT (signbit (-2.718f));
  ASSERT (signbit (-2.718e30f));
  ASSERT (signbit (-2.718e-30f));
  /* Zeros.  */
  ASSERT (!signbit (0.0f));
  if (1.0f / minus_zerof < 0)
    ASSERT (signbit (minus_zerof));
  else
    ASSERT (!signbit (minus_zerof));
  /* Infinite values.  */
  ASSERT (!signbit (Infinityf ()));
  ASSERT (signbit (- Infinityf ()));
  /* Quiet NaN.  */
  (void) signbit (zerof / zerof);
#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT
  /* Signalling NaN.  */
  {
    #define NWORDS \
      ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
    typedef union { float value; unsigned int word[NWORDS]; } memory_float;
    memory_float m;
    m.value = zerof / zerof;
# if FLT_EXPBIT0_BIT > 0
    m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1);
# else
    m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)]
      ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1);
# endif
    if (FLT_EXPBIT0_WORD < NWORDS / 2)
      m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT;
    else
      m.word[0] |= (unsigned int) 1;
    (void) signbit (m.value);
    #undef NWORDS
  }
#endif
}
Пример #4
0
static void
test_float (void)
{
  /* Finite values.  */
  ASSERT (!isnan (3.141f));
  ASSERT (!isnan (3.141e30f));
  ASSERT (!isnan (3.141e-30f));
  ASSERT (!isnan (-2.718f));
  ASSERT (!isnan (-2.718e30f));
  ASSERT (!isnan (-2.718e-30f));
  ASSERT (!isnan (0.0f));
  ASSERT (!isnan (minus_zerof));
  /* Infinite values.  */
  ASSERT (!isnan (Infinityf ()));
  ASSERT (!isnan (- Infinityf ()));
  /* Quiet NaN.  */
  ASSERT (isnan (NaNf ()));
#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT
  /* Signalling NaN.  */
  {
    #define NWORDSF \
      ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
    typedef union { float value; unsigned int word[NWORDSF]; } memory_float;
    memory_float m;
    m.value = NaNf ();
# if FLT_EXPBIT0_BIT > 0
    m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1);
# else
    m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDSF / 2 ? 1 : - 1)]
      ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1);
# endif
    if (FLT_EXPBIT0_WORD < NWORDSF / 2)
      m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT;
    else
      m.word[0] |= (unsigned int) 1;
    ASSERT (isnan (m.value));
  }
#endif
}
int
main (int argc, char **argv _GL_UNUSED)
{
  float (*my_ceilf) (float) = argc ? ceilf : dummy;

  /* See IEEE 754, section 6.3:
       "the sign of the result of the round floating-point number to
        integral value operation is the sign of the operand. These rules
        shall apply even when operands or results are zero or infinite."  */

  /* Zero.  */
  ASSERT (!signbit (my_ceilf (0.0f)));
  ASSERT (!!signbit (my_ceilf (minus_zerof)) == !!signbit (minus_zerof));
  /* Positive numbers.  */
  ASSERT (!signbit (my_ceilf (0.3f)));
  ASSERT (!signbit (my_ceilf (0.7f)));
  /* Negative numbers.  */
  ASSERT (!!signbit (my_ceilf (-0.3f)) == !!signbit (minus_zerof));
  ASSERT (!!signbit (my_ceilf (-0.7f)) == !!signbit (minus_zerof));

  /* [MX] shaded specification in POSIX.  */

  /* NaN.  */
  ASSERT (isnanf (ceilf (NaNf ())));
  /* Infinity.  */
  ASSERT (ceilf (Infinityf ()) == Infinityf ());
  ASSERT (ceilf (- Infinityf ()) == - Infinityf ());

  return 0;
}
int
main (int argc, char **argv _GL_UNUSED)
{
  float (*my_floorf) (float) = argc ? floorf : dummy;

  /* See IEEE 754, section 6.3:
       "the sign of the result of the round floating-point number to
        integral value operation is the sign of the operand. These rules
        shall apply even when operands or results are zero or infinite."  */

  /* Zero.  */
  ASSERT (!signbit (my_floorf (0.0f)));
  ASSERT (!!signbit (my_floorf (minus_zerof)) == !!signbit (minus_zerof));
  /* Positive numbers.  */
  ASSERT (!signbit (my_floorf (0.3f)));
  ASSERT (!signbit (my_floorf (0.7f)));
  /* Negative numbers.  */
  ASSERT (!!signbit (my_floorf (-0.3f)) == !!signbit (minus_zerof));
  ASSERT (!!signbit (my_floorf (-0.7f)) == !!signbit (minus_zerof));

  /* [MX] shaded specification in POSIX.  */

  /* NaN.  */
  ASSERT (isnanf (floorf (NaNf ())));
  /* Infinity.  */
  ASSERT (floorf (Infinityf ()) == Infinityf ());
  ASSERT (floorf (- Infinityf ()) == - Infinityf ());

  return 0;
}