1 /*****************************************************************************
3 *****************************************************************************
4 * Copyright (C) 2004 the VideoLAN team
7 * Authors: Cyril Deguet <asmax@videolan.org>
8 * code from projectM http://xmms-projectm.sourceforge.net
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
23 *****************************************************************************/
28 /* Values to optimize the sigmoid function */
32 inline double int_wrapper(double * arg_list) {
34 return floor(arg_list[0]);
39 inline double sqr_wrapper(double * arg_list) {
41 return pow(2, arg_list[0]);
45 inline double sign_wrapper(double * arg_list) {
50 inline double min_wrapper(double * arg_list) {
52 if (arg_list[0] > arg_list[1])
58 inline double max_wrapper(double * arg_list) {
60 if (arg_list[0] > arg_list[1])
66 /* consult your AI book */
67 inline double sigmoid_wrapper(double * arg_list) {
68 return (RR / (1 + exp( -(((double)(arg_list[0])) * arg_list[1]) / R) - R));
72 inline double bor_wrapper(double * arg_list) {
74 return (double)((int)arg_list[0] || (int)arg_list[1]);
77 inline double band_wrapper(double * arg_list) {
78 return (double)((int)arg_list[0] && (int)arg_list[1]);
81 inline double bnot_wrapper(double * arg_list) {
82 return (double)(!(int)arg_list[0]);
85 inline double if_wrapper(double * arg_list) {
87 if ((int)arg_list[0] == 0)
93 inline double rand_wrapper(double * arg_list) {
96 // printf("RAND ARG:(%d)\n", (int)arg_list[0]);
97 l = (double)((rand()) % ((int)arg_list[0]));
98 //printf("VAL: %f\n", l);
102 inline double equal_wrapper(double * arg_list) {
104 return (arg_list[0] == arg_list[1]);
108 inline double above_wrapper(double * arg_list) {
110 return (arg_list[0] > arg_list[1]);
114 inline double below_wrapper(double * arg_list) {
116 return (arg_list[0] < arg_list[1]);
119 inline double sin_wrapper(double * arg_list) {
120 return (sin (arg_list[0]));
124 inline double cos_wrapper(double * arg_list) {
125 return (cos (arg_list[0]));
128 inline double tan_wrapper(double * arg_list) {
129 return (tan(arg_list[0]));
132 inline double asin_wrapper(double * arg_list) {
133 return (asin (arg_list[0]));
136 inline double acos_wrapper(double * arg_list) {
137 return (acos (arg_list[0]));
140 inline double atan_wrapper(double * arg_list) {
141 return (atan (arg_list[0]));
144 inline double atan2_wrapper(double * arg_list) {
145 return (atan2 (arg_list[0], arg_list[1]));
148 inline double pow_wrapper(double * arg_list) {
149 return (pow (arg_list[0], arg_list[1]));
152 inline double exp_wrapper(double * arg_list) {
153 return (exp(arg_list[0]));
156 inline double abs_wrapper(double * arg_list) {
157 return (fabs(arg_list[0]));
160 inline double log_wrapper(double *arg_list) {
161 return (log (arg_list[0]));
164 inline double log10_wrapper(double * arg_list) {
165 return (log10 (arg_list[0]));
168 inline double sqrt_wrapper(double * arg_list) {
169 return (sqrt (arg_list[0]));
173 inline double nchoosek_wrapper(double * arg_list) {
174 unsigned long cnm = 1UL;
178 n = (int)arg_list[0];
179 m = (int)arg_list[1];
182 for (i=1 ; i <= m; n--, i++)
193 inline double fact_wrapper(double * arg_list) {
198 int n = (int)arg_list[0];
204 return (double)result;