Scala の BigInt に関しての既知のBug(?)に遭遇したけど最新版ではなおってるらしい・・・というメモ
これまとめた時点の情報なので、 2.8.2 や 2.9.2 、 2.10.0 のfinalが出るときはどーなるかわかりませんが、現状 2.8.1.finalも2.9.1.final もこんな動作らしいので気をつけましょう
Kenji Yoshida
@xuwei_k
scala> BigInt("100000000000000000000000000000000").isValidByte res0: Boolean = true ・・・え?(´・ω・`)バグってなイカ? isValidByte の意味とは・・・? #Scala
2011-09-19 14:50:06
Kenji Yoshida
@xuwei_k
isValidByte って、BigIntの内部の値がByteの範囲に収まるか否かじゃないの? ゴゴゴゴゴゴゴゴゴ(・Д・`)??? #Scala
2011-09-19 14:51:24
kmizu
@kmizu
@xuwei_k バグってますね。実装見るに、toIntとtoByteの結果を比較して判定していますが、このケースだと、toIntもtoByteも0返すのでアチャーな事になってるのかと。
2011-09-19 14:54:26
Kenji Yoshida
@xuwei_k
@kmizu そうですね、isValidByte の仕様の解釈が正しいとしたらバグってますね・・・。新たにバグが入ったとかではなく、2.9.1.finalでも2.8.1.finalでも同じ実装で同じ動作・・・
2011-09-19 15:00:34
Kenji Yoshida
@xuwei_k
> set resolvers += ScalaToolsSnapshots して > set scalaVersion := "2.10.0-SNAPSHOT" で > console すると最新版の #Scala が試せる sbt !
2011-09-19 15:06:02
Kenji Yoshida
@xuwei_k
http://t.co/0aTVBkTR あーそして、2.9.1で 「なんでBigInt に isValidLong だけないんだよ」 とか思ってたら、 trunk だと追加されてる・・・ #Scala
2011-09-19 15:11:38
Kenji Yoshida
@xuwei_k
今試したら 2.9.2-SNAPSHOT だと バグったまま(´・ω・`) そして、isValidLong は 2.9.2-SNAPSHOT には今のところ追加されてなくて、 2.10.0-SNAPSHOT だけか・・・
2011-09-19 15:17:45