異常な動作

double型の中身(printfで表示)が
135.000000
256.000000
の変数を int にキャストすると
134
255
になる状況がある。そして、
中身
257.000000
を int にキャストすると
257
になる。後者が当然正しい動作。floor()を使っても同じ結果。浮動小数点のどこかに異常があるようだ。256を超えたり超えなかったりのあたりで違いが出る。だが、ちょっと短いテストのコードを書いたかぎりではちゃんと動いている。何回も演算を繰り返した変数にだけこの異常が出るのか? どう直せばいいのか……コンパイラオプションで高速浮動小数点を切ってもだめだ。
何のバグなんだ?コンパイラ?CPU?
というか実行環境によって違う結果になるんじゃねえかこれ。本気で絶望的だ。固定小数点を実装しろとでも言うのか。無理だ。
☆☆☆☆☆☆
簡単に状態を説明すると、画面下から落ちたキャラを画面上へワープさせたあとy座標256のとこのブロックまで「落ちて来る最中」上記の小数点の異常が出て、ブロックをすり抜けてしまった(おかげで異常に気が付けた)。画面上方へのワープの距離の#defineに0.001を足してみたらなんとかなったけど(少なくとも見た目上は)……。