| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
|
|
|
|
|
|
|
| |
the function bodies require only 2 to 10 instructions. However, it
leads to application binaries that refer to a private ABI, namely, the
softfloat innards in libc. This could complicate future changes in
the implementation of the floating-point emulation layer, so it seems
best to have programs refer to the official fe* entry points in libm.
|
|
|
|
|
|
|
| |
use softfloat.
Thanks to Ian Lepore for testing and debugging this patch. The fenv
regression tests pass (at least for Ian's arm chip) with this change.
|
| |
|
|
|
|
|
|
|
| |
C++'s <cmath> to work without the compiler complaining that the C++ versions are calling implicitly-declared functions. You will still get a linker error when they are called. OpenBSD 5.0 claims to fully implement the C99 <math.h> stuff, so might be worth investigating...
Reviewed by: das
Approved by: dim (mentor)
|
| |
|
|
|
|
|
| |
exactly cancels with z, return the low part of x*y instead of
discarding it.
|
| |
|
|
|
|
|
|
|
|
|
| |
- Handle cases where exp(x) would overflow, but ccosh(x) ~= exp(x) / 2
shouldn't.
- Use the ccosh(x) ~= exp(x) / 2 approximation to simplify the calculation
when x is large.
Similarly for csinh(). Also fixed the return value of csinh(-Inf +- 0i).
|
|
|
|
| |
the overflow threshold.
|
|
|
|
|
|
|
|
|
|
|
| |
exp(x) scaled down by some factor, and the challenge is doing this
accurately when exp(x) would overflow. This change replaces all of
the tricks we've been using with common __ldexp_exp() and
__ldexp_cexp() routines that handle all the scaling.
bde plans to improve on this further by moving the guts of exp() into
k_exp.c and handling the scaling in a more direct manner. But the
current approach is simple and adequate for now.
|
|
|
|
|
|
| |
up by storing x in a wider type than it's supposed to.
Submitted by: bde
|
|
|
|
| |
MFC after: 2 weeks
|
|
|
|
|
|
| |
old exception mask, not mask | ~FE_ALL_EXCEPT.
MFC after: 2 weeks
|
|
|
|
|
|
| |
library," since complex.h, tgmath.h, and fenv.h are also part of the
math library. Replace the outdated sentence with some references to
the other parts.
|
|
|
|
| |
bde and kargl.
|
|
|
|
|
|
|
|
| |
- change "the the" to "the"
Approved by: lstewart
Approved by: sahil (mentor)
MFC after: 3 days
|
|
|
|
|
|
| |
more convenient to compile the math library by itself.
Requested by: bde
|
| |
|
|
|
|
|
|
| |
common, e.g., in DFT implementations.
Discussed with: bde, kargl
|
|
|
|
| |
math_private.h, so they can be used elsewhere in the math library.
|
| |
|
|
|
|
| |
Obtained from: DragonFlyBSD
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Rename __kernel_log() to k_log1p().
- Move some of the work that was previously done in the kernel log into
the callers. This enables further refactoring to improve accuracy or
speed, although I don't recall the details.
- Use extra precision when adding the final scaling term, which improves
accuracy.
- Describe and work around compiler problems that break some of the
multiprecision calculations.
A fix for a small bug is also included:
- Add a special case for log*(1). This is needed to ensure that log*(1) == +0
instead of -0, even when the rounding mode is FE_DOWNWARD.
Submitted by: bde
|
|
|
|
| |
Submitted by: bde
|
|
|
|
|
|
| |
no longer "fast" on sparc64. (It really wasn't to begin with, since
the old implementation was using long doubles, and long doubles are
emulated in software on sparc64.)
|
| |
|
|
|
|
| |
for noticing this.
|
|
|
|
|
|
|
|
|
|
| |
round-to-nearest mode when the result, rounded to twice machine
precision, was exactly halfway between two machine-precision
values. The essence of the fix is to simulate a "sticky bit" in
the pathological cases, which is how hardware implementations
break the ties.
MFC after: 1 month
|
|
|
|
|
| |
extra-precision add and multiply operations. This simplifies future
work but shouldn't result in any functional change.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
fenv.h that are currently inlined.
The definitions are provided in fenv.c via 'extern inline'
declaractions. This assumes the compiler handles 'extern inline' as
specified in C99, which has been true under FreeBSD since 8.0.
The goal is to eventually remove the 'static' keyword from the inline
definitions in fenv.h, so that non-inlined references all wind up
pointing to the same external definition like they're supposed to.
I am deferring the second step to provide a window where
newly-compiled apps will still link against old math libraries.
(This isn't supported, but there's no need to cause undue breakage.)
Reviewed by: stefanf, bde
|
|
|
|
|
|
|
|
| |
be used uninitialized. This can lead to spurious exceptions
and bit clobbering.
Submitted by: bde
Approved by: das (mentor)
|
|
|
|
| |
Approved by: philip (mentor)
|
|
|
|
|
| |
Reviewed by: das
Approved by: das (mentor)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
on i386-class hardware for sinl and cosl. The hand-rolled argument
reduction have been replaced by e_rem_pio2l() implementations. To
preserve history the following commands have been executed:
svn cp src/e_rem_pio2.c ld80/e_rem_pio2l.h
mv ${HOME}/bde/ld80/e_rem_pio2l.c ld80/e_rem_pio2l.h
svn cp src/e_rem_pio2.c ld128/e_rem_pio2l.h
mv ${HOME}/bde/ld128/e_rem_pio2l.c ld128/e_rem_pio2l.h
The ld80 version has been tested by bde, das, and kargl over the
last few years (bde, das) and few months (kargl). An older ld128
version was tested by das. The committed version has only been
compiled tested via 'make universe'.
Approved by: das (mentor)
Obtained from: bde
|
|
|
|
|
|
|
|
|
|
|
| |
with r219571 and re-enable building of cbrtl.
Implement the long double version for the cube root function, cbrtl.
The algorithm uses Newton's iterations with a crude estimate of the
cube root to converge to a result.
Reviewed by: bde
Approved by: das
|
|
|
|
|
|
|
| |
can determine why svn will not allow one to commit
a new file.
Approved by: das (implicit)
|
|
|
|
|
|
|
|
| |
The algorithm uses Newton's iterations with a crude estimate of the
cube root to converge to a result.
Reviewed by: bde
Approved by: das
|
|
|
|
| |
that I missed this.
|
| |
|
| |
|
| |
|
|
|
|
| |
Reviewed by: bde (earlier version)
|
|
|
|
|
|
| |
PR: bin/154928
Submitted by: Eitan Adler <lists at eitanadler.com>
MFC after: 3 days
|
|
|
|
|
|
|
| |
complex arithmetic in libm.
Reviewed by: David Schultz <das@FreeBSD.org>
MFC after: 2 weeks
|
|
|
|
|
|
|
| |
This bug results in a type mismatch that happens to be harmless
because of the way SET_FLOAT_WORD() works.
Submitted by: bde
|
|
|
|
|
|
|
| |
This bug results in a type mismatch that happens to be harmless
because of the way INSERT_WORDS() works.
Submitted by: bde
|
|
|
|
|
|
|
| |
e.g. cos(small) = 1, sin(small) = small. This commit tightens
the thresholds at which the simple approximations are used.
Reviewed by: bde
|
|
|
|
|
|
|
| |
This commit should have no effect on correctness; it merely changes the
threshold at which a simpler approximation can be used.
Reviewed by: bde
|