[#28007] [Feature:trunk] optional reverse_lookup argument for IPSocket#{addr,peeraddr} and Socket.getaddrinfo — Nobuyoshi Nakada <nobu@...>
Hi,
Hi,
[#28015] RCR: RUBY_VERSION_INT — Roger Pack <rogerdpack2@...>
Situation:
Roger Pack:
[#28029] [Bug #2709] $VERBOSE, $DEBUG and Kernel#sprintf — Patrik Wenger <redmine@...>
Bug #2709: $VERBOSE, $DEBUG and Kernel#sprintf
[#28036] [Bug #2710] Kernel#load loads a relative path — Brian Ford <redmine@...>
Bug #2710: Kernel#load loads a relative path
[#28037] Floating Point Bug in 1.8.6-p398 — Austin Ziegler <halostatue@...>
Doing some quick testing with multiruby on something, I see that every
> Doing some quick testing with multiruby on something, I see that every
[#28072] [Bug #2715] Optimization to avoid spawning shell in Kernel#system call should check for failure conditions — Tomasz Wegrzanowski <redmine@...>
Bug #2715: Optimization to avoid spawning shell in Kernel#system call should check for failure conditions
[#28077] Re: [ruby-cvs:33755] Ruby:r26540 (trunk): * enum.c (enum_each_entry): new method #each_entry to pack values — "Akinori MUSHA" <knu@...>
At Tue, 2 Feb 2010 17:54:56 +0900 (JST),
[#28100] [Bug #2721] OpenSSL::Random.random_bytes(1) is very slow the first time on Windows — Greg Hazel <redmine@...>
Bug #2721: OpenSSL::Random.random_bytes(1) is very slow the first time on Windows
[#28103] [Bug #2722] gets on a large file takes a very very long time — Greg Hazel <redmine@...>
Bug #2722: gets on a large file takes a very very long time
Hi,
[#28113] [Bug #2723] $: length affects re-require time of already loaded files — Greg Hazel <redmine@...>
Bug #2723: $: length affects re-require time of already loaded files
[#28141] [Bug #2731] FileUtils.copy prints error message in $DEBUG mode when destination doesn't exist — Kornelius Kalnbach <redmine@...>
Bug #2731: FileUtils.copy prints error message in $DEBUG mode when destination doesn't exist
[#28147] [Bug #2737] StringConstant +"string literal" (unspaced) raises exception — Joe Lapp <redmine@...>
Bug #2737: StringConstant +"string literal" (unspaced) raises exception
[#28151] [Bug #2739] ruby 1.8.7 built with pthreads hangs under some circumstances — Joel Ebel <redmine@...>
Bug #2739: ruby 1.8.7 built with pthreads hangs under some circumstances
Issue #2739 has been updated by Lucas Nussbaum.
[#28154] [Bug #2740] Extend const_missing to pass in the nesting — Yehuda Katz <redmine@...>
Bug #2740: Extend const_missing to pass in the nesting
[#28204] [Bug #2756] Issues with Math and Complex behavior on 1.9 — Brian Ford <redmine@...>
Bug #2756: Issues with Math and Complex behavior on 1.9
[#28206] Is Math module a wrapper of libm? — Yusuke ENDOH <mame@...>
Hi matz --
Hi,
Hi,
Hi,
Hi,
Hi,
Hi
Hi!
Hi,
So here's a summary of the changes that Kenta and I propose, followed
Hi,
Hi,
Hi,
Hi,
On 2010/03/02 14:15, Marc-Andre Lafortune wrote:
[#28215] Removing Syck from ruby — Aaron Patterson <aaron@...>
Hello,
> I would like to remove Syck from ruby, and release it as a gem that I
On Thu, Feb 18, 2010 at 11:28:20PM +0900, Jon wrote:
[#28235] [Feature #2759] Regexp /g and /G options — Michael Fellinger <redmine@...>
Feature #2759: Regexp /g and /G options
Issue #2759 has been updated by caleb clausen.
(2010/03/04 14:53), caleb clausen wrote:
On 3/4/10, NARUSE, Yui <naruse@airemix.jp> wrote:
[#28237] [Bug #2760] unable to cross-compile win32.c — Roger Pack <redmine@...>
Bug #2760: unable to cross-compile win32.c
[#28238] weird behaviour of readline on OSX 10.6 — Andrew Eberbach <eberbach@...>
Hi
[#28273] [Feature #2772] Matrix: Calculating determinant using Bareiss algorithm [patch] — Marc-Andre Lafortune <redmine@...>
Feature #2772: Matrix: Calculating determinant using Bareiss algorithm [patch]
[#28281] [Bug:trunk] add explicit constraints for WONTFIX IO bug — Yusuke ENDOH <mame@...>
Hi, all
[#28300] [Bug #2781] crash when gc_mark()ing already free'd locals of cloned scope — "coderrr ." <redmine@...>
Bug #2781: crash when gc_mark()ing already free'd locals of cloned scope
[#28318] [Bug #2784] The formatting options hash passed to the to_yaml methods do nothing. — Anshul Khandelwal <redmine@...>
Bug #2784: The formatting options hash passed to the to_yaml methods do nothing.
[#28329] [ANN] Ruby 1.9.2dev has passed RubySpec! — Yusuke ENDOH <mame@...>
Hi,
Hi,
On Wed, Feb 24, 2010 at 4:41 PM, Yusuke ENDOH <mame@tsg.ne.jp> wrote:
Hi,
[#28355] [ANN] Toward rich diversity of Ruby development. — Urabe Shyouhei <shyouhei@...>
A short announcement: thanks to some helps of GitHub people, I now have
Hi,
Vladimir Sizikov wrote:
[#28365] Indentifying key MRI-on-Windows issues — Jon <jon.forums@...>
In an effort to begin summarizing key MRI-on-Windows open issues I'm starting this thread in hopes that those interested will respond with details on the key MRI issues they feel need resolution for Windows users.
> My key concern is http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-=
On Tue, Mar 16, 2010 at 10:30 AM, Roger Pack <rogerdpack2@gmail.com> wrote:
> JRuby does do encoding support, though it's not complete yet. I think
Hi Roger, Charles,
> > The snippets in
[#28366] [Bug #2823] IRB Crashes When Completing Method Names of BasicObjects — Run Paint Run Run <redmine@...>
Bug #2823: IRB Crashes When Completing Method Names of BasicObjects
[ruby-core:28233] Re: Is Math module a wrapper of libm?
Hi,
On 2010/02/19, at 0:25, Marc-Andre Lafortune wrote:
> On Thu, Feb 18, 2010 at 7:25 AM, Yusuke ENDOH <mame@tsg.ne.jp> wrote:
>> At first, I'll soon change the behaviors of atanh(1) and lgamma(inf)
>> which are currently platform-dependent. According to SUSv3, the =
former
>> should raise ERANGE (currently raises EDOM on Linux), and the latter
>> should return inf (currently raises EDOM on darwin).
>=20
> I disagree with this reading. SUSv3 states that atanh(1) should return
> Infinity and (only when the application has requested that behavior)
> set the ERANGE error flag. Ruby must choose to do one or the other (or
> else add a way to do both). Mathematically speaking, there is no doubt
> that it should return Infinity and that this is more helpful than
> raising an error.
lgamma(x) is defined as log(fabs(tgamma(x))).
SUSv3 defines that lgamma(-INFINITY) is +INFINITY
though tgamma(-INFINITY) is defined a domain error.
Do you think what does Math.lgamma(-Float::INFINITY) return?
> The question is also valid for
> Math.log(0.0)
> Math.atanh(1.0)
> Math.gamma(0.0)
> 0.0**(-n)
>=20
> Look at the graph of 1/x. Look at the graph of Log(x). Now explain to
> me why 1/0.0 is +Inf and Log(x) would not be -Inf?
I try to write a patch for atanh, log, log2, log10, and sqrt
according to the following policies:
(1) Pick up domain and pole error cases before calling actual C =
functions.
(2) Returns NAN if a domain error is picked up.
(3) Returns INFINITY with suitable flag if a pole error is picked up.
But, I hope that a suitable exception is raised when picked up domain =
errors.
Unfortunately the existence of EDOM depends on platform.
So I believe that we need an error class like Math::DomainError.
--
Kenta Murata
OpenPGP FP =3D FA26 35D7 4F98 3498 0810 E0D5 F213 966F E9EB 0BCC
E-mail: mrkn@mrkn.jp
twitter: http://twitter.com/mrkn/
blog: http://d.hatena.ne.jp/mrkn/
diff --git a/math.c b/math.c
index 027932d..ebde179 100644
--- a/math.c
+++ b/math.c
@@ -310,6 +310,11 @@ math_atanh(VALUE obj, VALUE x)
Need_Float(x);
errno =3D 0;
d0 =3D RFLOAT_VALUE(x);
+ /* domain error check */
+ if (d0 < -1.0 || +1.0 < d0) return DBL2NUM(NAN);
+ /* pole error cases */
+ if (d0 =3D=3D -1.0) return DBL2NUM(-INFINITY);
+ if (d0 =3D=3D +1.0) return DBL2NUM(+INFINITY);
d =3D atanh(d0);
domain_check(d0, d, "atanh");
infinity_check(x, d, "atanh");
@@ -370,6 +375,10 @@ math_log(int argc, VALUE *argv)
Need_Float(x);
errno =3D 0;
d0 =3D RFLOAT_VALUE(x);
+ /* domain error case */
+ if (signbit(d0)) return DBL2NUM(NAN);
+ /* pole error case */
+ if (d0 =3D=3D +0.0) return DBL2NUM(-INFINITY);
d =3D log(d0);
if (argc =3D=3D 2) {
Need_Float(base);
@@ -413,6 +422,10 @@ math_log2(VALUE obj, VALUE x)
Need_Float(x);
errno =3D 0;
d0 =3D RFLOAT_VALUE(x);
+ /* domain error case */
+ if (signbit(d0)) return DBL2NUM(NAN);
+ /* pole error case */
+ if (d0 =3D=3D +0.0) return DBL2NUM(-INFINITY);
d =3D log2(d0);
domain_check(d0, d, "log2");
infinity_check(x, d, "log2");
@@ -439,6 +452,10 @@ math_log10(VALUE obj, VALUE x)
Need_Float(x);
errno =3D 0;
d0 =3D RFLOAT_VALUE(x);
+ /* domain error case */
+ if (signbit(d0)) return DBL2NUM(NAN);
+ /* pole error case */
+ if (d0 =3D=3D +0.0) return DBL2NUM(-INFINITY);
d =3D log10(d0);
domain_check(d0, d, "log10");
infinity_check(x, d, "log10");
@@ -477,6 +494,8 @@ math_sqrt(VALUE obj, VALUE x)
Need_Float(x);
errno =3D 0;
d0 =3D RFLOAT_VALUE(x);
+ /* domain error case */
+ if (signbit(d0)) return DBL2NUM(NAN);
d =3D sqrt(d0);
domain_check(d0, d, "sqrt");
return DBL2NUM(d);
diff --git a/test/ruby/test_math.rb b/test/ruby/test_math.rb
index 5b49291..8189b31 100644
--- a/test/ruby/test_math.rb
+++ b/test/ruby/test_math.rb
@@ -2,10 +2,15 @@ require 'test/unit'
=20
class TestMath < Test::Unit::TestCase
def assert_infinity(a, *rest)
- rest =3D ["not infinity"] if rest.empty?
+ rest =3D ["not infinity: #{a.inspect}"] if rest.empty?
assert(!a.finite?, *rest)
end
=20
+ def assert_nan(a, *rest)
+ rest =3D ["not nan: #{a.inspect}"] if rest.empty?
+ assert(a.nan?, *rest)
+ end
+
def check(a, b)
err =3D [Float::EPSILON * 4, [a.abs, b.abs].max * Float::EPSILON * =
256].max
assert_in_delta(a, b, err)
@@ -99,7 +104,10 @@ class TestMath < Test::Unit::TestCase
check(0, Math.atanh(Math.sinh(0) / Math.cosh(0)))
check(1, Math.atanh(Math.sinh(1) / Math.cosh(1)))
check(2, Math.atanh(Math.sinh(2) / Math.cosh(2)))
- assert_raise(Errno::EDOM, Errno::ERANGE) { Math.atanh(-1) }
+ assert_nothing_raised { assert_infinity Math.atanh(1) }
+ assert_nothing_raised { assert_infinity -Math.atanh(-1) }
+ assert_nothing_raised { assert_nan Math.atanh(1 + Float::EPSILON) }
+ assert_nothing_raised { assert_nan Math.atanh(-1 - Float::EPSILON) =
}
end
=20
def test_exp
@@ -116,8 +124,8 @@ class TestMath < Test::Unit::TestCase
check(1, Math.log(10, 10))
check(2, Math.log(100, 10))
assert_equal(1.0/0, Math.log(1.0/0))
- assert_raise(Errno::EDOM, Errno::ERANGE) { Math.log(0) }
- assert_raise(Errno::EDOM, Errno::ERANGE) { Math.log(-1) }
+ assert_nothing_raised { assert_infinity -Math.log(+0.0) }
+ assert_nothing_raised { assert_nan Math.log(-0.0) }
assert_raise(TypeError) { Math.log(1,nil) }
end
=20
@@ -126,8 +134,8 @@ class TestMath < Test::Unit::TestCase
check(1, Math.log2(2))
check(2, Math.log2(4))
assert_equal(1.0/0, Math.log2(1.0/0))
- assert_raise(Errno::EDOM, Errno::ERANGE) { Math.log2(0) }
- assert_raise(Errno::EDOM, Errno::ERANGE) { Math.log2(-1) }
+ assert_nothing_raised { assert_infinity -Math.log2(+0.0) }
+ assert_nothing_raised { assert_nan Math.log2(-0.0) }
end
=20
def test_log10
@@ -135,8 +143,8 @@ class TestMath < Test::Unit::TestCase
check(1, Math.log10(10))
check(2, Math.log10(100))
assert_equal(1.0/0, Math.log10(1.0/0))
- assert_raise(Errno::EDOM, Errno::ERANGE) { Math.log10(0) }
- assert_raise(Errno::EDOM, Errno::ERANGE) { Math.log10(-1) }
+ assert_nothing_raised { assert_infinity -Math.log10(+0.0) }
+ assert_nothing_raised { assert_nan Math.log10(-0.0) }
end
=20
def test_sqrt
@@ -144,7 +152,7 @@ class TestMath < Test::Unit::TestCase
check(1, Math.sqrt(1))
check(2, Math.sqrt(4))
assert_equal(1.0/0, Math.sqrt(1.0/0))
- assert_raise(Errno::EDOM, Errno::ERANGE) { Math.sqrt(-1) }
+ assert_nothing_raised { assert_nan Math.sqrt(-0.0) }
end
=20
def test_frexp