Bug #913
mathn した場合、sqrt(NaN) が複素数になる
| Status: | Closed | Start date: | 12/21/2008 | |
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assignee: | % 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.