This commit is contained in:
Nobuyoshi Nakada 2023-07-17 23:57:11 +09:00
Родитель d70484f0eb
Коммит 105bdba899
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 3582D74E1FEE4465
2 изменённых файлов: 8 добавлений и 6 удалений

5
math.c
Просмотреть файл

@ -554,9 +554,8 @@ rb_math_log(int argc, const VALUE *argv)
double b = math_log_split(base, &numbits_2);
/* check for pole error */
if (d == 0.0) {
if (b > 0.0) return DBL2NUM(HUGE_VAL);
if (b < 0.0) return DBL2NUM(-HUGE_VAL);
return DBL2NUM(nan(""));
// Already DomainError if b < 0.0
return b ? DBL2NUM(-HUGE_VAL) : DBL2NUM(NAN);
}
else if (b == 0.0) {
return DBL2NUM(-0.0);

Просмотреть файл

@ -5,6 +5,7 @@ class TestMath < Test::Unit::TestCase
def assert_infinity(a, *rest)
rest = ["not infinity: #{a.inspect}"] if rest.empty?
assert_predicate(a, :infinite?, *rest)
assert_predicate(a, :positive?, *rest)
end
def assert_nan(a, *rest)
@ -165,6 +166,8 @@ class TestMath < Test::Unit::TestCase
assert_nothing_raised { assert_nan(Math.log(0.0, 0.0)) }
assert_nothing_raised { assert_nan(Math.log(Float::NAN)) }
assert_nothing_raised { assert_nan(Math.log(1.0, Float::NAN)) }
assert_nothing_raised { assert_infinity(-Math.log(0)) }
assert_nothing_raised { assert_infinity(-Math.log(0, 2)) }
end
def test_log2
@ -179,6 +182,7 @@ class TestMath < Test::Unit::TestCase
assert_raise_with_message(Math::DomainError, /\blog2\b/) { Math.log2(-1.0) }
assert_raise_with_message(Math::DomainError, /\blog2\b/) { Math.log2(-Float::EPSILON) }
assert_nothing_raised { assert_nan(Math.log2(Float::NAN)) }
assert_nothing_raised { assert_infinity(-Math.log2(0)) }
end
def test_log10
@ -193,6 +197,7 @@ class TestMath < Test::Unit::TestCase
assert_raise_with_message(Math::DomainError, /\blog10\b/) { Math.log10(-1.0) }
assert_raise_with_message(Math::DomainError, /\blog10\b/) { Math.log10(-Float::EPSILON) }
assert_nothing_raised { assert_nan(Math.log10(Float::NAN)) }
assert_nothing_raised { assert_infinity(-Math.log10(0)) }
end
def test_sqrt
@ -277,8 +282,7 @@ class TestMath < Test::Unit::TestCase
assert_raise_with_message(Math::DomainError, /\bgamma\b/) { Math.gamma(-1.0) }
x = Math.gamma(-0.0)
mesg = "Math.gamma(-0.0) should be -INF"
assert_infinity(x, mesg)
assert_predicate(x, :negative?, mesg)
assert_infinity(-x, mesg)
assert_nan(Math.gamma(Float::NAN))
end
@ -299,7 +303,6 @@ class TestMath < Test::Unit::TestCase
x, sign = Math.lgamma(-0.0)
mesg = "Math.lgamma(-0.0) should be [INF, -1]"
assert_infinity(x, mesg)
assert_predicate(x, :positive?, mesg)
assert_equal(-1, sign, mesg)
x, sign = Math.lgamma(Float::NAN)
assert_nan(x)