float BMI = 19.8 なのに、BMI < 19.8がTrueとなる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
AI
記事: 27
登録日時: 13年前

float BMI = 19.8 なのに、BMI < 19.8がTrueとなる

#1

投稿記事 by AI » 11年前

タイトルのままです。
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」ですか?
ご教授お願い致します。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: float BMI = 19.8 なのに、BMI < 19.8がTrueとなる

#2

投稿記事 by softya(ソフト屋) » 11年前

表示の仕方によっては四捨五入された19.8かも知れません。つまり、19.75でも19.8と表示されてしまう状況は考えられます。
そうするとif (BMI<19.8)の条件を満たす可能性は有ります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: float BMI = 19.8 なのに、BMI < 19.8がTrueとなる

#3

投稿記事 by h2so5 » 11年前

リテラルにfを付けないで比較しているからではないでしょうか。

コード:

#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

AI
記事: 27
登録日時: 13年前

Re: float BMI = 19.8 なのに、BMI < 19.8がTrueとなる

#4

投稿記事 by AI » 11年前

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

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: float BMI = 19.8 なのに、BMI < 19.8がTrueとなる

#5

投稿記事 by みけCAT » 11年前

(競技プログラミングでの)実数の比較では、EPSと呼ばれる小さい値を用いて誤差による判定エラーを回避することが多いです。

コード:

#define EPS (1e-7)

float BMI=19.8f;

if(BMI+EPS<19.8f) {
    /* BMI<19.8 */
}
if(BMI<19.8f+EPS) {
    /* BMI<=19.8 */
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: float BMI = 19.8 なのに、BMI < 19.8がTrueとなる

#6

投稿記事 by softya(ソフト屋) » 11年前

この場合は、h2so5さんの指摘の可能性が高いでしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

AI
記事: 27
登録日時: 13年前

Re: float BMI = 19.8 なのに、BMI < 19.8がTrueとなる

#7

投稿記事 by AI » 11年前

>>h2so5さん
すみません!できました!
リテラルというものを知りませんでした、今すぐ調べます!
頭がパニックになって、19.8は実は19.8未満なのかもしれないなどと思っておりました!
助けていただいて本当に有難うございます!!

AI
記事: 27
登録日時: 13年前

Re: float BMI = 19.8 なのに、BMI < 19.8がTrueとなる

#8

投稿記事 by AI » 11年前

>>みけCATさん
ありがとうございました!
その数字についても調べます!!

閉鎖

“C言語何でも質問掲示板” へ戻る