6a3c2aded6
* Simplify EINTR/ECANCEL error handling 1. Add semaphore uninterruptible wait function 2 .Replace semaphore wait loop with a single uninterruptible wait 3. Replace all sem_xxx to nxsem_xxx * Unify the void cast usage 1. Remove void cast for function because many place ignore the returned value witout cast 2. Replace void cast for variable with UNUSED macro
68 lines
2.1 KiB
C
68 lines
2.1 KiB
C
/****************************************************************************
|
|
* libs/libc/math/lib_floorl.c
|
|
*
|
|
* This file is a part of NuttX:
|
|
*
|
|
* Copyright (C) 2012 Gregory Nutt. All rights reserved.
|
|
* Ported by: Darcy Gong
|
|
*
|
|
* It derives from the Rhombus OS math library by Nick Johnson which has
|
|
* a compatibile, MIT-style license:
|
|
*
|
|
* Copyright (C) 2009-2011 Nick Johnson <nickbjohnson4224 at gmail.com>
|
|
*
|
|
* Permission to use, copy, modify, and distribute this software for any
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
* copyright notice and this permission notice appear in all copies.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*
|
|
****************************************************************************/
|
|
|
|
/****************************************************************************
|
|
* Included Files
|
|
****************************************************************************/
|
|
|
|
#include <nuttx/config.h>
|
|
#include <nuttx/compiler.h>
|
|
|
|
#include <math.h>
|
|
|
|
/****************************************************************************
|
|
* Public Functions
|
|
****************************************************************************/
|
|
|
|
#ifdef CONFIG_HAVE_LONG_DOUBLE
|
|
long double floorl(long double x)
|
|
{
|
|
long double modx;
|
|
|
|
/* modf() will return the integer part of X. The return value of floor
|
|
* differs for non-integer, negative values.
|
|
*
|
|
* x modfl floor
|
|
* ---- ----- -----
|
|
* 2.0 2.0 2.0
|
|
* 2.4 2.0 2.0
|
|
* 2.9 2.0 2.0
|
|
* -2.7 -2.0 -3.0
|
|
* -2.0 -2.0 -2.0
|
|
*/
|
|
|
|
modfl(x, &modx);
|
|
if (x < 0.0 && x < modx)
|
|
{
|
|
modx -= 1.0;
|
|
}
|
|
|
|
return modx;
|
|
|
|
}
|
|
#endif
|