私は次のコードを持っています。これは私が抱えている問題を示しています。比較はどのように評価されていないのですか?これは整数と浮動小数点の比較の制限ですか?浮動小数点数によるC++の比較
#include <iostream>
int main(){
double m = -0.625;
if((-1)<=m<=0){
std::cout << "Enter here" <<std::endl;
}
return 0;
}
私は次のコードを持っています。これは私が抱えている問題を示しています。比較はどのように評価されていないのですか?これは整数と浮動小数点の比較の制限ですか?浮動小数点数によるC++の比較
#include <iostream>
int main(){
double m = -0.625;
if((-1)<=m<=0){
std::cout << "Enter here" <<std::endl;
}
return 0;
}
あなたはC.で、次のように変更し、それがうまくいくように3つの者間の比較を行うことはできません。
if((-1) <= m && m <= 0){
std::cout << "Enter here" <<std::endl;
}
条件をこの中に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){
-1 <= m <= 0
は、(-1 <= m) <= 0
に相当します。この例では
、-1
は暗黙m
と<=
演算子を使用するためにfloat
に変換されます。この式の結果はbool
です。この結果は、0
の<=
演算子を使用するために暗黙的にint
に変換されます。 boolは0
または1
(false
またはtrue
)に変換されるため、この条件文はm
が-1
より小さい場合にのみtrueになります。
if文を構造化することは数学的な観点からは理にかなっていますが、コンパイラが望むものが分かるように明示的に分割する必要があります。
はあなたがC++で、またはほとんどの言語ではそのようなチェーン比較演算子をすることはできません。この
-1 <= m && m <= 0
を試してみてください。私が知っている唯一の言語はPythonです。 – user2357112
ahhh私は見る...これは理由を説明するだろう – Belphegor
あなたは '-1'の周りにかっこを必要としません。 –