ext/neuro.c in neuro-0.4.1 vs ext/neuro.c in neuro-0.4.2

- old
+ new

@@ -22,11 +22,11 @@ static ID id_to_f, id_class, id_name; /* Infrastructure */ typedef struct NodeStruct { - int number_weights; + long number_weights; double *weights; double output; } Node; typedef struct NetworkStruct { @@ -44,14 +44,14 @@ double *tmp_output; } Network; /* Node methods */ -static Node *Node_create(int weights) +static Node *Node_create(long weights) { Node *node; - int i; + long i; assert(weights > 0); node = ALLOC(Node); MEMZERO(node, Node, 1); node->weights = ALLOC_N(double, weights); node->number_weights = weights; @@ -61,21 +61,21 @@ return node; } static Node *Node_from_hash(VALUE hash) { + long i, len; Node *node; VALUE weights = rb_hash_aref(hash, SYM("weights")); VALUE output = rb_hash_aref(hash, SYM("output")); - int i, len; Check_Type(output, T_FLOAT); Check_Type(weights, T_ARRAY); - len = RARRAY(weights)->len; + len = RARRAY_LEN(weights); node = Node_create(len); - node->output = RFLOAT(output)->value; + node->output = RFLOAT_VALUE(output); for (i = 0; i < len; i++) - node->weights[i] = RFLOAT(rb_ary_entry(weights, i))->value; + node->weights[i] = RFLOAT_VALUE(rb_ary_entry(weights, i)); return node; } static void Node_destroy(Node *node) { @@ -86,11 +86,11 @@ } static VALUE Node_to_hash(Node *node) { VALUE result = rb_hash_new(), weights = rb_ary_new2(node->number_weights); - int i; + long i; rb_hash_aset(result, SYM("output"), rb_float_new(node->output)); for (i = 0; i < node->number_weights; i++) rb_ary_store(weights, i, rb_float_new(node->weights[i])); rb_hash_aset(result, SYM("weights"), weights); return result; @@ -136,11 +136,11 @@ network->hidden_layer[i] = Node_create(network->input_size); for (i = 0; i < network->output_size; i++) network->output_layer[i] = Node_create(network->hidden_size); } -static void Network_debug_error(Network *network, int count, float error, float +static void Network_debug_error(Network *network, long count, double error, double max_error) { VALUE argv[5]; int argc = 5; if (!NIL_P(network->debug)) { @@ -190,14 +190,14 @@ static void transform_data(double *data_vector, VALUE data) { int i; VALUE current; - for (i = 0; i < RARRAY(data)->len; i++) { + for (i = 0; i < RARRAY_LEN(data); i++) { current = rb_ary_entry(data, i); CAST2FLOAT(current); - data_vector[i] = RFLOAT(current)->value; + data_vector[i] = RFLOAT_VALUE(current); } } static void feed2layer(int in_size, int out_size, Node **layer, double *data) { @@ -235,29 +235,29 @@ max_error, VALUE eta) { Network *network; double max_error_float, eta_float, error, sum, *output_delta, *hidden_delta; - int i, j, count; + long i, j, count; Data_Get_Struct(self, Network, network); Check_Type(data, T_ARRAY); - if (RARRAY(data)->len != network->input_size) + if (RARRAY_LEN(data) != network->input_size) rb_raise(rb_cNeuroError, "size of data != input_size"); transform_data(network->tmp_input, data); Check_Type(desired, T_ARRAY); - if (RARRAY(desired)->len != network->output_size) + if (RARRAY_LEN(desired) != network->output_size) rb_raise(rb_cNeuroError, "size of desired != output_size"); transform_data(network->tmp_output, desired); CAST2FLOAT(max_error); - max_error_float = RFLOAT(max_error)->value; + max_error_float = RFLOAT_VALUE(max_error); if (max_error_float <= 0) rb_raise(rb_cNeuroError, "max_error <= 0"); max_error_float *= 2.0; CAST2FLOAT(eta); - eta_float = RFLOAT(eta)->value; + eta_float = RFLOAT_VALUE(eta); if (eta_float <= 0) rb_raise(rb_cNeuroError, "eta <= 0"); output_delta = ALLOCA_N(double, network->output_size); hidden_delta = ALLOCA_N(double, network->hidden_size); for(count = 0; count < network->max_iterations; count++) { @@ -320,16 +320,16 @@ */ static VALUE rb_network_decide(VALUE self, VALUE data) { Network *network; VALUE result; - int i; + long i; Data_Get_Struct(self, Network, network); Check_Type(data, T_ARRAY); - if (RARRAY(data)->len != network->input_size) + if (RARRAY_LEN(data) != network->input_size) rb_raise(rb_cNeuroError, "size of data != input_size"); transform_data(network->tmp_input, data); feed; result = rb_ary_new2(network->output_size); for (i = 0; i < network->output_size; i++) { @@ -513,10 +513,10 @@ if (!NIL_P(network->debug)) rb_gc_mark(network->debug); } static void rb_network_free(Network *network) { - int i; + long i; for (i = 0; i < network->hidden_size; i++) Node_destroy(network->hidden_layer[i]); MEMZERO(network->hidden_layer, Node*, network->hidden_size); xfree(network->hidden_layer); for (i = 0; i < network->output_size; i++)