今日の雑記

生きることでいっぱいいっぱい

Dの型変換

D0.108(ひょっとして107?)から、なんか型変換の仕様が変わった気がする。
例えば、以下のようなコード、

TskBuf[id].rot_add = (rand() % 30) - 15; // rot_addは浮動少数

を、D0.106でコンパイルすると、

rot 0.000000
rot -10.000000
rot 6.000000

こんな感じの結果なのだが、D0.108でコンパイルすると、

rot 4294967296.000000
rot 6.000000
rot 4294967296.000000

と、とんでもない結果になる。
これを直すには、コードを、

TskBuf[id].rot_add = (rand() % 30) - 15.0f; // rot_addは浮動少数

このように、右辺値に左辺値の型が含まれていればいいようだ。または、

TskBuf[id].rot_add = cast(float)((rand() % 30) - 15); // rot_addは浮動少数

でも良いかもしれない。
ひょっとして、これなのかなー?
http://www.kmonos.net/alang/d/changelog.html#new0107

  • 算術変換ルールをC99に適合するように修正。

C99の仕様変更をよく知らないから、解らないや。

追記:ちなみに、本家では0.109がアップされているようです。
本家:http://www.digitalmars.com/d/
履歴:http://www.digitalmars.com/d/changelog.html#new0109