- ベストアンサー
C#のfloatに代入した値の==判定について
普段 0.0000f~1.0000f の値で利用しているfloat型変数のAを if (A <= 0.01f) { A = -1f; } if (A == -1f) { 処理; } の様な==判定をして開発環境ではちゃんと動作しました。 代入する値は一桁の数値だけです。 これってプログラムを動かす環境によっては ==判定が起こらないなどの危険があるのでしょうか? 絶対に別の設計をした方が良いほど危ない行為だったりしますか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
浮動小数点は、2のべき乗の和で表される数(負数含む)を有効桁数の範囲内で正確に表せます。 1 は、2の0乗なので、-1も正確に表せます。 A=-1f したのであれば、A==-1fはどんな環境でも常に真になります。 ただ、こう書いた方が分かりやすいかと思います。 small=false; if (A <= 0.01f) { small = true; } if (small) { 処理; }
お礼
1と-1は正確に表せるんですね。 変数の命名や乱立で混乱しがちですがやはりbool値をちゃんと使う方が 後で見た時にハッキリ分かりますよね。 ご回答ありがとうございました。