ext/matrix_complex.c in gsl-1.14.7 vs ext/matrix_complex.c in gsl-1.15.3
- old
+ new
@@ -197,11 +197,11 @@
static VALUE rb_gsl_matrix_complex_eye(int argc, VALUE *argv, VALUE klass)
{
size_t n, i;
gsl_matrix_complex *m = NULL;
- gsl_complex z, *p = &z;
+ gsl_complex z, *pz = &z;
switch (argc) {
case 1:
CHECK_FIXNUM(argv[0]);
n = FIX2INT(argv[0]);
z = gsl_complex_rect(1.0, 0.0);
@@ -221,11 +221,12 @@
z = gsl_complex_rect(NUM2DBL(rb_ary_entry(argv[1], 0)),
NUM2DBL(rb_ary_entry(argv[1], 1)));
break;
default:
if (rb_obj_is_kind_of(argv[1], cgsl_complex)) {
- Data_Get_Struct(argv[1], gsl_complex, p);
+ Data_Get_Struct(argv[1], gsl_complex, pz);
+ z = *pz;
} else {
rb_raise(rb_eTypeError,
"wrong argument type %s", rb_class2name(CLASS_OF(argv[1])));
}
break;
@@ -420,10 +421,11 @@
z = ary2complex(argv[k]);
break;
default:
CHECK_COMPLEX(argv[k]);
Data_Get_Struct(argv[k], gsl_complex, pz);
+ z = *pz;
break;
}
gsl_matrix_complex_set(A, i, k-1, z);
}
return obj;
@@ -446,10 +448,11 @@
z = ary2complex(argv[k]);
break;
default:
CHECK_COMPLEX(argv[k]);
Data_Get_Struct(argv[k], gsl_complex, pz);
+ z = *pz;
break;
}
gsl_matrix_complex_set(A, k-1, j, z);
}
return obj;
@@ -1517,12 +1520,14 @@
}
}
return Data_Wrap_Struct(cgsl_matrix_complex, 0, gsl_matrix_complex_free, mnew);
}
-
-static int gsl_matrix_complex_equal(const gsl_matrix_complex *m1,
+// Starting with version 1.15, GSL provides a gsl_matrix_complex_equal
+// function, but it only determines absolute equality (i.e. is has no epsilon
+// argument).
+static int gsl_matrix_complex_equal_eps(const gsl_matrix_complex *m1,
const gsl_matrix_complex *m2, double eps)
{
gsl_complex z1, z2;
size_t i, j;
if (m1->size1 != m2->size1) return 0;
@@ -1553,10 +1558,10 @@
rb_raise(rb_eArgError, "Wrong number of arguments (%d for 1 or 2)\n", argc);
}
Data_Get_Struct(obj, gsl_matrix_complex, m1);
CHECK_MATRIX_COMPLEX(argv[0]);
Data_Get_Struct(argv[0], gsl_matrix_complex, m2);
- ret = gsl_matrix_complex_equal(m1, m2, eps);
+ ret = gsl_matrix_complex_equal_eps(m1, m2, eps);
if (ret == 1) return Qtrue;
else return Qfalse;
}
static VALUE rb_gsl_matrix_complex_not_equal(int argc, VALUE *argv, VALUE obj)