2017-08-24 14 views
0

によって、小数点の比較は最近、私はプログラムに出くわした:私はどのようにコードが印刷さはいを理解
コードの説明とプロセッサ

float a = 0.7; 
if(a < 0.7) 
    printf("Yes"); 
else 
    printf("No"); 


。しかし、同じ不平等の右側には0.7ではない。 'a'と '0.7'のバイナリ値は同じではありませんか?
なぜ0.7ですか、0.7として使用されますが、変数 'a'は0.7より小さい値を持っています。なぜなら0.7の明確なバイナリ表現がないからです。

答えて

2

私はあなたがプログラムに関するさらなるステップを考えてうれしいです。
実際には、変数 'a'のデータ型が で、値が '0.7'であるために結果が得られます。 「0.7」データ 型ダブルでありながら

変数「」は、データ型フロートです。小数点のデフォルト動作です。 倍精度データ型はの倍精度をfloatの精度よりも倍大きくします。あなたがもし条件を置き換える場合は、あなたのコードで 、:

if(a < 0.7f) 


結果が異なることになります。あなたのプログラムは出力 を "いいえ"とします。クロスチェックする別の方法は、コードの行以下であろう。この場合

printf("%d", sizeof(0.7)); 
printf("%d", sizeof(a)); 


を、出力(これは変化してもよい)8及び4あろう。 は、あなたの質問に来て、それらのどれも二重に安全のために、二重のデータ型と小数が実際に0.7

+2

であることにより 近い、メイン 中0.7レジスタのメモリとして格納されていないけどさ、あなたもおそらくべき'0.7 'ではなく' a'に '0.7f'を割り当てます。 – paxdiablo

+1

'if(a <0.7f)'と「結果は異なる」 - >たぶん。 'FLT_EVAL_METHOD'の値のような他の要素が適用されます。 – chux

+1

'double'と' float'が数学的な0.7に近づいているのは真ですが、それらが異なっていても 'a <0.7'のようにどちらが大きいのかは詳しくは分かりません。 – chux