From: "NARUSE, Yui" Date: 2010-10-18T22:43:24+09:00 Subject: [ruby-dev:42428] Re: [Ruby 1.9-Feature#3961][Open] printfと精度指定と負の値と (2010/10/18 19:13), Tanaka Akira wrote: > 2010年10月18日18:01 Yui NARUSE: >> Feature #3961: printfと精度指定と負の値と >> http://redmine.ruby-lang.org/issues/show/3961 >> >> 起票者: Yui NARUSE >> ステータス: Open, 優先度: Normal >> カテゴリ: core, Target version: 1.9.3 >> >> printf が、フォーマットに精度指定しつつ負の値を与えた時の挙動が、 >> Perl と必然性無く異なっていて不便です。 > > Ruby の挙動は 32bit とか 64bit という環境依存なものに依存しないという点で > 必然性のある仕様です。 まぁ、それ自体はわかります。 >> 例えば浮動小数点数の場合には以下のように .. とか付けずにぶった切る訳で、 >> 無限大方向と無限小方向という違いはあれど、 >> 「Perlとかと同じ挙動にできない」というデメリットの方が大きいのではないでしょうか。 >> % ./ruby -e'printf("%#.8f",10.0/3)' >> 3.33333333 > > 無限大と無限小はぜんぜん違うでしょう。 > 小さい方を無視するのはありえても、大きい方を無視するのはありえないと思います。 フォーマット時に無限大に溢れているだけで、元は有限の負の値なのですから、 指定次第で省略の仕方が変わるのはあり得ると思います。 >> わたしの場合、CRuby 側の inspect が printf("%x", negative_value) などとしている部分の動作を >> RubySpec で Ruby で書く時に頭を抱えてしまいました。 > > 結局、どのような挙動にしたいのかが日本語で説明されていないんですが、 > 環境依存なのにしたいのかなぁ、と思いきや、パッチを見るとそうでもないようです。 > > どうしたいのか説明していただけませんか? sprintf で %x に負数を与えた場合、無限大に対する2の補数として返ってくるので、 その桁数を精度で制御したかったのです。 が、遡って無限大以外の何に対して補数をとるかを、%ld などで制御するのが 正しいことに気づいたので引っ込めます。 -- NARUSE, Yui