Bug #913

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

Added by tadayoshi funaba about 3 years ago. Updated 10 months ago.

Status:Closed Start date:12/21/2008
Priority:Normal Due date:
Assignee:Keiju Ishitsuka % Done:

0%

Category:lib
Target version:1.9.1 Release Candidate
ruby -v:

Description

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)

History

Updated by Yuki Sonoda about 3 years ago

  • Target version set to 1.9.1 Release Candidate

Updated by Koichi Sasada about 3 years ago

  • Assignee set to Keiju Ishitsuka

Updated by Yuki Sonoda about 3 years ago

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

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

Updated by Keiju Ishitsuka about 3 years ago

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

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 <<---

Updated by tadayoshi funaba about 3 years ago

> >たぶん、こんな感じだと思います。コミットしてよいですか? < 石塚さん
> 
> 値が変だという意味では, 何らかの対処があるべきだと思います. が
> 
> , 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 やあるいは未知の実数の実装でも受け入れます。

Updated by Keiju Ishitsuka about 3 years ago

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

下記了解です.

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 <<---

Updated by Yuki Sonoda about 3 years ago

  • Category set to lib
  • Status changed from Open to Closed
applied in r20938.

Also available in: Atom PDF