SML#の整数変換のバグ [SML]
[2014/4/5追記] この記事に記載の事象はSML#2.0.0では修正されていることを確認しました。
SMLのWORDのtoIntとtoIntXは元の整数値をそのまま正数とみるか負数とみるかの違いがある。たとえばWord8で0xffだったら前者が255、後者が-1になる。
http://www.standardml.org/Basis/word.html#SIG:WORD.toInt:VAL
SML/NJでは次の通り。
他のSML実装でも仕様通りに動く。
しかしSML#ではWord8.toIntとWord8.toIntXが同じ結果を出す。
これは困る…ちなみにWordで同様のことをすると下記のようになる。toIntとtoIntXが同じ実装ってわけでもないようだ。
これもよくわからない動き。訂正:これはこれでよかった。
SMLのWORDのtoIntとtoIntXは元の整数値をそのまま正数とみるか負数とみるかの違いがある。たとえばWord8で0xffだったら前者が255、後者が-1になる。
http://www.standardml.org/Basis/word.html#SIG:WORD.toInt:VAL
SML/NJでは次の通り。
- Word8.toInt 0wxff; val it = 255 : int - Word8.toIntX 0wxff; val it = ~1 : int
他のSML実装でも仕様通りに動く。
しかしSML#ではWord8.toIntとWord8.toIntXが同じ結果を出す。
SML# version 1.2.0 (2012-11-14 18:25:26 JST) for x86-linux # Word8.toInt 0wxff; val it = ~1 : int # Word8.toIntX 0wxff; val it = ~1 : int
これは困る…ちなみにWordで同様のことをすると下記のようになる。toIntとtoIntXが同じ実装ってわけでもないようだ。
# Word.toInt 0wxffffffff; uncaught exception: Overflow # Word.toIntX 0wxffffffff; val it = ~1 : int
2014-01-19 00:07
nice!(0)
コメント(0)
トラックバック(0)
コメント 0