這裏是我的意思是試圖做的std ::戰俘給出了分數指數錯誤逼近
double x=1.1402
double pow=1/3;
std::pow(x,pow) -1;
結果是0,但我預計0.4465
公式是(1 + x) ^3= 1.1402
,找到x
。
這裏是我的意思是試圖做的std ::戰俘給出了分數指數錯誤逼近
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。嘗試pow(x, 1.0/3.0);
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。
許多人指出,1/3 = 0,但沒有解釋爲什麼會這樣。
C和C++將根據操作數的類型執行操作。由於兩個操作數都是整數,因此它會執行整數除法來創建整數結果。當強制將該整數結果賦值給雙變量時,它會將整數0轉換爲雙精度值0.0。
沒有必要使兩個操作數加倍,如果其中任何一個是雙倍,則編譯器會在執行操作之前將另一個轉換爲雙倍。 1.0/3或1/3.0將返回您預期的結果,1.0/3.0也會返回。
調試提示:如果您只是檢查傳遞給pow()的參數,顯然pow()沒有錯。你會看到第二個參數的值是零而不是1/3,表明pow()運行正常,問題在於你的代碼。 – 2009-10-16 21:13:04
好吧,我已經解決了它..愚蠢的整數 – vehomzzz 2009-10-16 21:13:39
每個人都犯了這個錯誤。 – mob 2009-10-16 21:18:57