SSブログ

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

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。