これが私がやろうとしていることです
double x=1.1402
double pow=1/3;
std::pow(x,pow) -1;
結果は0ですが、0.4465を期待しています
式は (1 + x) ^3= 1.1402
、 を見つけますx
。
これが私がやろうとしていることです
double x=1.1402
double pow=1/3;
std::pow(x,pow) -1;
結果は0ですが、0.4465を期待しています
式は (1 + x) ^3= 1.1402
、 を見つけますx
。
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;
}
1/3
は整数演算として行われるため、 に 0 を代入していますpow
。試すpow(x, 1.0/3.0);
多くの人が1/3=0と述べていますが、なぜそうなるのか説明していません。
CおよびC++は、オペランドのタイプに基づいて操作を実行します。両方のオペランドが整数であるため、整数除算を実行して整数の結果を作成します。その整数の結果をdouble変数に強制的に割り当てると、整数0がdouble0.0に変換されます。
両方のオペランドをdoubleにする必要はありません。一方がdoubleの場合、コンパイラは操作を実行する前にもう一方もdoubleに変換します。1.0/3または1/3.0はどちらも、1.0 / 3.0と同様に、期待した結果を返します。
あなたの 1/3 は整数除算であり、整数除算の結果は 0 です。