2017-01-15 7 views
-2

私は次のコードを持っています。これは私が抱えている問題を示しています。比較はどのように評価されていないのですか?これは整数と浮動小数点の比較の制限ですか?浮動小数点数によるC++の比較

#include <iostream> 

int main(){ 

    double m = -0.625; 
    if((-1)<=m<=0){ 
     std::cout << "Enter here" <<std::endl; 
    } 
    return 0; 
} 
+0

を試してみてください。私が知っている唯一の言語はPythonです。 – user2357112

+0

ahhh私は見る...これは理由を説明するだろう – Belphegor

+0

あなたは '-1'の周りにかっこを必要としません。 –

答えて

2

あなたはC.で、次のように変更し、それがうまくいくように3つの者間の比較を行うことはできません。

if((-1) <= m && m <= 0){ 
     std::cout << "Enter here" <<std::endl; 
    } 
0

条件をこの中にif文を

if((-1) <= m <= 0){ 

は、

if((-1 <= m) < = 0){ 

と同等です。 -1は、Cでの部分式(-1 <= m)利回りCで1とtrueは、その後、1に変換され、期待される取得するために部分式1 <= 0利回り0 C内やC++でfalse ..

があなたの代わりに書くべき結果であることが++ m未満であります

if(-1 <= m && m <= 0){ 
0

-1 <= m <= 0は、(-1 <= m) <= 0に相当します。この例では

-1は暗黙m<=演算子を使用するためにfloatに変換されます。この式の結果はboolです。この結果は、0<=演算子を使用するために暗黙的にintに変換されます。 boolは0または1falseまたはtrue)に変換されるため、この条件文はm-1より小さい場合にのみtrueになります。

if文を構造化することは数学的な観点からは理にかなっていますが、コンパイラが望むものが分かるように明示的に分割する必要があります。

はあなたがC++で、またはほとんどの言語ではそのようなチェーン比較演算子をすることはできません。この

-1 <= m && m <= 0 
関連する問題