Shiro Kawai
shiro****@lava*****
2003年 5月 10日 (土) 21:02:47 JST
ぐはっ。痛恨のバグ。 From: OGURISU Osamu <oguri****@lagen*****> Subject: [Gauche-devel-jp] string->number Date: Sat, 10 May 2003 19:05:28 +0900 > gosh> (string->number "4653136.503") > 4653136.502: > 途中、値が0.001減って、余分な : がついてしまいます。 > なんなんでしょうか? ':' はASCIIで'0'の次の文字です。10進変換のところをしくじって、 最後の桁を'3'とすべきところを'2'にしちゃったんで、その次の桁に 行った時にオーバーフローして':'になっちゃった…と考えると 辻褄が合います。 ……デバッグ中…… 見つけました。 こういうバグは恐いです。このコード部分を通るのはレアケースで、 更にこの不等号が意味を持つのはその中でも一部の場合だけ、なのでした。 見つけて頂いて幸いでした。ランダムデータによるテストでは こういうのは捕まえられませんね。 全てのブランチを通るテストケースを書かないといけないんでしょうね。 --shiro RCS file: /cvsroot/gauche/Gauche/src/bignum.c,v retrieving revision 1.50 diff -c -r1.50 bignum.c *** bignum.c 21 Apr 2003 23:07:28 -0000 1.50 --- bignum.c 10 May 2003 11:33:20 -0000 *************** *** 364,370 **** if (br->size < by->size) return -1; for (i=br->size-1; i>=0; i--) { ! if (i > by->size) { if (br->values[i]) return 1; continue; } --- 364,370 ---- if (br->size < by->size) return -1; for (i=br->size-1; i>=0; i--) { ! if (i >= by->size) { if (br->values[i]) return 1; continue; }