/* * call-seq: * rat - numeric -> numeric_result * * Performs subtraction. * * For example: * * Rational(2, 3) - Rational(2, 3) #=> (0/1) * Rational(900) - Rational(1) #=> (899/1) * Rational(-2, 9) - Rational(-9, 2) #=> (77/18) * Rational(9, 8) - 4 #=> (23/8) * Rational(20, 9) - 9.8 #=> -7.577777777777778 */ static VALUE nurat_sub(VALUE self, SEL sel, VALUE other) { switch (TYPE(other)) { case T_FIXNUM: case T_BIGNUM: { get_dat1(self); return f_addsub(self, dat->num, dat->den, other, ONE, '-'); } case T_FLOAT: return f_sub(f_to_f(self), other); case T_RATIONAL: { get_dat2(self, other); return f_addsub(self, adat->num, adat->den, bdat->num, bdat->den, '-'); } default: return rb_num_coerce_bin(self, other, '-'); } }
/* * call-seq: * cmp - numeric -> complex * * Performs subtraction. * * Complex(2, 3) - Complex(2, 3) #=> (0+0i) * Complex(900) - Complex(1) #=> (899+0i) * Complex(-2, 9) - Complex(-9, 2) #=> (7+7i) * Complex(9, 8) - 4 #=> (5+8i) * Complex(20, 9) - 9.8 #=> (10.2+9i) */ static VALUE nucomp_sub(VALUE self, VALUE other) { return f_addsub(self, other, f_sub, '-'); }
/* * call-seq: * cmp + numeric -> complex * * Performs addition. * * Complex(2, 3) + Complex(2, 3) #=> (4+6i) * Complex(900) + Complex(1) #=> (901+0i) * Complex(-2, 9) + Complex(-9, 2) #=> (-11+11i) * Complex(9, 8) + 4 #=> (13+8i) * Complex(20, 9) + 9.8 #=> (29.8+9i) */ static VALUE nucomp_add(VALUE self, VALUE other) { return f_addsub(self, other, f_add, '+'); }