タイトルのままです。
BMIを算出するプログラムを書いています。
計算して算出したBMIを元に、if文でそれぞれのBMIが
やせ~肥満のどこに分類されるかの部分を書いています。
身長=100、体重=19.8で算出したBMI(float)が19.8となりますが、
if (BMI<19.8){}の中に入ってきてしまうのです。
19.8って、19.8未満じゃありませんよね?
混乱してしまっていておかしなことを言っているかもしれません。
すごく当たり前のことだったらすみません
どうしたら19.8を「<19.8」の中に入れずにすみますか?
それとも、19.8という数値は「<19.8」ですか?
ご教授お願い致します。
float BMI = 19.8 なのに、BMI < 19.8がTrueとなる
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: float BMI = 19.8 なのに、BMI < 19.8がTrueとなる
表示の仕方によっては四捨五入された19.8かも知れません。つまり、19.75でも19.8と表示されてしまう状況は考えられます。
そうするとif (BMI<19.8)の条件を満たす可能性は有ります。
そうするとif (BMI<19.8)の条件を満たす可能性は有ります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: float BMI = 19.8 なのに、BMI < 19.8がTrueとなる
リテラルにfを付けないで比較しているからではないでしょうか。
実行結果
http://ideone.com/Ww7hO2
#include <stdio.h>
int main(void) {
float BMI = 19.8f;
if (BMI < 19.8f) {
printf("BMI < 19.8f");
}
if (BMI < 19.8) {
printf("BMI < 19.8");
}
return 0;
}
http://ideone.com/Ww7hO2
Re: float BMI = 19.8 なのに、BMI < 19.8がTrueとなる
お返事ありがとうございます。
途中で処理を止めて見てみたのですが、
こんなかんじでした。

これでも条件を満たす可能性があるでしょうか?
すみませんがお返事お願い致します。
途中で処理を止めて見てみたのですが、
こんなかんじでした。

これでも条件を満たす可能性があるでしょうか?
すみませんがお返事お願い致します。
Re: float BMI = 19.8 なのに、BMI < 19.8がTrueとなる
(競技プログラミングでの)実数の比較では、EPSと呼ばれる小さい値を用いて誤差による判定エラーを回避することが多いです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: float BMI = 19.8 なのに、BMI < 19.8がTrueとなる
この場合は、h2so5さんの指摘の可能性が高いでしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: float BMI = 19.8 なのに、BMI < 19.8がTrueとなる
>>h2so5さん
すみません!できました!
リテラルというものを知りませんでした、今すぐ調べます!
頭がパニックになって、19.8は実は19.8未満なのかもしれないなどと思っておりました!
助けていただいて本当に有難うございます!!
すみません!できました!
リテラルというものを知りませんでした、今すぐ調べます!
頭がパニックになって、19.8は実は19.8未満なのかもしれないなどと思っておりました!
助けていただいて本当に有難うございます!!
Re: float BMI = 19.8 なのに、BMI < 19.8がTrueとなる
>>みけCATさん
ありがとうございました!
その数字についても調べます!!
ありがとうございました!
その数字についても調べます!!