root/maint/gnulib/tests/test-sqrtl.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. my_ldexpl
  2. main

   1 /* Test of sqrtl() function.
   2    Copyright (C) 2010-2021 Free Software Foundation, Inc.
   3 
   4    This program is free software: you can redistribute it and/or modify
   5    it under the terms of the GNU General Public License as published by
   6    the Free Software Foundation; either version 3 of the License, or
   7    (at your option) any later version.
   8 
   9    This program is distributed in the hope that it will be useful,
  10    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12    GNU General Public License for more details.
  13 
  14    You should have received a copy of the GNU General Public License
  15    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
  16 
  17 /* Written by Bruno Haible <bruno@clisp.org>, 2010.  */
  18 
  19 #include <config.h>
  20 
  21 #include <math.h>
  22 
  23 #include "signature.h"
  24 SIGNATURE_CHECK (sqrtl, long double, (long double));
  25 
  26 #include <float.h>
  27 
  28 #include "fpucw.h"
  29 #include "macros.h"
  30 
  31 #define DOUBLE long double
  32 #define L_(literal) literal##L
  33 #define MANT_DIG DBL_MANT_DIG
  34 #define SQRT sqrtl
  35 #define RANDOM randoml
  36 #include "test-sqrt.h"
  37 
  38 static long double
  39 my_ldexpl (long double x, int d)
     /* [previous][next][first][last][top][bottom][index][help] */
  40 {
  41   for (; d > 0; d--)
  42     x *= 2.0L;
  43   for (; d < 0; d++)
  44     x *= 0.5L;
  45   return x;
  46 }
  47 
  48 int
  49 main ()
     /* [previous][next][first][last][top][bottom][index][help] */
  50 {
  51   DECL_LONG_DOUBLE_ROUNDING
  52 
  53   BEGIN_LONG_DOUBLE_ROUNDING ();
  54 
  55   /* A particular value.  */
  56   x = 0.6L;
  57   y = sqrtl (x);
  58   ASSERT (y >= 0.7745966692L && y <= 0.7745966693L);
  59 
  60   /* Another particular value.  */
  61   {
  62     long double z;
  63     long double err;
  64 
  65     x = 8.1974099812331540680810141969554806865L;
  66     y = sqrtl (x);
  67     z = y * y - x;
  68     err = my_ldexpl (z, LDBL_MANT_DIG);
  69     if (err < 0)
  70       err = - err;
  71     ASSERT (err <= 100.0L);
  72   }
  73 
  74   test_function ();
  75 
  76   return 0;
  77 }

/* [previous][next][first][last][top][bottom][index][help] */