Implement and document fdim{,f,l}, fmax{,f,l}, and fmin{,f,l}.
This commit is contained in:
parent
6840424ee5
commit
4f82cb46c4
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=131320
@ -81,8 +81,9 @@ COMMON_SRCS= b_exp.c b_log.c b_tgamma.c \
|
||||
k_standard.c k_tan.c k_tanf.c \
|
||||
s_asinh.c s_asinhf.c s_atan.c s_atanf.c s_cbrt.c s_cbrtf.c s_ceil.c \
|
||||
s_ceilf.c s_copysign.c s_copysignf.c s_cos.c s_cosf.c s_erf.c s_erff.c \
|
||||
s_expm1.c s_expm1f.c s_fabsf.c s_finite.c s_finitef.c \
|
||||
s_floor.c s_floorf.c s_frexp.c s_frexpf.c s_ilogb.c s_ilogbf.c \
|
||||
s_expm1.c s_expm1f.c s_fabsf.c s_fdim.c s_finite.c s_finitef.c \
|
||||
s_floor.c s_floorf.c s_fmax.c s_fmaxf.c s_fmaxl.c s_fmin.c \
|
||||
s_fminf.c s_fminl.c s_frexp.c s_frexpf.c s_ilogb.c s_ilogbf.c \
|
||||
s_isnanf.c s_ldexpf.c s_lib_version.c s_log1p.c \
|
||||
s_log1pf.c s_logb.c s_logbf.c s_matherr.c s_modff.c \
|
||||
s_nextafter.c s_nextafterf.c s_rint.c s_rintf.c s_round.c s_roundf.c \
|
||||
@ -126,8 +127,8 @@ SRCS= ${COMMON_SRCS} ${ARCH_SRCS}
|
||||
INCS= fenv.h math.h
|
||||
|
||||
MAN= acos.3 acosh.3 asin.3 asinh.3 atan.3 atan2.3 atanh.3 ceil.3 \
|
||||
cos.3 cosh.3 erf.3 exp.3 fabs.3 feclearexcept.3 fegetenv.3 \
|
||||
fegetround.3 fenv.3 floor.3 fmod.3 hypot.3 ieee.3 \
|
||||
cos.3 cosh.3 erf.3 exp.3 fabs.3 fdim.3 feclearexcept.3 fegetenv.3 \
|
||||
fegetround.3 fenv.3 floor.3 fmax.3 fmod.3 hypot.3 ieee.3 \
|
||||
ieee_test.3 j0.3 lgamma.3 math.3 rint.3 round.3 sin.3 sinh.3 sqrt.3 \
|
||||
tan.3 tanh.3 trunc.3
|
||||
|
||||
@ -147,12 +148,15 @@ MLINKS+=exp.3 expm1.3 exp.3 log.3 exp.3 log10.3 exp.3 log1p.3 exp.3 pow.3 \
|
||||
exp.3 expm1f.3 exp.3 logf.3 exp.3 powf.3 \
|
||||
exp.3 log10f.3 exp.3 log1pf.3
|
||||
MLINKS+=fabs.3 fabsf.3 fabs.3 fabsl.3
|
||||
MLINKS+=fdim.3 fdimf.3 fdim.3 fdiml.3
|
||||
MLINKS+=feclearexcept.3 fegetexceptflag.3 feclearexcept.3 feraiseexcept.3 \
|
||||
feclearexcept.3 fesetexceptflag.3 feclearexcept.3 fetestexcept.3
|
||||
MLINKS+=fegetenv.3 feholdexcept.3 fegetenv.3 fesetenv.3 \
|
||||
fegetenv.3 feupdateenv.3
|
||||
MLINKS+=fegetround.3 fesetround.3
|
||||
MLINKS+=floor.3 floorf.3
|
||||
MLINKS+=fmax.3 fmaxf.3 fmax.3 fmaxl.3 \
|
||||
fmax.3 fmin.3 fmax.3 fminf.3 fmax.3 fminl.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 copysignl.3 \
|
||||
|
86
lib/msun/man/fdim.3
Normal file
86
lib/msun/man/fdim.3
Normal file
@ -0,0 +1,86 @@
|
||||
.\" Copyright (c) 2004 David Schultz <das@FreeBSD.org>
|
||||
.\" 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 THE 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 THE 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$
|
||||
.\"
|
||||
.Dd June 29, 2004
|
||||
.Dt FDIM 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm fdim ,
|
||||
.Nm fdimf ,
|
||||
.Nm fdiml
|
||||
.Nd positive difference functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn fdim "double x" "double y"
|
||||
.Ft float
|
||||
.Fn fdimf "float x" "float y"
|
||||
.Ft long double
|
||||
.Fn fdiml "long double x" "long double y"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn fdim ,
|
||||
.Fn fdimf ,
|
||||
and
|
||||
.Fn fdiml
|
||||
functions return the positive difference between
|
||||
.Fa x
|
||||
and
|
||||
.Fa y .
|
||||
That is, if
|
||||
.Fa x\- Ns Fa y
|
||||
is positive, then
|
||||
.Fa x\- Ns Fa y
|
||||
is returned.
|
||||
If either
|
||||
.Fa x
|
||||
or
|
||||
.Fa y
|
||||
is an \*(Na, then an \*(Na is returned.
|
||||
Otherwise, the result is
|
||||
.Li +0.0 .
|
||||
.Pp
|
||||
Overflow or underflow may occur iff the exact result is not
|
||||
representable in the return type.
|
||||
No other exceptions are raised.
|
||||
.Sh SEE ALSO
|
||||
.Xr fabs 3 ,
|
||||
.Xr fmax 3 ,
|
||||
.Xr fmin 3 ,
|
||||
.Xr math 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn fdim ,
|
||||
.Fn fdimf ,
|
||||
and
|
||||
.Fn fdiml
|
||||
functions conform to
|
||||
.St -isoC-99 .
|
||||
.Sh HISTORY
|
||||
These routines first appeared in
|
||||
.Fx 5.3 .
|
96
lib/msun/man/fmax.3
Normal file
96
lib/msun/man/fmax.3
Normal file
@ -0,0 +1,96 @@
|
||||
.\" Copyright (c) 2004 David Schultz <das@FreeBSD.org>
|
||||
.\" 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 THE 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 THE 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$
|
||||
.\"
|
||||
.Dd June 29, 2004
|
||||
.Dt FMAX 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm fmax ,
|
||||
.Nm fmaxf ,
|
||||
.Nm fmaxl ,
|
||||
.Nm fmin ,
|
||||
.Nm fminf ,
|
||||
.Nm fminl
|
||||
.Nd floating-point maximum and minimum functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn fmax "double x" "double y"
|
||||
.Ft float
|
||||
.Fn fmaxf "float x" "float y"
|
||||
.Ft long double
|
||||
.Fn fmaxl "long double x" "long double y"
|
||||
.Ft double
|
||||
.Fn fmin "double x" "double y"
|
||||
.Ft float
|
||||
.Fn fminf "float x" "float y"
|
||||
.Ft long double
|
||||
.Fn fminl "long double x" "long double y"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn fmax ,
|
||||
.Fn fmaxf ,
|
||||
and
|
||||
.Fn fmaxl
|
||||
functions return the larger of
|
||||
.Fa x
|
||||
and
|
||||
.Fa y ,
|
||||
and likewise, the
|
||||
.Fn fmin ,
|
||||
.Fn fminf ,
|
||||
and
|
||||
.Fn fminl
|
||||
functions return the smaller of
|
||||
.Fa x
|
||||
and
|
||||
.Fa y .
|
||||
.Li +0.0
|
||||
is treated as being larger than
|
||||
.Li -0.0 .
|
||||
If one argument is an \*(Na, then the other argument is returned.
|
||||
If both arguments are \*(Nas, then the result is an \*(Na.
|
||||
These routines do not raise any floating-point exceptions.
|
||||
.Sh SEE ALSO
|
||||
.Xr fabs 3 ,
|
||||
.Xr fdim 3 ,
|
||||
.Xr math 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn fmax ,
|
||||
.Fn fmaxf ,
|
||||
.Fn fmaxl ,
|
||||
.Fn fmin ,
|
||||
.Fn fminf ,
|
||||
and
|
||||
.Fn fminl
|
||||
functions conform to
|
||||
.St -isoC-99 .
|
||||
.Sh HISTORY
|
||||
These routines first appeared in
|
||||
.Fx 5.3 .
|
@ -207,6 +207,9 @@ double cbrt(double) __pure2;
|
||||
double erf(double);
|
||||
double erfc(double) __pure2;
|
||||
double expm1(double) __pure2;
|
||||
double fdim(double, double);
|
||||
double fmax(double, double) __pure2;
|
||||
double fmin(double, double) __pure2;
|
||||
double hypot(double, double);
|
||||
int ilogb(double);
|
||||
double lgamma(double);
|
||||
@ -314,6 +317,10 @@ float rintf(float);
|
||||
float scalblnf(float, long);
|
||||
float scalbnf(float, int);
|
||||
float truncf(float);
|
||||
|
||||
float fdimf(float, float);
|
||||
float fmaxf(float, float) __pure2;
|
||||
float fminf(float, float) __pure2;
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -371,12 +378,14 @@ long double expl(long double);
|
||||
long double expm1l(long double);
|
||||
#endif
|
||||
long double fabsl(long double);
|
||||
#if 0
|
||||
long double fdiml(long double, long double);
|
||||
#if 0
|
||||
long double floorl(long double);
|
||||
long double fmal(long double, long double, long double);
|
||||
long double fmaxl(long double, long double);
|
||||
long double fminl(long double, long double);
|
||||
#endif
|
||||
long double fmaxl(long double, long double) __pure2;
|
||||
long double fminl(long double, long double) __pure2;
|
||||
#if 0
|
||||
long double fmodl(long double, long double);
|
||||
long double frexpl(long double value, int *);
|
||||
long double hypotl(long double, long double);
|
||||
|
46
lib/msun/src/s_fdim.c
Normal file
46
lib/msun/src/s_fdim.c
Normal file
@ -0,0 +1,46 @@
|
||||
/*-
|
||||
* Copyright (c) 2004 David Schultz <das@FreeBSD.ORG>
|
||||
* 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 THE 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 THE 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.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#define DECL(type, fn) \
|
||||
type \
|
||||
fn(type x, type y) \
|
||||
{ \
|
||||
\
|
||||
if (isnan(x)) \
|
||||
return (x); \
|
||||
if (isnan(y)) \
|
||||
return (y); \
|
||||
return (x > y ? x - y : 0.0); \
|
||||
}
|
||||
|
||||
DECL(double, fdim)
|
||||
DECL(float, fdimf)
|
||||
DECL(long double, fdiml)
|
53
lib/msun/src/s_fmax.c
Normal file
53
lib/msun/src/s_fmax.c
Normal file
@ -0,0 +1,53 @@
|
||||
/*-
|
||||
* Copyright (c) 2004 David Schultz <das@FreeBSD.ORG>
|
||||
* 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 THE 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 THE 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.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "fpmath.h"
|
||||
|
||||
double
|
||||
fmax(double x, double y)
|
||||
{
|
||||
union IEEEd2bits u[2];
|
||||
|
||||
u[0].d = x;
|
||||
u[1].d = y;
|
||||
|
||||
/* Check for NaNs to avoid raising spurious exceptions. */
|
||||
if (u[0].bits.exp == 2047 && (u[0].bits.manh | u[0].bits.manl) != 0)
|
||||
return (y);
|
||||
if (u[1].bits.exp == 2047 && (u[1].bits.manh | u[1].bits.manl) != 0)
|
||||
return (x);
|
||||
|
||||
/* Handle comparisons of signed zeroes. */
|
||||
if (u[0].bits.sign != u[1].bits.sign)
|
||||
return (u[u[0].bits.sign].d);
|
||||
|
||||
return (x > y ? x : y);
|
||||
}
|
53
lib/msun/src/s_fmaxf.c
Normal file
53
lib/msun/src/s_fmaxf.c
Normal file
@ -0,0 +1,53 @@
|
||||
/*-
|
||||
* Copyright (c) 2004 David Schultz <das@FreeBSD.ORG>
|
||||
* 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 THE 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 THE 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.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "fpmath.h"
|
||||
|
||||
float
|
||||
fmaxf(float x, float y)
|
||||
{
|
||||
union IEEEf2bits u[2];
|
||||
|
||||
u[0].f = x;
|
||||
u[1].f = y;
|
||||
|
||||
/* Check for NaNs to avoid raising spurious exceptions. */
|
||||
if (u[0].bits.exp == 255 && u[0].bits.man != 0)
|
||||
return (y);
|
||||
if (u[1].bits.exp == 255 && u[1].bits.man != 0)
|
||||
return (x);
|
||||
|
||||
/* Handle comparisons of signed zeroes. */
|
||||
if (u[0].bits.sign != u[1].bits.sign)
|
||||
return (u[u[0].bits.sign].f);
|
||||
|
||||
return (x > y ? x : y);
|
||||
}
|
55
lib/msun/src/s_fmaxl.c
Normal file
55
lib/msun/src/s_fmaxl.c
Normal file
@ -0,0 +1,55 @@
|
||||
/*-
|
||||
* Copyright (c) 2004 David Schultz <das@FreeBSD.ORG>
|
||||
* 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 THE 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 THE 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.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "fpmath.h"
|
||||
|
||||
long double
|
||||
fmaxl(long double x, long double y)
|
||||
{
|
||||
union IEEEl2bits u[2];
|
||||
|
||||
u[0].e = x;
|
||||
mask_nbit_l(u[0]);
|
||||
u[1].e = y;
|
||||
mask_nbit_l(u[1]);
|
||||
|
||||
/* Check for NaNs to avoid raising spurious exceptions. */
|
||||
if (u[0].bits.exp == 32767 && (u[0].bits.manh | u[0].bits.manl) != 0)
|
||||
return (y);
|
||||
if (u[1].bits.exp == 32767 && (u[1].bits.manh | u[1].bits.manl) != 0)
|
||||
return (x);
|
||||
|
||||
/* Handle comparisons of signed zeroes. */
|
||||
if (u[0].bits.sign != u[1].bits.sign)
|
||||
return (u[0].bits.sign ? y : x);
|
||||
|
||||
return (x > y ? x : y);
|
||||
}
|
53
lib/msun/src/s_fmin.c
Normal file
53
lib/msun/src/s_fmin.c
Normal file
@ -0,0 +1,53 @@
|
||||
/*-
|
||||
* Copyright (c) 2004 David Schultz <das@FreeBSD.ORG>
|
||||
* 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 THE 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 THE 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.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "fpmath.h"
|
||||
|
||||
double
|
||||
fmin(double x, double y)
|
||||
{
|
||||
union IEEEd2bits u[2];
|
||||
|
||||
u[0].d = x;
|
||||
u[1].d = y;
|
||||
|
||||
/* Check for NaNs to avoid raising spurious exceptions. */
|
||||
if (u[0].bits.exp == 2047 && (u[0].bits.manh | u[0].bits.manl) != 0)
|
||||
return (y);
|
||||
if (u[1].bits.exp == 2047 && (u[1].bits.manh | u[1].bits.manl) != 0)
|
||||
return (x);
|
||||
|
||||
/* Handle comparisons of signed zeroes. */
|
||||
if (u[0].bits.sign != u[1].bits.sign)
|
||||
return (u[u[1].bits.sign].d);
|
||||
|
||||
return (x < y ? x : y);
|
||||
}
|
53
lib/msun/src/s_fminf.c
Normal file
53
lib/msun/src/s_fminf.c
Normal file
@ -0,0 +1,53 @@
|
||||
/*-
|
||||
* Copyright (c) 2004 David Schultz <das@FreeBSD.ORG>
|
||||
* 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 THE 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 THE 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.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "fpmath.h"
|
||||
|
||||
float
|
||||
fminf(float x, float y)
|
||||
{
|
||||
union IEEEf2bits u[2];
|
||||
|
||||
u[0].f = x;
|
||||
u[1].f = y;
|
||||
|
||||
/* Check for NaNs to avoid raising spurious exceptions. */
|
||||
if (u[0].bits.exp == 255 && u[0].bits.man != 0)
|
||||
return (y);
|
||||
if (u[1].bits.exp == 255 && u[1].bits.man != 0)
|
||||
return (x);
|
||||
|
||||
/* Handle comparisons of signed zeroes. */
|
||||
if (u[0].bits.sign != u[1].bits.sign)
|
||||
return (u[u[1].bits.sign].f);
|
||||
|
||||
return (x < y ? x : y);
|
||||
}
|
55
lib/msun/src/s_fminl.c
Normal file
55
lib/msun/src/s_fminl.c
Normal file
@ -0,0 +1,55 @@
|
||||
/*-
|
||||
* Copyright (c) 2004 David Schultz <das@FreeBSD.ORG>
|
||||
* 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 THE 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 THE 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.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "fpmath.h"
|
||||
|
||||
long double
|
||||
fminl(long double x, long double y)
|
||||
{
|
||||
union IEEEl2bits u[2];
|
||||
|
||||
u[0].e = x;
|
||||
mask_nbit_l(u[0]);
|
||||
u[1].e = y;
|
||||
mask_nbit_l(u[1]);
|
||||
|
||||
/* Check for NaNs to avoid raising spurious exceptions. */
|
||||
if (u[0].bits.exp == 32767 && (u[0].bits.manh | u[0].bits.manl) != 0)
|
||||
return (y);
|
||||
if (u[1].bits.exp == 32767 && (u[1].bits.manh | u[1].bits.manl) != 0)
|
||||
return (x);
|
||||
|
||||
/* Handle comparisons of signed zeroes. */
|
||||
if (u[0].bits.sign != u[1].bits.sign)
|
||||
return (u[1].bits.sign ? y : x);
|
||||
|
||||
return (x < y ? x : y);
|
||||
}
|
Loading…
Reference in New Issue
Block a user