• ベストアンサー

C#のfloatに代入した値の==判定について

普段 0.0000f~1.0000f の値で利用しているfloat型変数のAを if (A <= 0.01f) { A = -1f; } if (A == -1f) { 処理; } の様な==判定をして開発環境ではちゃんと動作しました。 代入する値は一桁の数値だけです。 これってプログラムを動かす環境によっては ==判定が起こらないなどの危険があるのでしょうか? 絶対に別の設計をした方が良いほど危ない行為だったりしますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

浮動小数点は、2のべき乗の和で表される数(負数含む)を有効桁数の範囲内で正確に表せます。 1 は、2の0乗なので、-1も正確に表せます。 A=-1f したのであれば、A==-1fはどんな環境でも常に真になります。 ただ、こう書いた方が分かりやすいかと思います。 small=false; if (A <= 0.01f) { small = true; } if (small) { 処理; }

noname#228046
質問者

お礼

1と-1は正確に表せるんですね。 変数の命名や乱立で混乱しがちですがやはりbool値をちゃんと使う方が 後で見た時にハッキリ分かりますよね。 ご回答ありがとうございました。

関連するQ&A