(2010/03/26 3:05), Tadayoshi Funaba wrote:
>> strtod(3) の解釈対象に含まれていない 2 進や 8 進を否定することが、
>> なぜ含まれている 16 進の否定につながるのでしょう。
> 
> これは to_f (と Float()) の話で、strtod(3) の話ではありません。成瀬さん
> が認めたように、2進数も8進数もさほど重要だとは思われていなくて、今回の
> 提案にある浮動小数点数のための拡張された16進数形式も同じだということだ
> と思います。

なぜ同じなのでしょう。
現在サポートしていないのは単に実装時期の問題だと思っているのですが。

>> String#to_f の仕様・実装が下敷きとしていると思われる
>> strtod(3) の要素を 1 つマージすると言うことが中途半端だとは思いません。
> 
> strtod(3) に多少影響を受けていることはあるかもしれませんが、一番考慮さ
> れているのは ruby での常識、ruby のリテラルだと思います。

Ruby のリテラルは C 言語由来と思われるので、
これもやはり外しているとは思いません。
それとも、先に Ruby リテラルにこの形式を入れるべきという主張ですか?

> 言われることは、Float#strtod であるなら理由として成り立ちますが、利用者
> が、strtod と同じであることを求めてるわけはないと思います。
> 
> また、結果的に他所の仕様が影響を与えることはよくあることですが、to_f が
> strtod に従わなければならない理由にはならないと思いますよ。

全面的に strtod(3) に従うべきという主張はわたしもしません。
一方で、strtod(3) で解釈できるものは to_f でも解釈できていいだろうという
主張はありえ、

> 「何故そうしたのか良くわからない、ああそうか、strtod(3) を参考にしたか
> らこうなっているのか」「何故こうなっているの? -- それは strtod(3) と同
> じものを提供しようとしたからです」そういう事なら分りますが、そういう話
> じゃないですよね。

わたしの意図という話でしたら「同じものを提供しよう」とまでは言いませんが、
「参考に」はしています。

Ruby の仕様・実装という意味でしたら、r2457 からするに、
「同じものを提供しようとした」ように見えます。
ここで 16 進記法を解釈しなくなったのは、現状 "INF" や "NAN" なども
解釈しないことを考えると、C89 の strtod が由来だからでしょうかね。
この点はまつもとさんに確認を取ります。

    * util.c (ruby_strtod): use own strtod(3) implementation to avoid
      locale hell.  Due to this change "0xff".to_f no longer returns 255.0

> lib/scanf.rb で提供するほうが相応わしいと思います。

わたしは String#to_f は解釈すべきだと思っています。

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