From: "NARUSE, Yui" <naruse@...>
Date: 2010-03-29T08:08:37+09:00
Subject: [ruby-dev:40816] Re: [Feature #2969] String#to_f  	が -h.hhh±pd を解釈できるように

成瀬です。

(2010/03/29 7:04), Yukihiro Matsumoto wrote:
> まつもと ゆきひろです
> 
> すいません、忙しくて放置してました。
> 
> In message "Re: [ruby-dev:40650] [Feature #2969] String#to_f 	が -h.hhh±pd を解釈できるように"
>      on Tue, 16 Mar 2010 04:01:52 +0900, Yui NARUSE<redmine@ruby-lang.org>  writes:
> |
> |Feature #2969: String#to_f が -h.hhh±pd を解釈できるように
> |http://redmine.ruby-lang.org/issues/show/2969
> |
> |起票者: Yui NARUSE
> |ステータス: Open, 優先度: Normal
> |
> |C99 の printf には a という指定子があります。
> |
> |     aA          The argument is printed in style ‘[-h.hhh±pd]’ where there is
> |                 one digit before the hexadecimal point and the number after
> |                 is equal to the precision specification for the argument;
> |                 when the precision is missing, enough digits are produced to
> |                 convey the argument's exact double-precision floating-point
> |                 representation.  The values ∞ and NaN are printed as ‘inf’
> |                 and ‘nan’, respectively.
> 
> |で、この形式を使っているのですが、RubyのString#to_f で解釈してくれず悲しくなるので、
> |解釈できるようにしませんか。
> 
> 最終決定ではありませんが、私の判断は以下の通りです。
> 
>   * 1.9.2には導入しない。将来とも拒否というわけではない。
> 
> まず、この機能ですが、必要性はさほど高くないので、導入するの
> であれば printf と同時に導入すべきだと思います。でも、実装が
> 間に合わないので printf は提案しないということでしたら、無理
> に 1.9.2 に導入せずに、printfの実装も対にするべきだと思いま
> す。

missing を含めた printf の実装は、[ruby-dev:40801] にあります。
ので、この点に関して時期的な問題はないかと思います。

> さて、時期の問題はともかくとして、最終的な仕様がどうあるべき
> かについてですが、Rubyには「浮動小数点表現の解釈」を行う機能
> は複数あります。
> 
>    (a) 浮動小数点リテラル
>    (b) Float#to_f
>    (c) Float()
>    (d) lib/scanf.rb
> 
> で、今回導入検討している表現はメソッド呼び出しとコンフリクト
> する可能性があるので (a) は対象にしないというのがコンセンサ
> スだと思います。私も賛成します。
> 
> 次に (b) と (c) ですが、現在の Float() と to_f には、
> 
>    * Float()は表現に厳しく、間違った表現は積極的に例外にする
>    * to_f は適当に解釈し、間違った表現には0.0を返す
> 
> という違いがあります。さらに Integer() と to_i との類推からは、
> 「0x」などの解釈はFloatが行い、to_fは行わないということを期待
> してもよいのではないかと思います。
> 
> とすると、将来 %a 表現の解釈を導入する際にはFloat()がこの形式
> を解釈し、to_fは行わないというのが、自然ではないのかと思いま
> す。もっとも、これは私の意見と言うだけで、最終決定ではありま
> せんが。

なるほど、わたしは手軽に使えればよいので異論はありません。

> 最後に (d) scanf ですが、printfが %a を採用したあかつきには、
> scanf も %a を導入した方がよいと思います。

scanf の実装は [ruby-dev:40799] に示しています。

> to_iやto_fがエラーに対して 0 を返すのは、後悔している仕様の
> 一つですが、今さら変えられないですね。

次のチャンスは 2.0 ですかねぇ。

-- 
NARUSE, Yui  <naruse@airemix.jp>