-/* Emulation for floorl.
- Contributed by Paolo Bonzini
+/* Round towards negative infinity.
+ Copyright (C) 2007, 2009-2013 Free Software Foundation, Inc.
- Copyright 2002, 2003 Free Software Foundation, Inc.
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
- This file is part of gnulib.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- gnulib is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License as published
- by the Free Software Foundation; either version 2.1, or (at your option)
- any later version.
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
- gnulib is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
- License for more details.
+/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
- You should have received a copy of the GNU Lesser General Public License
- along with gnulib; see the file COPYING.LIB. If not, write to the Free
- Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA.
- */
+#include <config.h>
-#include <float.h>
+#if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
-#include "mathl.h"
-
-/* To compute the integer part of X, sum a big enough
- integer so that the precision of the floating point
- number is exactly 1. */
+/* Specification. */
+# include <math.h>
long double
-floorl(long double x)
+floorl (long double x)
{
- long double y;
- if (x < 0.0L)
- y = -(1.0L / LDBL_EPSILON - x - 1.0 / LDBL_EPSILON);
- else
- y = 1.0L / LDBL_EPSILON + x - 1.0 / LDBL_EPSILON;
-
- if (y > x)
- return y - 1.0L;
- else
- return y;
+ return floor (x);
}
+
+#else
+
+# define USE_LONG_DOUBLE
+# include "floor.c"
+
+#endif