[#23884] Ruby 1.8.2 preview1にむけて — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

34 messages 2004/07/13
[#23917] Re: Ruby 1.8.2 preview1にむけて — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/07/16

山本です。

[#23920] Re: Ruby 1.8.2 preview1にむけて — "NAKAMURA, Hiroshi" <nakahiro@...> 2004/07/16

なひです。

[#23922] ruby 1.8.2 preview1 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

27 messages 2004/07/16

[#23995] String#each -> String#each_char — Shugo Maeda <shugo@...>

前田です。

27 messages 2004/07/30
[#23996] Re: String#each -> String#each_char — matz@... (Yukihiro Matsumoto) 2004/07/30

まつもと ゆきひろです

[#23997] Re: String#each -> String#each_char — "U.Nakamura" <usa@...> 2004/07/30

こんにちは、なかむら(う)です。

[#23999] Re: String#each -> String#each_char — matz@... (Yukihiro Matsumoto) 2004/07/30

まつもと ゆきひろです

[#24000] Re: String#each -> String#each_char — "U.Nakamura" <usa@...> 2004/07/30

こんにちは、なかむら(う)です。

[#24005] Re: String#each -> String#each_char — Minero Aoki <aamine@...> 2004/07/31

青木です。

[#24012] Re: String#each -> String#each_char — Shugo Maeda <shugo@...> 2004/08/01

前田です。

[#24014] Re: String#each -> String#each_char — Minero Aoki <aamine@...> 2004/08/02

青木です。

[ruby-dev:23881] Re: Are these comittable?

From: "U.Nakamura" <usa@...>
Date: 2004-07-12 12:25:01 UTC
List: ruby-dev #23881
こんにちは、なかむら(う)です。

In message "[ruby-dev:23879] Re: Are these comittable?"
    on Jul.12,2004 20:10:35, <ocean@m2.ccsnet.ne.jp> wrote:
| strtod は "INF" じゃなくて "INFINITY" でも無限大として解釈するんですね _no
| これで晴れて問題なくなりました。
| 
| 少し自信がなくなったので、コミットは明日の深夜にします。

strtodはC90の範囲ではそもそも"inf"や"nan"を認識しない(という
か、C90自体がそもそもinfやnanを扱っていない)のですが、C99では
めでたく(?)仕様に取り込まれました。

というわけで、これに従うのがてっとりばやいかな、と思うのです
が、infとnanの件を手っ取り早くまとめると、

(1) 無限大は"INF"・"INFINITY"のいずれかを理解する。
    ただし、大文字小文字は区別しない。
(2) NaNは"NAN"・"NAN(なぞのもじれつ)"を認識する。
    ただし、大文字小文字は区別しない。

となっています。
問題はNaNの「なぞのもじれつ」と書いた部分で、どれだけ規格書を
読んでも理解できないのですが(*1)、この仕様にそれなりに従って
いると期待される某ライブラリでは、英数字や'_'からなる文字列は
受け付け、'.'や(EUC-JPでの)マルチバイト文字なんかは受け付けな
いようです。

*1 私が読んでいるのはJISなので、ISOの原文には問題ないのかもし
   れません。

この「なぞのもじれつ」部分はよくわからんので誰か詳しい人に教
えて頂きたいところですが ^^;、いちおうこういうこともあるとい
うことで紹介だけしておきます。
# C99なんて知ったことか、というのも意見としてアリかも :)


| +    if (strncasecmp(p, "NAN", 3) == 0) {
| +	p += 3;
| +	fraction = 0.0 / 0.0;
| +	goto exit;
| +    }

前回のパッチのときに反応するのを忘れていたのですが、VC++はリ
テラル0(0.0)で除算を行う式をコード中に含めるとエラーとなりま
す。
なので、

  if (strncasecmp(p, "NAN", 3) == 0) {
      double z = 0.0;
      p += 3;
      fraction = 0.0 / z;
      goto exit;
  }

てな感じで変数を経由してコンパイラをごまかしてください orz


それでは。
-- 
U.Nakamura <usa@garbagecollect.jp>
これでごまかされるような最適化でいいの?>MS



In This Thread