2017-12-15 11 views
-6

私はタイトルがすべてを言うと思う。私は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とし、これを評価します。

+2

@ Matthieu.V Nope。あなたも、愚か者を読む必要があります。 –

+0

iを 'float i = 1/12; 'と定義すると、出力も0になります。 – Steve

+0

もちろんです。あなたは実際にあなたが与えられた答えを複写で読むべきです。 –

答えて

1

単純なので、1/12は浮動小数点演算ではなく整数演算として評価されます。

1/12は整数計算では小数部分を考慮しないため、0になります。

予想される結果を得るには、数値を浮動小数点リテラル(1.0/12.0)として書き留める必要があります。

詳細はこちらをご覧ください。Why can't I return a double from two ints being divided

+0

それは私を混乱させる。私は0.5のような小数部分として二重を定義することができます。それで、出力は0.5となります。 – Steve

+0

@Steve:2つの整数を除算すると、コンパイラは整数の除算を行います。整数除算は常にint結果を与えます。 doubleを取得するには、少なくとも1つのdoubleを含む除算を指定すると、コンパイラは浮動小数点除算を実行します。 –

関連する問題