aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--complex.c2
-rw-r--r--test/ruby/test_complex.rb1
3 files changed, 7 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 9fd760452b..bf9c72cc2b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri May 22 20:56:33 2015 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * complex.c (f_complex_polar): simple bug reproduced only when y is
+ a float but x is not a float.
+
Fri May 22 19:42:06 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* process.c (rb_spawn_process): do not discard global escape
diff --git a/complex.c b/complex.c
index 365fb7ad17..50d53afcde 100644
--- a/complex.c
+++ b/complex.c
@@ -592,8 +592,8 @@ f_complex_polar(VALUE klass, VALUE x, VALUE y)
y = DBL2NUM(imag);
}
else {
+ y = f_mul(x, DBL2NUM(sin(arg)));
x = f_mul(x, DBL2NUM(cos(arg)));
- y = f_mul(y, DBL2NUM(sin(arg)));
if (canonicalization && f_zero_p(y)) return x;
}
return nucomp_s_new_internal(klass, x, y);
diff --git a/test/ruby/test_complex.rb b/test/ruby/test_complex.rb
index beccc8e4f3..3205329a87 100644
--- a/test/ruby/test_complex.rb
+++ b/test/ruby/test_complex.rb
@@ -212,6 +212,7 @@ class Complex_Test < Test::Unit::TestCase
def test_polar
assert_equal([1,2], Complex.polar(1,2).polar)
+ assert_equal(Complex.polar(1.0, Math::PI * 2 / 3), Complex.polar(1, Math::PI * 2 / 3))
end
def test_uplus