ruby-fann 0.7.10 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/History.txt +6 -1
  2. data/License.txt +1 -1
  3. data/Manifest.txt +22 -1
  4. data/README.txt +0 -1
  5. data/Rakefile +0 -0
  6. data/config/hoe.rb +0 -0
  7. data/config/requirements.rb +0 -0
  8. data/ext/ruby_fann/MANIFEST +0 -0
  9. data/ext/ruby_fann/Makefile +36 -28
  10. data/ext/ruby_fann/doublefann.c +30 -0
  11. data/ext/ruby_fann/doublefann.h +33 -0
  12. data/ext/ruby_fann/extconf.rb +9 -5
  13. data/ext/ruby_fann/fann.c +1552 -0
  14. data/ext/ruby_fann/fann_activation.h +144 -0
  15. data/ext/ruby_fann/fann_augment.h +0 -0
  16. data/ext/ruby_fann/fann_cascade.c +1031 -0
  17. data/ext/ruby_fann/fann_cascade.h +503 -0
  18. data/ext/ruby_fann/fann_data.h +799 -0
  19. data/ext/ruby_fann/fann_error.c +204 -0
  20. data/ext/ruby_fann/fann_error.h +161 -0
  21. data/ext/ruby_fann/fann_internal.h +148 -0
  22. data/ext/ruby_fann/fann_io.c +762 -0
  23. data/ext/ruby_fann/fann_io.h +100 -0
  24. data/ext/ruby_fann/fann_train.c +962 -0
  25. data/ext/ruby_fann/fann_train.h +1203 -0
  26. data/ext/ruby_fann/fann_train_data.c +1231 -0
  27. data/ext/ruby_fann/neural_network.c +0 -0
  28. data/lib/ruby_fann/neurotica.rb +0 -0
  29. data/lib/ruby_fann/version.rb +3 -3
  30. data/lib/ruby_fann.rb +0 -0
  31. data/neurotica1.png +0 -0
  32. data/neurotica2.vrml +18 -18
  33. data/setup.rb +0 -0
  34. data/tasks/deployment.rake +0 -0
  35. data/tasks/environment.rake +0 -0
  36. data/tasks/website.rake +0 -0
  37. data/test/test.train +0 -0
  38. data/test/test_helper.rb +0 -0
  39. data/test/test_neurotica.rb +0 -0
  40. data/test/test_ruby_fann.rb +0 -0
  41. data/test/test_ruby_fann_functional.rb +0 -0
  42. data/verify.train +0 -0
  43. data/website/index.html +42 -92
  44. data/website/index.txt +0 -0
  45. data/website/javascripts/rounded_corners_lite.inc.js +0 -0
  46. data/website/stylesheets/screen.css +0 -0
  47. data/website/template.rhtml +0 -0
  48. data/xor.train +0 -0
  49. data/xor_cascade.net +2 -2
  50. data/xor_float.net +1 -1
  51. metadata +22 -6
  52. data/log/debug.log +0 -0
