So-net無料ブログ作成

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では次の通り。

- 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


これもよくわからない動き。訂正:これはこれでよかった。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0