mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* math.c (math_atan2): change the behavior when x and y are zero.
* test/ruby/test_math.rb (test_atan2): add tests for the above changes. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29115 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
f64358db7d
commit
9be503f332
3 changed files with 18 additions and 2 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
Fri Aug 27 12:47:44 2010 Kenta Murata <mrkn@mrkn.jp>
|
||||||
|
|
||||||
|
* math.c (math_atan2): change the behavior when x and y are zero.
|
||||||
|
|
||||||
|
* test/ruby/test_math.rb (test_atan2): add tests for the above
|
||||||
|
changes.
|
||||||
|
|
||||||
Fri Aug 27 12:26:23 2010 NAKAMURA Usaku <usa@ruby-lang.org>
|
Fri Aug 27 12:26:23 2010 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||||
|
|
||||||
* object.c (rb_obj_class): remove mention of obsolete method.
|
* object.c (rb_obj_class): remove mention of obsolete method.
|
||||||
|
|
8
math.c
8
math.c
|
@ -55,7 +55,13 @@ math_atan2(VALUE obj, VALUE y, VALUE x)
|
||||||
Need_Float2(y, x);
|
Need_Float2(y, x);
|
||||||
dx = RFLOAT_VALUE(x);
|
dx = RFLOAT_VALUE(x);
|
||||||
dy = RFLOAT_VALUE(y);
|
dy = RFLOAT_VALUE(y);
|
||||||
if (dx == 0.0 && dy == 0.0) domain_error("atan2");
|
if (dx == 0.0 && dy == 0.0) {
|
||||||
|
if (!signbit(dx))
|
||||||
|
return DBL2NUM(dy);
|
||||||
|
if (!signbit(dy))
|
||||||
|
return DBL2NUM(M_PI);
|
||||||
|
return DBL2NUM(-M_PI);
|
||||||
|
}
|
||||||
if (isinf(dx) && isinf(dy)) domain_error("atan2");
|
if (isinf(dx) && isinf(dy)) domain_error("atan2");
|
||||||
return DBL2NUM(atan2(dy, dx));
|
return DBL2NUM(atan2(dy, dx));
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,10 @@ class TestMath < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_atan2
|
def test_atan2
|
||||||
assert_raise(Math::DomainError) { Math.atan2(0, 0) }
|
check(+0.0, Math.atan2(+0.0, +0.0))
|
||||||
|
check(-0.0, Math.atan2(-0.0, +0.0))
|
||||||
|
check(+Math::PI, Math.atan2(+0.0, -0.0))
|
||||||
|
check(-Math::PI, Math.atan2(-0.0, -0.0))
|
||||||
assert_raise(Math::DomainError) { Math.atan2(Float::INFINITY, Float::INFINITY) }
|
assert_raise(Math::DomainError) { Math.atan2(Float::INFINITY, Float::INFINITY) }
|
||||||
assert_raise(Math::DomainError) { Math.atan2(Float::INFINITY, -Float::INFINITY) }
|
assert_raise(Math::DomainError) { Math.atan2(Float::INFINITY, -Float::INFINITY) }
|
||||||
assert_raise(Math::DomainError) { Math.atan2(-Float::INFINITY, Float::INFINITY) }
|
assert_raise(Math::DomainError) { Math.atan2(-Float::INFINITY, Float::INFINITY) }
|
||||||
|
|
Loading…
Reference in a new issue