@@ -0,0 +1,204 @@
1
+ /*
2
+ Fast Artificial Neural Network Library (fann)
3
+ Copyright (C) 2003 Steffen Nissen (lukesky@diku.dk)
4
+
5
+ This library is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU Lesser General Public
7
+ License as published by the Free Software Foundation; either
8
+ version 2.1 of the License, or (at your option) any later version.
9
+
10
+ This library is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ Lesser General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Lesser General Public
16
+ License along with this library; if not, write to the Free Software
17
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
+ */
19
+
20
+ #include <stdio.h>
21
+ #include <stdlib.h>
22
+ #include <stdarg.h>
23
+ #include <string.h>
24
+
25
+ #include "config.h"
26
+ #include "fann.h"
27
+
28
+ #ifdef _MSC_VER
29
+ #define vsnprintf _vsnprintf
30
+ #define snprintf _snprintf
31
+ #endif
32
+
33
+ FILE * fann_default_error_log = (FILE *)-1;
34
+
35
+ /* resets the last error number
36
+ */
37
+ FANN_EXTERNAL void FANN_API fann_reset_errno(struct fann_error *errdat)
38
+ {
39
+ errdat->errno_f = FANN_E_NO_ERROR;
40
+ }
41
+
42
+ /* resets the last errstr
43
+ */
44
+ FANN_EXTERNAL void FANN_API fann_reset_errstr(struct fann_error *errdat)
45
+ {
46
+ if(errdat->errstr != NULL)
47
+ free(errdat->errstr);
48
+ errdat->errstr = NULL;
49
+ }
50
+
51
+ /* returns the last error number
52
+ */
53
+ FANN_EXTERNAL enum fann_errno_enum FANN_API fann_get_errno(struct fann_error *errdat)
54
+ {
55
+ return errdat->errno_f;
56
+ }
57
+
58
+ /* returns the last errstr
59
+ */
60
+ FANN_EXTERNAL char *FANN_API fann_get_errstr(struct fann_error *errdat)
61
+ {
62
+ char *errstr = errdat->errstr;
63
+
64
+ fann_reset_errno(errdat);
65
+ fann_reset_errstr(errdat);
66
+
67
+ return errstr;
68
+ }
69
+
70
+ /* change where errors are logged to
71
+ */
72
+ FANN_EXTERNAL void FANN_API fann_set_error_log(struct fann_error *errdat, FILE * log_file)
73
+ {
74
+ if(errdat == NULL)
75
+ fann_default_error_log = log_file;
76
+ else
77
+ errdat->error_log = log_file;
78
+ }
79
+
80
+ /* prints the last error to stderr
81
+ */
82
+ FANN_EXTERNAL void FANN_API fann_print_error(struct fann_error *errdat)
83
+ {
84
+ if(errdat->errno_f != FANN_E_NO_ERROR && errdat->errstr != NULL)
85
+ {
86
+ fprintf(stderr, "FANN Error %d: %s", errdat->errno_f, errdat->errstr);
87
+ }
88
+ }
89
+
90
+ /* INTERNAL FUNCTION
91
+ Populate the error information
92
+ */
93
+ void fann_error(struct fann_error *errdat, const enum fann_errno_enum errno_f, ...)
94
+ {
95
+ va_list ap;
96
+ char *errstr;
97
+ FILE * error_log = fann_default_error_log;
98
+
99
+ if(errdat != NULL)
100
+ errdat->errno_f = errno_f;
101
+
102
+ if(errdat != NULL && errdat->errstr != NULL)
103
+ {
104
+ errstr = errdat->errstr;
105
+ }
106
+ else
107
+ {
108
+ errstr = (char *) malloc(FANN_ERRSTR_MAX);
109
+ if(errstr == NULL)
110
+ {
111
+ fprintf(stderr, "Unable to allocate memory.\n");
112
+ return;
113
+ }
114
+ }
115
+
116
+ va_start(ap, errno_f);
117
+ switch (errno_f)
118
+ {
119
+ case FANN_E_NO_ERROR:
120
+ break;
121
+ case FANN_E_CANT_OPEN_CONFIG_R:
122
+ vsprintf(errstr, "Unable to open configuration file \"%s\" for reading.\n", ap);
123
+ break;
124
+ case FANN_E_CANT_OPEN_CONFIG_W:
125
+ vsprintf(errstr, "Unable to open configuration file \"%s\" for writing.\n", ap);
126
+ break;
127
+ case FANN_E_WRONG_CONFIG_VERSION:
128
+ vsprintf(errstr,
129
+ "Wrong version of configuration file, aborting read of configuration file \"%s\".\n",
130
+ ap);
131
+ break;
132
+ case FANN_E_CANT_READ_CONFIG:
133
+ vsprintf(errstr, "Error reading \"%s\" from configuration file \"%s\".\n", ap);
134
+ break;
135
+ case FANN_E_CANT_READ_NEURON:
136
+ vsprintf(errstr, "Error reading neuron info from configuration file \"%s\".\n", ap);
137
+ break;
138
+ case FANN_E_CANT_READ_CONNECTIONS:
139
+ vsprintf(errstr, "Error reading connections from configuration file \"%s\".\n", ap);
140
+ break;
141
+ case FANN_E_WRONG_NUM_CONNECTIONS:
142
+ vsprintf(errstr, "ERROR connections_so_far=%d, total_connections=%d\n", ap);
143
+ break;
144
+ case FANN_E_CANT_OPEN_TD_W:
145
+ vsprintf(errstr, "Unable to open train data file \"%s\" for writing.\n", ap);
146
+ break;
147
+ case FANN_E_CANT_OPEN_TD_R:
148
+ vsprintf(errstr, "Unable to open train data file \"%s\" for writing.\n", ap);
149
+ break;
150
+ case FANN_E_CANT_READ_TD:
151
+ vsprintf(errstr, "Error reading info from train data file \"%s\", line: %d.\n", ap);
152
+ break;
153
+ case FANN_E_CANT_ALLOCATE_MEM:
154
+ sprintf(errstr, "Unable to allocate memory.\n");
155
+ break;
156
+ case FANN_E_CANT_TRAIN_ACTIVATION:
157
+ sprintf(errstr, "Unable to train with the selected activation function.\n");
158
+ break;
159
+ case FANN_E_CANT_USE_ACTIVATION:
160
+ sprintf(errstr, "Unable to use the selected activation function.\n");
161
+ break;
162
+ case FANN_E_TRAIN_DATA_MISMATCH:
163
+ sprintf(errstr, "Training data must be of equivalent structure.\n");
164
+ break;
165
+ case FANN_E_CANT_USE_TRAIN_ALG:
166
+ sprintf(errstr, "Unable to use the selected training algorithm.\n");
167
+ break;
168
+ case FANN_E_TRAIN_DATA_SUBSET:
169
+ vsprintf(errstr, "Subset from %d of length %d not valid in training set of length %d.\n", ap);
170
+ break;
171
+ case FANN_E_INDEX_OUT_OF_BOUND:
172
+ vsprintf(errstr, "Index %d is out of bound.\n", ap);
173
+ break;
174
+ case FANN_E_SCALE_NOT_PRESENT:
175
+ sprintf(errstr, "Scaling parameters not present.\n");
176
+ break;
177
+ }
178
+ va_end(ap);
179
+
180
+ if(errdat != NULL)
181
+ {
182
+ errdat->errstr = errstr;
183
+ error_log = errdat->error_log;
184
+ }
185
+
186
+ if(error_log == (FILE *)-1) /* This is the default behavior and will give stderr */
187
+ {
188
+ fprintf(stderr, "FANN Error %d: %s", errno_f, errstr);
189
+ }
190
+ else if(error_log != NULL)
191
+ {
192
+ fprintf(error_log, "FANN Error %d: %s", errno_f, errstr);
193
+ }
194
+ }
195
+
196
+ /* INTERNAL FUNCTION
197
+ Initialize an error data strcuture
198
+ */
199
+ void fann_init_error_data(struct fann_error *errdat)
200
+ {
201
+ errdat->errstr = NULL;
202
+ errdat->errno_f = FANN_E_NO_ERROR;
203
+ errdat->error_log = fann_default_error_log;
204
+ }
@@ -0,0 +1,161 @@
1
+ /*
2
+ Fast Artificial Neural Network Library (fann)
3
+ Copyright (C) 2003 Steffen Nissen (lukesky@diku.dk)
4
+
5
+ This library is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU Lesser General Public
7
+ License as published by the Free Software Foundation; either
8
+ version 2.1 of the License, or (at your option) any later version.
9
+
10
+ This library is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ Lesser General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Lesser General Public
16
+ License along with this library; if not, write to the Free Software
17
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
+ */
19
+
20
+ #ifndef __fann_error_h__
21
+ #define __fann_error_h__
22
+
23
+ #include <stdio.h>
24
+
25
+ #define FANN_ERRSTR_MAX 128
26
+ struct fann_error;
27
+
28
+ /* Section: FANN Error Handling
29
+
30
+ Errors from the fann library are usually reported on stderr.
31
+ It is however possible to redirect these error messages to a file,
32
+ or completely ignore them by the <fann_set_error_log> function.
33
+
34
+ It is also possible to inspect the last error message by using the
35
+ <fann_get_errno> and <fann_get_errstr> functions.
36
+ */
37
+
38
+ /* Enum: fann_errno_enum
39
+ Used to define error events on <struct fann> and <struct fann_train_data>.
40
+
41
+ See also:
42
+ <fann_get_errno>, <fann_reset_errno>, <fann_get_errstr>
43
+
44
+ FANN_E_NO_ERROR - No error
45
+ FANN_E_CANT_OPEN_CONFIG_R - Unable to open configuration file for reading
46
+ FANN_E_CANT_OPEN_CONFIG_W - Unable to open configuration file for writing
47
+ FANN_E_WRONG_CONFIG_VERSION - Wrong version of configuration file
48
+ FANN_E_CANT_READ_CONFIG - Error reading info from configuration file
49
+ FANN_E_CANT_READ_NEURON - Error reading neuron info from configuration file
50
+ FANN_E_CANT_READ_CONNECTIONS - Error reading connections from configuration file
51
+ FANN_E_WRONG_NUM_CONNECTIONS - Number of connections not equal to the number expected
52
+ FANN_E_CANT_OPEN_TD_W - Unable to open train data file for writing
53
+ FANN_E_CANT_OPEN_TD_R - Unable to open train data file for reading
54
+ FANN_E_CANT_READ_TD - Error reading training data from file
55
+ FANN_E_CANT_ALLOCATE_MEM - Unable to allocate memory
56
+ FANN_E_CANT_TRAIN_ACTIVATION - Unable to train with the selected activation function
57
+ FANN_E_CANT_USE_ACTIVATION - Unable to use the selected activation function
58
+ FANN_E_TRAIN_DATA_MISMATCH - Irreconcilable differences between two <struct fann_train_data> structures
59
+ FANN_E_CANT_USE_TRAIN_ALG - Unable to use the selected training algorithm
60
+ FANN_E_TRAIN_DATA_SUBSET - Trying to take subset which is not within the training set
61
+ FANN_E_INDEX_OUT_OF_BOUND - Index is out of bound
62
+ FANN_E_SCALE_NOT_PRESENT - Scaling parameters not present
63
+ */
64
+ enum fann_errno_enum
65
+ {
66
+ FANN_E_NO_ERROR = 0,
67
+ FANN_E_CANT_OPEN_CONFIG_R,
68
+ FANN_E_CANT_OPEN_CONFIG_W,
69
+ FANN_E_WRONG_CONFIG_VERSION,
70
+ FANN_E_CANT_READ_CONFIG,
71
+ FANN_E_CANT_READ_NEURON,
72
+ FANN_E_CANT_READ_CONNECTIONS,
73
+ FANN_E_WRONG_NUM_CONNECTIONS,
74
+ FANN_E_CANT_OPEN_TD_W,
75
+ FANN_E_CANT_OPEN_TD_R,
76
+ FANN_E_CANT_READ_TD,
77
+ FANN_E_CANT_ALLOCATE_MEM,
78
+ FANN_E_CANT_TRAIN_ACTIVATION,
79
+ FANN_E_CANT_USE_ACTIVATION,
80
+ FANN_E_TRAIN_DATA_MISMATCH,
81
+ FANN_E_CANT_USE_TRAIN_ALG,
82
+ FANN_E_TRAIN_DATA_SUBSET,
83
+ FANN_E_INDEX_OUT_OF_BOUND,
84
+ FANN_E_SCALE_NOT_PRESENT
85
+ };
86
+
87
+ /* Group: Error Handling */
88
+
89
+ /* Function: fann_set_error_log
90
+
91
+ Change where errors are logged to. Both <struct fann> and <struct fann_data> can be
92
+ casted to <struct fann_error>, so this function can be used to set either of these.
93
+
94
+ If log_file is NULL, no errors will be printed.
95
+
96
+ If errdata is NULL, the default log will be set. The default log is the log used when creating
97
+ <struct fann> and <struct fann_data>. This default log will also be the default for all new structs
98
+ that are created.
99
+
100
+ The default behavior is to log them to stderr.
101
+
102
+ See also:
103
+ <struct fann_error>
104
+
105
+ This function appears in FANN >= 1.1.0.
106
+ */
107
+ FANN_EXTERNAL void FANN_API fann_set_error_log(struct fann_error *errdat, FILE * log_file);
108
+
109
+
110
+ /* Function: fann_get_errno
111
+
112
+ Returns the last error number.
113
+
114
+ See also:
115
+ <fann_errno_enum>, <fann_reset_errno>
116
+
117
+ This function appears in FANN >= 1.1.0.
118
+ */
119
+ FANN_EXTERNAL enum fann_errno_enum FANN_API fann_get_errno(struct fann_error *errdat);
120
+
121
+
122
+ /* Function: fann_reset_errno
123
+
124
+ Resets the last error number.
125
+
126
+ This function appears in FANN >= 1.1.0.
127
+ */
128
+ FANN_EXTERNAL void FANN_API fann_reset_errno(struct fann_error *errdat);
129
+
130
+
131
+ /* Function: fann_reset_errstr
132
+
133
+ Resets the last error string.
134
+
135
+ This function appears in FANN >= 1.1.0.
136
+ */
137
+ FANN_EXTERNAL void FANN_API fann_reset_errstr(struct fann_error *errdat);
138
+
139
+
140
+ /* Function: fann_get_errstr
141
+
142
+ Returns the last errstr.
143
+
144
+ This function calls <fann_reset_errno> and <fann_reset_errstr>
145
+
146
+ This function appears in FANN >= 1.1.0.
147
+ */
148
+ FANN_EXTERNAL char *FANN_API fann_get_errstr(struct fann_error *errdat);
149
+
150
+
151
+ /* Function: fann_print_error
152
+
153
+ Prints the last error to stderr.
154
+
155
+ This function appears in FANN >= 1.1.0.
156
+ */
157
+ FANN_EXTERNAL void FANN_API fann_print_error(struct fann_error *errdat);
158
+
159
+ extern FILE * fann_default_error_log;
160
+
161
+ #endif
@@ -0,0 +1,148 @@
1
+ /*
2
+ Fast Artificial Neural Network Library (fann)
3
+ Copyright (C) 2003 Steffen Nissen (lukesky@diku.dk)
4
+
5
+ This library is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU Lesser General Public
7
+ License as published by the Free Software Foundation; either
8
+ version 2.1 of the License, or (at your option) any later version.
9
+
10
+ This library is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ Lesser General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Lesser General Public
16
+ License along with this library; if not, write to the Free Software
17
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
+ */
19
+
20
+ #ifndef __fann_internal_h__
21
+ #define __fann_internal_h__
22
+ /* internal include file, not to be included directly
23
+ */
24
+
25
+ #include <math.h>
26
+ #include <stdio.h>
27
+ #include <stdlib.h>
28
+ #include "fann_data.h"
29
+
30
+ #define FANN_FIX_VERSION "FANN_FIX_2.0"
31
+ #define FANN_FLO_VERSION "FANN_FLO_2.1"
32
+
33
+ #ifdef FIXEDFANN
34
+ #define FANN_CONF_VERSION FANN_FIX_VERSION
35
+ #else
36
+ #define FANN_CONF_VERSION FANN_FLO_VERSION
37
+ #endif
38
+
39
+ #define FANN_GET(type, name) \
40
+ FANN_EXTERNAL type FANN_API fann_get_ ## name(struct fann *ann) \
41
+ { \
42
+ return ann->name; \
43
+ }
44
+
45
+ #define FANN_SET(type, name) \
46
+ FANN_EXTERNAL void FANN_API fann_set_ ## name(struct fann *ann, type value) \
47
+ { \
48
+ ann->name = value; \
49
+ }
50
+
51
+ #define FANN_GET_SET(type, name) \
52
+ FANN_GET(type, name) \
53
+ FANN_SET(type, name)
54
+
55
+
56
+ struct fann_train_data;
57
+
58
+ struct fann *fann_allocate_structure(unsigned int num_layers);
59
+ void fann_allocate_neurons(struct fann *ann);
60
+
61
+ void fann_allocate_connections(struct fann *ann);
62
+
63
+ int fann_save_internal(struct fann *ann, const char *configuration_file,
64
+ unsigned int save_as_fixed);
65
+ int fann_save_internal_fd(struct fann *ann, FILE * conf, const char *configuration_file,
66
+ unsigned int save_as_fixed);
67
+ int fann_save_train_internal(struct fann_train_data *data, const char *filename,
68
+ unsigned int save_as_fixed, unsigned int decimal_point);
69
+ int fann_save_train_internal_fd(struct fann_train_data *data, FILE * file, const char *filename,
70
+ unsigned int save_as_fixed, unsigned int decimal_point);
71
+
72
+ void fann_update_stepwise(struct fann *ann);
73
+ void fann_seed_rand();
74
+
75
+ void fann_error(struct fann_error *errdat, const enum fann_errno_enum errno_f, ...);
76
+ void fann_init_error_data(struct fann_error *errdat);
77
+
78
+ struct fann *fann_create_from_fd(FILE * conf, const char *configuration_file);
79
+ struct fann_train_data *fann_read_train_from_fd(FILE * file, const char *filename);
80
+
81
+ void fann_compute_MSE(struct fann *ann, fann_type * desired_output);
82
+ void fann_update_output_weights(struct fann *ann);
83
+ void fann_backpropagate_MSE(struct fann *ann);
84
+ void fann_update_weights(struct fann *ann);
85
+ void fann_update_slopes_batch(struct fann *ann, struct fann_layer *layer_begin,
86
+ struct fann_layer *layer_end);
87
+ void fann_update_weights_quickprop(struct fann *ann, unsigned int num_data,
88
+ unsigned int first_weight, unsigned int past_end);
89
+ void fann_update_weights_batch(struct fann *ann, unsigned int num_data, unsigned int first_weight,
90
+ unsigned int past_end);
91
+ void fann_update_weights_irpropm(struct fann *ann, unsigned int first_weight,
92
+ unsigned int past_end);
93
+
94
+ void fann_clear_train_arrays(struct fann *ann);
95
+
96
+ fann_type fann_activation(struct fann * ann, unsigned int activation_function, fann_type steepness,
97
+ fann_type value);
98
+
99
+ fann_type fann_activation_derived(unsigned int activation_function,
100
+ fann_type steepness, fann_type value, fann_type sum);
101
+
102
+ int fann_desired_error_reached(struct fann *ann, float desired_error);
103
+
104
+ /* Some functions for cascade */
105
+ int fann_train_outputs(struct fann *ann, struct fann_train_data *data, float desired_error);
106
+
107
+ float fann_train_outputs_epoch(struct fann *ann, struct fann_train_data *data);
108
+
109
+ int fann_train_candidates(struct fann *ann, struct fann_train_data *data);
110
+
111
+ fann_type fann_train_candidates_epoch(struct fann *ann, struct fann_train_data *data);
112
+
113
+ void fann_install_candidate(struct fann *ann);
114
+
115
+ int fann_initialize_candidates(struct fann *ann);
116
+
117
+ void fann_set_shortcut_connections(struct fann *ann);
118
+
119
+ int fann_allocate_scale(struct fann *ann);
120
+
121
+ /* called fann_max, in order to not interferre with predefined versions of max */
122
+ #define fann_max(x, y) (((x) > (y)) ? (x) : (y))
123
+ #define fann_min(x, y) (((x) < (y)) ? (x) : (y))
124
+ #define fann_safe_free(x) {if(x) { free(x); x = NULL; }}
125
+ #define fann_clip(x, lo, hi) (((x) < (lo)) ? (lo) : (((x) > (hi)) ? (hi) : (x)))
126
+ /*#define fann_clip(x, lo, hi) (x)*/
127
+
128
+ #define fann_rand(min_value, max_value) (((float)(min_value))+(((float)(max_value)-((float)(min_value)))*rand()/(RAND_MAX+1.0f)))
129
+
130
+ #define fann_abs(value) (((value) > 0) ? (value) : -(value))
131
+
132
+ #ifdef FIXEDFANN
133
+
134
+ #define fann_mult(x,y) ((x*y) >> decimal_point)
135
+ #define fann_div(x,y) (((x) << decimal_point)/y)
136
+ #define fann_random_weight() (fann_type)(fann_rand(0,multiplier/10))
137
+ #define fann_random_bias_weight() (fann_type)(fann_rand((0-multiplier)/10,multiplier/10))
138
+
139
+ #else
140
+
141
+ #define fann_mult(x,y) (x*y)
142
+ #define fann_div(x,y) (x/y)
143
+ #define fann_random_weight() (fann_rand(-0.1f,0.1f))
144
+ #define fann_random_bias_weight() (fann_rand(-0.1f,0.1f))
145
+
146
+ #endif
147
+
148
+ #endif