]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - lib/msun/src/polevll.c
Stop writing past the end of the buffer in the msgget_limit test. The value
[FreeBSD/FreeBSD.git] / lib / msun / src / polevll.c
1 /*-
2  * Copyright (c) 2008 Stephen L. Moshier <steve@moshier.net>
3  *
4  * Permission to use, copy, modify, and distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16
17 /*                                                      polevll.c
18  *                                                      p1evll.c
19  *
20  *      Evaluate polynomial
21  *
22  *
23  *
24  * SYNOPSIS:
25  *
26  * int N;
27  * long double x, y, coef[N+1], polevl[];
28  *
29  * y = polevll( x, coef, N );
30  *
31  *
32  *
33  * DESCRIPTION:
34  *
35  * Evaluates polynomial of degree N:
36  *
37  *                     2          N
38  * y  =  C  + C x + C x  +...+ C x
39  *        0    1     2          N
40  *
41  * Coefficients are stored in reverse order:
42  *
43  * coef[0] = C  , ..., coef[N] = C  .
44  *            N                   0
45  *
46  *  The function p1evll() assumes that coef[N] = 1.0 and is
47  * omitted from the array.  Its calling arguments are
48  * otherwise the same as polevll().
49  *
50  *
51  * SPEED:
52  *
53  * In the interest of speed, there are no checks for out
54  * of bounds arithmetic.  This routine is used by most of
55  * the functions in the library.  Depending on available
56  * equipment features, the user may wish to rewrite the
57  * program in microcode or assembly language.
58  *
59  */
60
61 #include <sys/cdefs.h>
62 __FBSDID("$FreeBSD$");
63
64 #include <math.h>
65
66 #include "math_private.h"
67
68 /*
69  * Polynomial evaluator:
70  *  P[0] x^n  +  P[1] x^(n-1)  +  ...  +  P[n]
71  */
72 long double
73 __polevll(long double x, void *PP, int n)
74 {
75         long double y;
76         long double *P;
77
78         P = (long double *)PP;
79         y = *P++;
80         do {
81                 y = y * x + *P++;
82         } while (--n);
83
84         return (y);
85 }
86
87 /*
88  * Polynomial evaluator:
89  *  x^n  +  P[0] x^(n-1)  +  P[1] x^(n-2)  +  ...  +  P[n]
90  */
91 long double
92 __p1evll(long double x, void *PP, int n)
93 {
94         long double y;
95         long double *P;
96
97         P = (long double *)PP;
98         n -= 1;
99         y = x + *P++;
100         do {
101                 y = y * x + *P++;
102         } while (--n);
103
104         return (y);
105 }