Skip to content

Commit c6f439a

Browse files
Improve performance some Integer and Float methods [Feature #19085] (#6638)
* Improve some Integer and Float methods * Using alias and Remove unnecessary code * Remove commentout code
1 parent 7cf7e6c commit c6f439a

File tree

4 files changed

+81
-79
lines changed

4 files changed

+81
-79
lines changed

benchmark/numeric_methods.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,20 @@ benchmark:
1010
int.finite?
1111
infinite?: |
1212
int.infinite?
13+
integer_real: |
14+
int.real
15+
float_real: |
16+
flo.real
17+
integr_imag: |
18+
int.imag
19+
float_imag: |
20+
flo.imag
21+
integer_conj: |
22+
int.conj
23+
float_conj: |
24+
flo.conj
25+
integer_numerator: |
26+
int.numerator
27+
integer_denominator: |
28+
int.denominator
1329
loop_count: 20000000

complex.c

Lines changed: 0 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2159,31 +2159,6 @@ nucomp_s_convert(int argc, VALUE *argv, VALUE klass)
21592159
return nucomp_convert(klass, a1, a2, TRUE);
21602160
}
21612161

2162-
/*
2163-
* call-seq:
2164-
* num.real -> self
2165-
*
2166-
* Returns self.
2167-
*/
2168-
static VALUE
2169-
numeric_real(VALUE self)
2170-
{
2171-
return self;
2172-
}
2173-
2174-
/*
2175-
* call-seq:
2176-
* num.imag -> 0
2177-
* num.imaginary -> 0
2178-
*
2179-
* Returns zero.
2180-
*/
2181-
static VALUE
2182-
numeric_imag(VALUE self)
2183-
{
2184-
return INT2FIX(0);
2185-
}
2186-
21872162
/*
21882163
* call-seq:
21892164
* num.abs2 -> real
@@ -2255,19 +2230,6 @@ numeric_polar(VALUE self)
22552230
return rb_assoc_new(abs, arg);
22562231
}
22572232

2258-
/*
2259-
* call-seq:
2260-
* num.conj -> self
2261-
* num.conjugate -> self
2262-
*
2263-
* Returns self.
2264-
*/
2265-
static VALUE
2266-
numeric_conj(VALUE self)
2267-
{
2268-
return self;
2269-
}
2270-
22712233
/*
22722234
* call-seq:
22732235
* flo.arg -> 0 or float
@@ -2433,18 +2395,13 @@ Init_Complex(void)
24332395

24342396
rb_define_private_method(CLASS_OF(rb_cComplex), "convert", nucomp_s_convert, -1);
24352397

2436-
rb_define_method(rb_cNumeric, "real", numeric_real, 0);
2437-
rb_define_method(rb_cNumeric, "imaginary", numeric_imag, 0);
2438-
rb_define_method(rb_cNumeric, "imag", numeric_imag, 0);
24392398
rb_define_method(rb_cNumeric, "abs2", numeric_abs2, 0);
24402399
rb_define_method(rb_cNumeric, "arg", numeric_arg, 0);
24412400
rb_define_method(rb_cNumeric, "angle", numeric_arg, 0);
24422401
rb_define_method(rb_cNumeric, "phase", numeric_arg, 0);
24432402
rb_define_method(rb_cNumeric, "rectangular", numeric_rect, 0);
24442403
rb_define_method(rb_cNumeric, "rect", numeric_rect, 0);
24452404
rb_define_method(rb_cNumeric, "polar", numeric_polar, 0);
2446-
rb_define_method(rb_cNumeric, "conjugate", numeric_conj, 0);
2447-
rb_define_method(rb_cNumeric, "conj", numeric_conj, 0);
24482405

24492406
rb_define_method(rb_cFloat, "arg", float_arg, 0);
24502407
rb_define_method(rb_cFloat, "angle", float_arg, 0);

numeric.rb

Lines changed: 65 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,17 @@ class Numeric
66
# Returns +true+ if +num+ is a real number (i.e. not Complex).
77
#
88
def real?
9-
return true
9+
true
10+
end
11+
12+
#
13+
# call-seq:
14+
# num.real -> self
15+
#
16+
# Returns self.
17+
#
18+
def real
19+
self
1020
end
1121

1222
#
@@ -19,7 +29,7 @@ def real?
1929
# 1.integer? #=> true
2030
#
2131
def integer?
22-
return false
32+
false
2333
end
2434

2535
#
@@ -29,7 +39,7 @@ def integer?
2939
# Returns +true+ if +num+ is a finite number, otherwise returns +false+.
3040
#
3141
def finite?
32-
return true
42+
true
3343
end
3444

3545
#
@@ -40,8 +50,34 @@ def finite?
4050
# finite, <code>-Infinity</code>, or <code>+Infinity</code>.
4151
#
4252
def infinite?
43-
return nil
53+
nil
54+
end
55+
56+
#
57+
# call-seq:
58+
# num.imag -> 0
59+
# num.imaginary -> 0
60+
#
61+
# Returns zero.
62+
#
63+
def imaginary
64+
0
65+
end
66+
67+
alias imag imaginary
68+
69+
#
70+
# call-seq:
71+
# num.conj -> self
72+
# num.conjugate -> self
73+
#
74+
# Returns self.
75+
#
76+
def conjugate
77+
self
4478
end
79+
80+
alias conj conjugate
4581
end
4682

4783
class Integer
@@ -146,7 +182,7 @@ def even?
146182
#
147183
# Since +int+ is already an Integer, this always returns +true+.
148184
def integer?
149-
return true
185+
true
150186
end
151187

152188
alias magnitude abs
@@ -178,7 +214,7 @@ def odd?
178214
#
179215
# For example, <code>?a.ord</code> returns 97 both in 1.8 and 1.9.
180216
def ord
181-
return self
217+
self
182218
end
183219

184220
#
@@ -208,15 +244,15 @@ def size
208244
#
209245
# #to_int is an alias for #to_i.
210246
def to_i
211-
return self
247+
self
212248
end
213249

214250
# call-seq:
215251
# int.to_int -> integer
216252
#
217253
# Since +int+ is already an Integer, returns +self+.
218254
def to_int
219-
return self
255+
self
220256
end
221257

222258
# call-seq:
@@ -244,6 +280,26 @@ def zero?
244280
def ceildiv(other)
245281
-div(-other)
246282
end
283+
284+
#
285+
# call-seq:
286+
# int.numerator -> self
287+
#
288+
# Returns self.
289+
#
290+
def numerator
291+
self
292+
end
293+
294+
#
295+
# call-seq:
296+
# int.denominator -> 1
297+
#
298+
# Returns 1.
299+
#
300+
def denominator
301+
1
302+
end
247303
end
248304

249305
# call-seq:
@@ -276,7 +332,7 @@ class Float
276332
# Since +float+ is already a Float, returns +self+.
277333
#
278334
def to_f
279-
return self
335+
self
280336
end
281337

282338
#

rational.c

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2059,30 +2059,6 @@ rb_rational_canonicalize(VALUE x)
20592059
return x;
20602060
}
20612061

2062-
/*
2063-
* call-seq:
2064-
* int.numerator -> self
2065-
*
2066-
* Returns self.
2067-
*/
2068-
static VALUE
2069-
integer_numerator(VALUE self)
2070-
{
2071-
return self;
2072-
}
2073-
2074-
/*
2075-
* call-seq:
2076-
* int.denominator -> 1
2077-
*
2078-
* Returns 1.
2079-
*/
2080-
static VALUE
2081-
integer_denominator(VALUE self)
2082-
{
2083-
return INT2FIX(1);
2084-
}
2085-
20862062
/*
20872063
* call-seq:
20882064
* flo.numerator -> integer
@@ -2832,9 +2808,6 @@ Init_Rational(void)
28322808
rb_define_method(rb_cNumeric, "denominator", numeric_denominator, 0);
28332809
rb_define_method(rb_cNumeric, "quo", rb_numeric_quo, 1);
28342810

2835-
rb_define_method(rb_cInteger, "numerator", integer_numerator, 0);
2836-
rb_define_method(rb_cInteger, "denominator", integer_denominator, 0);
2837-
28382811
rb_define_method(rb_cFloat, "numerator", rb_float_numerator, 0);
28392812
rb_define_method(rb_cFloat, "denominator", rb_float_denominator, 0);
28402813

0 commit comments

Comments
 (0)