私はタイトルがすべてを言うと思う。私は1/12の部分として変数iを定義したいと思います。しかし、私はより具体的な0なぜ「double i = 1/12;」ですか? i = 0になるか?
double i = 1/12;
std::cout << i; // Output: 0
か、ですが、私は何かの力を計算したい:
im_ = std::pow((1 + i), (1/12)) - 1;
しかし、コンパイル結果が間違っている(1/12)
0とし、これを評価します。
私はタイトルがすべてを言うと思う。私は1/12の部分として変数iを定義したいと思います。しかし、私はより具体的な0なぜ「double i = 1/12;」ですか? i = 0になるか?
double i = 1/12;
std::cout << i; // Output: 0
か、ですが、私は何かの力を計算したい:
im_ = std::pow((1 + i), (1/12)) - 1;
しかし、コンパイル結果が間違っている(1/12)
0とし、これを評価します。
単純なので、1/12
は浮動小数点演算ではなく整数演算として評価されます。
1/12
は整数計算では小数部分を考慮しないため、0になります。
予想される結果を得るには、数値を浮動小数点リテラル(1.0/12.0
)として書き留める必要があります。
詳細はこちらをご覧ください。Why can't I return a double from two ints being divided
それは私を混乱させる。私は0.5のような小数部分として二重を定義することができます。それで、出力は0.5となります。 – Steve
@Steve:2つの整数を除算すると、コンパイラは整数の除算を行います。整数除算は常にint結果を与えます。 doubleを取得するには、少なくとも1つのdoubleを含む除算を指定すると、コンパイラは浮動小数点除算を実行します。 –
@ Matthieu.V Nope。あなたも、愚か者を読む必要があります。 –
iを 'float i = 1/12; 'と定義すると、出力も0になります。 – Steve
もちろんです。あなたは実際にあなたが与えられた答えを複写で読むべきです。 –