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)