| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
extended-precision support. Mostly from Cephes.
|
|
|
|
| |
them in libc for a very long time. OK guenther@.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
commit, and deal with problems (if any) in tree.
Note that this adds the following functions. Ports with hacks might
need adjustments.
nexttoward(3), fma(3), nexttowardf(3), fmaf(3), acoshl(3), asinhl(3),
atanhl(3), coshl(3), sinhl(3), tanhl(3), expl(3), expm1l(3), logl(3),
log10l(3), log1pl(3), log2l(3), modfl(3), cbrtl(3), hypotl(3),
powl(3), erfl(3), erfcl(3), lgammal(3), tgammal(3), ceill(3),
floorl(3), lrintl(3), llrintl(3), roundl(3), lroundl(3), llroundl(3),
truncl(3), fmodl(3), remainderl(3), remquol(3), nextafterl(3),
nexttowardl(3), fmal(3).
With this commit, our library implements all functionality required
by C99. Documentation bits will follow.
|
|
|
|
|
|
|
|
| |
should be 96-bits on 32-bit architectures, and 128-bits on 64-bit
architectures.
- Add abstract macros to operate on long doubles by words. To be
used soon.
|
|
|
|
|
| |
x+x*x, as a result sign got lost for the zero inputs. Explicitly
return in this case, similarly like has been done in tanh.
|
|
|
|
| |
float arguments.
|
|
|
|
|
| |
x+x*x, as a result sign got lost for the input of -0. Explicitly
return negative zero in this case. Found by Cephes.
|
|
|
|
|
|
|
| |
database on platforms without extended-precision floating-point
support.
Seems like a reasonable approach to millert@.
|
| |
|
|
|
|
| |
- add nearbyint, nearbyintf and nearbyintl implemented using fenv
|
|
|
|
|
|
|
| |
volatile; a similar hack was already being used in lrintf().
This will make rint and {,l}lrint family functions actually work;
i.e. on m68k rintf(8.6F) was 8.625.
|
|
|
|
|
|
|
|
| |
therefore affected by the same bugs I've fixed a week ago.
The high part was being clipped for all exponents greater or equal
to 52. Fix this to use RESTYPE_BITS instead; also make the code
consistent.
|
| |
|
|
|
|
|
|
|
|
| |
Therefore, in nextafter() and nextafterf():
- if(x==y) return x; /* x=y, return x */
- if(x==y) return y; /* x=y, return y */
This matters for negative zero inputs of x or y.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
bits, because "behavior is implementation defined in this case".
However, this is wrong; behavior is undefined if the right operand
is greater than or equal to the width of the promoted left operand.
This broke {,l}lrint{,f} (64-bit architectures), and llrint{,f}
(32-bit architectures) where results are actually 64-bit values.
The high part was clipped for all exponents greater or equal to 52.
Fix this to use RESTYPE_BITS instead; {,l}lrint{,f} are now able
to pass our regression tests, and I think are right now.
|
| |
|
|
|
|
| |
we round towards -inf or +inf.
|
|
|
|
| |
ok millert@
|
|
|
|
|
|
| |
argument is a float. Eliminate a cast rendered superfluous as a result.
ok kettenis@, millert@
|
|
|
|
|
|
|
| |
unmaintainable). these days, people use source. these id's do not provide
any benefit, and do hurt the small install media
(the 33,000 line diff is essentially mechanical)
ok with the idea millert, ok dms
|
|
|
|
|
|
| |
is defined on all architectures.
ok jmc@ (man pages) and martynas@
|
|
|
|
|
|
|
|
| |
formats. which even for 80-bit & 128-bit long doubles is only 15
bits. therefore, scalbln, scalblnf, scalblnl are essentially the
same as scalbn, scalbnf, scalbnl with bounds checking so that
LONG_MIN..INT_MIN, and INT_MAX..LONG_MAX ranges properly raise
exceptions & yield correct values. looks good to millert@
|
|
|
|
|
|
| |
versions; spotted by kettenis@
while here also remove unused ldexp; it lives in libc
ok kettenis@, "looks good" millert@
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
important functions: acosl, asinl, atanl, atan2l, cosl,
sinl, tanl, exp2l, frexpl, ilogbl, ldexpl, logbl, scalbnl,
fabsl, hypotl, powl, sqrtl, rintl, copysignl, nanl, fdiml,
fmaxl, fminl. mostly taken from freebsd, needed alot of
changes to adapt. note, these are all c versions; and are
quite slow when architectures have, e.g. sqrt. assembly
versions will be added afterwards
- make them .weak/__weak_alias to the double precision
versions on other archs
- no need to have two finites. finite() and finitef() are
non-standard 3BSD obsolete versions of isfinite. remove
from libm. make them weak_alias in libc to __isfinite and
__isfinitef instead. similarly make 3BSD obsolete versions
of isinf, isinff, isnan, isnanf weak_aliases to C99's
__isinf, __isinff, __isnan, __isnanf
- remove unused infinity.c. the c library has infinities
for each supported platform
- use STRICT_ASSIGN cast hack for _kernel_rem_pio2, so that
the double version has a chance of working on i386 with
extra precision
- avoid storing multiple copies of the pi/2 array, since
it won't vary
- bump major due to removed finite/finitef. although they
will be in libc, which anything is linked to, minor bump
might be enough
ok millert@. tested by sthen@, jsg@, ajacoutot@, kili@, naddy@
|
| |
|
| |
|
|
|
|
|
| |
time we need them
ok millert@
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- provide proper dtoa locks
- use the real strtof implementation
- add strtold, __hdtoa, __hldtoa
- add %a/%A support
- don't lose precision in printf, don't round to double anymore
- implement extended-precision versions of libc functions: fpclassify,
isnan, isinf, signbit, isnormal, isfinite, now that the ieee.h is
fixed
- separate vax versions of strtof, and __hdtoa
- add complex math support. added functions: cacos, casin, catan,
ccos, csin, ctan, cacosh, casinh, catanh, ccosh, csinh, ctanh, cexp,
clog, cabs, cpow, csqrt, carg, cimag, conj, cproj, creal, cacosf,
casinf, catanf, ccosf, csinf, ctanf, cacoshf, casinhf, catanhf,
ccoshf, csinhf, ctanhf, cexpf, clogf, cabsf, cpowf, csqrtf, cargf,
cimagf, conjf, cprojf, crealf
- add fdim, fmax, fmin
- add log2. (adapted implementation e_log.c. could be more acruate
& faster, but it's good enough for now)
- remove wrappers & cruft in libm, supposed to work-around mistakes
in SVID, etc.; use ieee versions. fixes issues in python 2.6 for
djm@
- make _digittoint static
- proper definitions for i386, and amd64 in ieee.h
- sh, powerpc don't really have extended-precision
- add missing definitions for mips64 (quad), m{6,8}k (96-bit) float.h
for LDBL_*
- merge lead to frac for m{6,8}k, for gdtoa to work properly
- add FRAC*BITS & EXT_TO_ARRAY32 definitions in ieee.h, for hdtoa&ldtoa
to use
- add EXT_IMPLICIT_NBIT definition, which indicates implicit
normalization bit
- add regression tests for libc: fpclassify and printf
- arith.h & gd_qnan.h definitions
- update ieee.h: hppa doesn't have quad-precision, hppa64 does
- add missing prototypes to gdtoaimp
- on 64-bit platforms make sure gdtoa doesn't use a long when it
really wants an int
- etc., what i may have forgotten...
- bump libm major, due to removed&changed symbols
- no libc bump, since this is riding on djm's libc major crank from
a day ago
discussed with / requested by / testing theo, sthen@, djm@, jsg@,
merdely@, jsing@, tedu@, brad@, jakemsr@, and others.
looks good to millert@
parts of the diff ok kettenis@
this commit does not include:
- man page changes
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
- remove never-enabled signbit. libc has is now
- add C99 implementations, from freebsd, for nan(), nanf() (needed
to write _digittoint for it), exp2(), exp2f(), remquo(), remquof(),
needed STRICT_ASSIGN macro for math_private.h
- bump major
man pages will follow
exp2{,f} has been requested by chl@
ok millert@
|
| |
|
|
|
|
|
| |
s_lroundf.c s_llround.c s_llroundf.c, for naming consistency
looks fine to millert@
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
powf, the float version of it
> 1. e_pow.c incorrect results when
> x is very close to -1.0 and y is very large, e.g.
> pow(-1.0000000000000002e+00,4.5035996273704970e+15) = 0
> pow(-9.9999999999999978e-01,4.5035996273704970e+15) = 0
> Correct results are close to -e and -1/e.
while here merge more changes for pow, fixes sign in oflow/uflow
cases
ok millert@
|
|
|
|
|
|
|
|
| |
> 2. k_tan.c error was > 1 ulp target for FDLIBM
> 5.2: Worst error at least 1.45 ulp at
> tan(1.7765241907548024E+269) = 1.7733884462610958E+16
> 5.3: Worst error 0.96 ulp
ok millert@
|
|
|
|
| |
ok millert@
|
|
|
|
|
|
|
|
|
| |
ugly, when we have isnan and isinf
- no need to check for _IEEE, when checking for not-a-number
- remove some impossible checks
- while here, drem->remainder, as drem is just an obsolete alias
now
ok millert@
|
|
|
|
|
|
|
| |
- no support for National 32000, removing ns32000/national ifdefs maze
- remove tahoe defs
- ansify
looks fine to millert@; who also noticed rint removal
|
|
|
|
| |
ok millert@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- make gamma an alias of lgamma
- on ieee, add tgamma, based on gamma from non-ieee
- fixes for tgamma/lgamma/exp/log, esp. special cases (some from
freebsd); properly raise invalid fp operations on vax
- also some general cleanup, ansification, man page (which was ok
jmc@)
- bump minor
this makes some ports using tgamma possible; also consistifies
behavior across openbsd/ieee and openbsd/non-ieee, and other operating
systems
much thanks sthen@, johan@, steven@, Simon Kuhnle, Wiktor Izdebski
for testing
ok millert@
|
| |
|
| |
|
|
|
|
|
|
| |
s_lrint.c and s_lrintf.c, and add i387-specific assembler versions.
ok deraadt@, otto@
|
|
|
|
|
| |
By Steven G. Kargl <kargl at troutmask dot apl dot washington.edu>
From FreeBSD
|