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