[前][次][番号順一覧][スレッド一覧]

ruby-reference-manual:3391

From: "pypypy567 (py _)" <redmine@r...>
Date: Wed, 7 Nov 2012 19:55:55 +0900
Subject: [ruby-reference-manual:3391] [るりまプロジェクト - Bug #2056] mathn の「実数と複素数の相互変換」の説明


Issue #2056 has been updated by pypypy567 (py _).

File mathn.rd.patch added

定義域が拡がるのは 1.8系では complex.rb のおかげで、
1.9以降では Math を複素数対応版の CMath で置き換えることで実現されていると思います。
それを行うのは mathn.rb と complex.rb です。
(#7273 で報告したように mathn は complex に依存しなくなっています。)

添付したパッチのようにサンプルスクリプトを二つに分割する必要があるように思います。
1.8系だと require 'complex' しないと Complex クラスが使えませんが、そうすると Math も拡張されてしまいます。

例外に関しては #@since 1.8.5 が書いてあって実際 1.8.5 からエラーチェックのコードが変わっていますが変わらず Errno::EDOM が発生しますね。
それとは別に 1.9.2 以降では Math::DomainError になるようです。

----------------------------------------
Bug #2056: mathn の「実数と複素数の相互変換」の説明

https://bugs.ruby-lang.org/issues/2056#change-32552

Author: 5.5 (5 5)
Status: Open
Priority: Low
Assignee: yugui (Yuki Sonoda)
Category: doc
Target version: 
reporter: 5.5
ruby_version: 1.8, 1.9


=begin
 library mathn の「実数と複素数の相互変換」の実行例が,Ruby 1.8.7, 1.9.1 ともに

  Complex(0,-1)**2  #=> Complex(-1,0)
  Math.sqrt(-1)     #=> NaN
  
  require 'mathn'
  Complex(0,-1)**2  #=> -1
  Math.sqrt(-1)     #=> Complex(0,1)
 となっています。
 
 しかし,最初の Math.sqrt(-1) は,Ruby のどちらのバージョンにおいても,NaN を返しません。
 require 'complex' していない場合,例外「Errno::EDOM: Domain error - sqrt」が発生します。
 require 'complex' した場合は Complex(0, 1.0) が返ります。
 
 Math.sqrt の定義域が拡がるのは mathn ではなく complex のお陰ではないでしょうか?
 ※Ruby 1.8 の場合,complex ライブラリをロードしなければ,そもそも 1 行目が実行できません。
=end



-- 
http://bugs.ruby-lang.org/

--
ML: ruby-reference-manual@m...
Info: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]