Project

General

Profile

Actions

Bug #913

closed

mathn した場合、sqrt(NaN) が複素数になる

Added by tadf (tadayoshi funaba) over 12 years ago. Updated almost 10 years ago.

Status:
Closed
Priority:
Normal
ruby -v:
Backport:

Description

=begin
main@191-20081221> nan = 0.0/0
#=> NaN
main@191-20081221> Math.sqrt(nan)
#=> NaN
main@191-20081221> require 'mathn'
#=> true
main@191-20081221> Math.sqrt(nan)
#=> (0+NaN*i)
=end

Actions #1

Updated by yugui (Yuki Sonoda) over 12 years ago

  • Target version set to 1.9.1 Release Candidate

=begin

=end

Actions #2

Updated by ko1 (Koichi Sasada) over 12 years ago

  • Assignee set to keiju (Keiju Ishitsuka)

=begin

=end

Actions #3

Updated by yugui (Yuki Sonoda) over 12 years ago

=begin
たぶん、こんな感じだと思います。コミットしてよいですか? < 石塚さん

diff --git a/lib/mathn.rb b/lib/mathn.rb
index 48cb99f..0241f57 100644
--- a/lib/mathn.rb
+++ b/lib/mathn.rb
@@ -134,6 +134,8 @@ module Math
else
Complex(x, -y)
end

  • elsif a.respond_to?(:nan?) and a.nan?
  • a elsif a >= 0 rsqrt(a) else

=end

Actions #4

Updated by keiju (Keiju Ishitsuka) over 12 years ago

=begin
けいじゅ@いしつかです.

In [ruby-dev :37537 ] the message: "[ruby-dev:37537] [Bug #913] mathn
した場合、sqrt(NaN) が複素数になる ", on Dec/22 11:38(JST) Yuki Sonoda
writes:

チケット #913 が更新されました。 (by Yuki Sonoda)

たぶん、こんな感じだと思います。コミットしてよいですか? < 石塚さん

値が変だという意味では, 何らかの対処があるべきだと思います. が

, baseとなっているComplexの振る舞いに基づいているので,まず, Complexに
nanを食わせたときの振る舞いを明確にした方が良いのでは?

irb(main):001:0> nan = 0.0/0
=> NaN
irb(main):002:0> Complex(nan,0)
=> (NaN+0i)
irb(main):003:0> Complex(0,nan)
=> (0+NaN*i)

これらの振る舞いはこれで良いんですかね?

__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@ishitsuka.com <<---

=end

Actions #5

Updated by tadf (tadayoshi funaba) over 12 years ago

=begin

たぶん、こんな感じだと思います。コミットしてよいですか? < 石塚さん

値が変だという意味では, 何らかの対処があるべきだと思います. が

, baseとなっているComplexの振る舞いに基づいているので,まず, Complexに
nanを食わせたときの振る舞いを明確にした方が良いのでは?

あまり関係ないような気がします。matnn なしで、

Math.sqrt(NaN) #=> NaN

となるということなので。

irb(main):001:0> nan = 0.0/0
=> NaN
irb(main):002:0> Complex(nan,0)
=> (NaN+0i)
irb(main):003:0> Complex(0,nan)
=> (0+NaN*i)

これらの振る舞いはこれで良いんですかね?

たとえば、r6rs で、+nan.0+0i や 0+nan.0i と書いた場合と同じで構わないと
思っています。python でも同じです。

基本的に Complex の要素は real であればいいという判断です。だから、
BigDecimal やあるいは未知の実数の実装でも受け入れます。

=end

Actions #6

Updated by keiju (Keiju Ishitsuka) over 12 years ago

=begin
けいじゅ@いしつかです.

下記了解です.

Yuguiさんチェックインしていただけないでしょうか?

In [ruby-dev :37550 ] the message: "[ruby-dev:37550] Re: [Bug #913]
mathn した場合、sqrt(NaN) が複素数になる ", on Dec/22 21:38(JST)
Tadayoshi Funaba writes:

たぶん、こんな感じだと思います。コミットしてよいですか? < 石塚さん

値が変だという意味では, 何らかの対処があるべきだと思います. が

, baseとなっているComplexの振る舞いに基づいているので,まず, Complexに
nanを食わせたときの振る舞いを明確にした方が良いのでは?

あまり関係ないような気がします。matnn なしで、

Math.sqrt(NaN) #=> NaN

となるということなので。

irb(main):001:0> nan = 0.0/0
=> NaN
irb(main):002:0> Complex(nan,0)
=> (NaN+0i)
irb(main):003:0> Complex(0,nan)
=> (0+NaN*i)

これらの振る舞いはこれで良いんですかね?

たとえば、r6rs で、+nan.0+0i や 0+nan.0i と書いた場合と同じで構わないと
思っています。python でも同じです。

基本的に Complex の要素は real であればいいという判断です。だから、
BigDecimal やあるいは未知の実数の実装でも受け入れます。

__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@ishitsuka.com <<---

=end

Actions #7

Updated by yugui (Yuki Sonoda) over 12 years ago

  • Category set to lib
  • Status changed from Open to Closed

=begin
applied in r20938.
=end

Actions

Also available in: Atom PDF