Rubyで遊んだ日々の記録。あくまで著者視点の私的な記録なので、正確さを求めないように。
Rubyと関係ない話題にはその旨注記しているはず。なので、一見関係無いように見える話題もどこかで関係あるのかもしれません。または、注記の書き忘れかもしれません...
_ ところで、先日来SEGV していると言っているスクリプトはnadokaさんだったりします。
たぶん私は世界で最も早く(*1)nadokaさんを常用するようになった人だったりするのですが(ただし現在はまだmadokaちゃんと併用中)、特に問題なく使えてます。問題あったらRubyだから直せるしな!
_ で、coreを吐いてるのはもちろんnadokaさんが悪いんじゃなくてRubyのどっかが悪いのですが、どこなのかなあ。
何しろ数日間動かしておかないと落ちないので困っちゃう。
で、裏を返すと、nadokaさんは数日間動かしっぱなしにしておいてもいちおうけなげに生きているようです。えらいねえ。
_ ょゎさんとこの話。
mingw32版はmswin32版と同様。bccwin32版は(たぶん)OK。
C:\>type nan.c
#include <math.h>
#include <stdio.h>
main()
{
printf("%f\n", fmod(0.0, 0.0));
}
C:\>cl nan.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 11.00.7022 for 80x86
Copyright (C) Microsoft Corp 1984-1997. All rights reserved.
nan.c
Microsoft (R) Incremental Linker Version 5.12.8181
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/out:nan.exe
nan.obj
C:\>nan.exe
-1.#IND00
C:\>
_ というわけなので、自前でsprintf(2)を実装するしかないのです。
誰か頑張れ。
_ ずっと頭に引っかかっていたのでよくよく考え直してみたら、fmod(x, y)でyが0だったら、単に定義域エラーであるかもしれない。だからこれは例としてよくない(printfが発狂しているのは事実としても)。
というわけで、絶対にNaNを返す計算式を考えたいんだけど、えーと、何があるかなあ... マクロNANでいいような気もするけど、VC++にはないし。
もっと暇なときに真面目に調べてみよう。
_ CVSの穴を突かれてRubyのサイトが攻撃された、という話。
物理的被害はまだよくわかんない(たいしたことなさげ?)のだけど、対応に割かれる人的資源が本当にもったいない。
_ 「オープンソース関連が狙われてるところを見ると、意図的にやってるんだろうなあ」って、最近やられてるのはたいていCVSの穴からやられてる(らしい)わけで、そうなると必然的にオープンソース関連のところばかりになるんじゃないでしょうか。
_ C90でもC99でも、/の第2オペランドが0の場合は未定義、としか書かれていない気がする。うーん。
C90にはNaNあるいは非数という言葉は現れないように見える。見落としていなければ。
C99になると、例えばprintfの%fなどでNaNをどう表示するかとか、マクロNANを用意しろとかいう話が出てはくるのだけどね。
_ というわけで、printfが発狂する(というか処理系独自の出力をしている)ことを責めても仕方ないのかもしれない。
0.0で割るとNaNになるだけでも感謝しないといけないのかもなあ。
まあ、結論としては、自前でsprintf相当を実装するしかない、ってのは変わらないんだけど。
被捕捉アンテナ類
[\ay antenna (testing)]
[Ant]
[Antenna-Julia]
[LayserあんてなV2]
[nAntenna]
[nuance de Antenna]
[Rabbit's Antenna]
[Read List]
[Ruby hotlinks 五月雨版 (るるりん。)]
[してたま (私的アンテナ with たまてばこ)]
[ただのあんてな]
[ちゃらんぽらん]
[でこぽんリンク]
[なよろアンテナ]
[にっきトレーサー]
[偽善者あんてな - 2nd season -]
[湘南日記放送局(SDB)]
[はてなの各アンテナ]