我試圖採用表達式的第11個根,並得到-inf
的返回。以超過2的根爲基礎
std::cout << pow(j,(1.0/11.0)) << std::endl;
其中j
只是一些log
表達式。我已檢查過該號碼以確保它是有效的,而且是。我認爲這是權力表達式運行的方式。有一個更好的方法嗎?謝謝。
是的,我已將cmath
納入我的工作。
我試圖採用表達式的第11個根,並得到-inf
的返回。以超過2的根爲基礎
std::cout << pow(j,(1.0/11.0)) << std::endl;
其中j
只是一些log
表達式。我已檢查過該號碼以確保它是有效的,而且是。我認爲這是權力表達式運行的方式。有一個更好的方法嗎?謝謝。
是的,我已將cmath
納入我的工作。
我不能想到pow返回-inf的正當理由,如果你的輸入是邊緣理性的。但是如果你正在傳遞一個負數,一些可能是值得嘗試的是:
if(j==0) return 0;
if(j<0) return -pow(-j, 1.0/11.0);
return pow(j,1.0/11.0);
嘗試尋找FPU錯誤
也可以嘗試戰俘之前添加此
asm { fninit; };
碰撞前j的價值將是一個很好的開始與我們分享。
嘗試的結果存儲戰俘的一些浮點/雙精度變量
儘量減少你的代碼(由部分關閉一切一部分)
讓我們知道你有什麼發現。
完全可編譯的源代碼可以提供幫助。還使用輸入值? ps:http:// ideone。com –
你也可以使用exp():double _11th_root = exp(log(j)/11.0); –
請注意,生根會降低你的精確度,就像災難性的取消一樣,例如,在平方根之後你將精度減半,我不知道第11根會有多精確,但它不會許多。 – Cramer