3 * @copy 2012 MinGW.org project
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice (including the next
13 * paragraph) shall be included in all copies or substantial portions of the
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
28 /* acosh(x) = log (x + sqrt(x * x - 1)) */
29 long double acoshl (long double x)
40 /* Avoid overflow (and unnecessary calculation when
41 sqrt (x * x - 1) == x).
42 The M_LN2 define doesn't have enough precison for
43 long double so use this one. GCC optimizes by replacing
44 the const with a fldln2 insn. */
45 return __fast_logl (x) + 6.9314718055994530941723E-1L;
47 /* Since x >= 1, the arg to log will always be greater than
48 the fyl2xp1 limit (approx 0.29) so just use logl. */
49 return __fast_logl (x + __fast_sqrtl((x + 1.0L) * (x - 1.0L)));