6

これが私がやろうとしていることです

 double x=1.1402
 double pow=1/3;
 std::pow(x,pow) -1;

結果は0ですが、0.4465を期待しています

式は (1 + x) ^3= 1.1402、 を見つけますx

4

4 に答える 4

21

1/3 は 0 です。これは整数除算です。

試す:

double pow = 1.0 / 3.0;

為に:

#include <iostream>
#include <cmath>

int main(void)
{
 double x = 1.1402;
 double pow = 1.0/3.0;
 std::cout << std::pow(x, pow) - 1;

}
于 2009-10-16T20:52:09.603 に答える
12

1/3は整数演算として行われるため、 に 0 を代入していますpow。試すpow(x, 1.0/3.0);

于 2009-10-16T20:52:56.043 に答える
9

多くの人が1/3=0と述べていますが、なぜそうなるのか説明していません。

CおよびC++は、オペランドのタイプに基づいて操作を実行します。両方のオペランドが整数であるため、整数除算を実行して整数の結果を作成します。その整数の結果をdouble変数に強制的に割り当てると、整数0がdouble0.0に変換されます。

両方のオペランドをdoubleにする必要はありません。一方がdoubleの場合、コンパイラは操作を実行する前にもう一方もdoubleに変換します。1.0/3または1/3.0はどちらも、1.0 / 3.0と同様に、期待した結果を返します。

于 2009-10-16T21:05:40.920 に答える
1

あなたの 1/3 は整数除算であり、整数除算の結果は 0 です。

于 2009-10-16T20:53:17.420 に答える