[all-commits] [llvm/llvm-project] 15b938: [libc] Change sinf range reduction to mod pi/16 to...
lntue via All-commits
all-commits at lists.llvm.org
Wed Jul 27 09:24:03 PDT 2022
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 15b9380dfd4e5e9d5c47f2627394623c64dc61e8
https://github.com/llvm/llvm-project/commit/15b9380dfd4e5e9d5c47f2627394623c64dc61e8
Author: Tue Ly <lntue at google.com>
Date: 2022-07-27 (Wed, 27 Jul 2022)
Changed paths:
M libc/docs/math.rst
M libc/src/math/generic/CMakeLists.txt
M libc/src/math/generic/common_constants.cpp
M libc/src/math/generic/common_constants.h
M libc/src/math/generic/range_reduction.h
M libc/src/math/generic/range_reduction_fma.h
M libc/src/math/generic/sinf.cpp
M utils/bazel/llvm-project-overlay/libc/BUILD.bazel
Log Message:
-----------
[libc] Change sinf range reduction to mod pi/16 to be shared with cosf.
Change `sinf` range reduction to mod pi/16 to be shared with `cosf`.
Previously, `sinf` used range reduction `mod pi`, but this cannot be used to implement `cosf` since the minimax algorithm for `cosf` does not converge due to critical points at `pi/2`. In order to be able to share the same range reduction functions for both `sinf` and `cosf`, we change the range reduction to `mod pi/16` for the following reasons:
- The table size is sufficiently small: 32 entries for `sin(k * pi/16)` with `k = 0..31`. It could be reduced to 16 entries if we treat the final sign separately, with an extra multiplication at the end.
- The polynomials' degrees are reduced to 7/8 from 15, with extra computations to combine `sin` and `cos` with trig sum equality.
- The number of exceptional cases reduced to 2 (with FMA) and 3 (without FMA).
- The latency is reduced while maintaining similar throughput as before.
Reviewed By: zimmermann6
Differential Revision: https://reviews.llvm.org/D130629
More information about the All-commits
mailing list