Add an implementation of copysignl(), a long double version of copysign().
Approved by: das (mentor)
This commit is contained in:
parent
325152e8fb
commit
b60cb13f76
@ -102,7 +102,7 @@ LIBCDIR= ${.CURDIR}/../libc
|
||||
CFLAGS+= -I${LIBCDIR}/include -I${LIBCDIR}/${MACHINE_ARCH}
|
||||
|
||||
# C99 long double functions
|
||||
COMMON_SRCS+= s_fabsl.c
|
||||
COMMON_SRCS+= s_copysignl.c s_fabsl.c
|
||||
|
||||
# FreeBSD's C library supplies these functions:
|
||||
#COMMON_SRCS+= s_fabs.c s_frexp.c s_isnan.c s_ldexp.c s_modf.c
|
||||
@ -143,7 +143,8 @@ MLINKS+=fabs.3 fabsf.3 fabs.3 fabsl.3
|
||||
MLINKS+=floor.3 floorf.3
|
||||
MLINKS+=fmod.3 fmodf.3
|
||||
MLINKS+=hypot.3 cabs.3 hypot.3 cabsf.3 hypot.3 hypotf.3
|
||||
MLINKS+=ieee.3 copysign.3 ieee.3 copysignf.3 ieee.3 finite.3 ieee.3 finitef.3 \
|
||||
MLINKS+=ieee.3 copysign.3 ieee.3 copysignf.3 ieee.3 copysignl.3 \
|
||||
ieee.3 finite.3 ieee.3 finitef.3 \
|
||||
ieee.3 ilogb.3 ieee.3 ilogbf.3 ieee.3 nextafter.3 ieee.3 nextafterf.3 \
|
||||
ieee.3 remainder.3 ieee.3 remainderf.3 ieee.3 scalbn.3 ieee.3 scalbnf.3
|
||||
MLINKS+=ieee_test.3 logb.3 ieee_test.3 logbf.3
|
||||
|
@ -38,6 +38,7 @@
|
||||
.Sh NAME
|
||||
.Nm copysign ,
|
||||
.Nm copysignf ,
|
||||
.Nm copysignl ,
|
||||
.Nm finite ,
|
||||
.Nm finitef ,
|
||||
.Nm ilogb ,
|
||||
@ -57,6 +58,8 @@
|
||||
.Fn copysign "double x" "double y"
|
||||
.Ft float
|
||||
.Fn copysignf "float x" "float y"
|
||||
.Ft long double
|
||||
.Fn copysignl "long double x" "long double y"
|
||||
.Ft int
|
||||
.Fn finite "double x"
|
||||
.Ft int
|
||||
@ -81,9 +84,10 @@
|
||||
These functions are required or recommended by
|
||||
.St -ieee754 .
|
||||
.Pp
|
||||
.Fn copysign
|
||||
and
|
||||
.Fn copysign ,
|
||||
.Fn copysignf
|
||||
and
|
||||
.Fn copysignl
|
||||
return
|
||||
.Fa x
|
||||
with its sign changed to
|
||||
@ -179,5 +183,9 @@ The
|
||||
.Nm ieee
|
||||
functions appeared in
|
||||
.Bx 4.3 .
|
||||
The
|
||||
.Fn copysignl
|
||||
function first appeared in
|
||||
.Fx 5.3 .
|
||||
.Sh STANDARDS
|
||||
.St -ieee754
|
||||
|
@ -353,7 +353,9 @@ long double atanhl(long double);
|
||||
long double atanl(long double);
|
||||
long double cbrtl(long double);
|
||||
long double ceill(long double);
|
||||
#endif
|
||||
long double copysignl(long double, long double);
|
||||
#if 0
|
||||
long double coshl(long double);
|
||||
long double cosl(long double);
|
||||
long double erfcl(long double);
|
||||
|
42
lib/msun/src/s_copysignl.c
Normal file
42
lib/msun/src/s_copysignl.c
Normal file
@ -0,0 +1,42 @@
|
||||
/*-
|
||||
* Copyright (c) 2004 Stefan Farfeleder
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "fpmath.h"
|
||||
|
||||
long double
|
||||
copysignl(long double x, long double y)
|
||||
{
|
||||
union IEEEl2bits ux, uy;
|
||||
|
||||
ux.e = x;
|
||||
uy.e = y;
|
||||
ux.bits.sign = uy.bits.sign;
|
||||
return (ux.e);
|
||||
}
|
Loading…
Reference in New Issue
Block a user