0
我提到這個帖子是二次方程的複數根。因此,我使用OpenCV和std庫編寫了類似於C++的東西,但我總是得到NaN,不知道爲什麼。二次方根顯示NaN
cv::Vec3f coefficients(1,-1,1);
cv::Vec<std::complex<float>,2> result_manual = {{0,0},{0,0}};
float c = coefficients.operator()(0);
float b = coefficients.operator()(1);
float a = coefficients.operator()(2);
std::cout << "---------manual method solving quadratic equation\n";
double delta;
delta = std::pow(b,2)-4*a*c;
if (delta < 0) {
result_manual[0].real(-b/(2*a));
result_manual[1].real(-b/(2*a));
result_manual[0].imag((float)std::sqrt(delta)/(2*a));
result_manual[1].imag((float)-std::sqrt(delta)/(2*a));
}
else {
result_manual[0].real((float)(-b + std::sqrt(delta))/2*a);
result_manual[1].real((float)(-b - std::sqrt(delta))/2*a);
}
std::cout << result_manual[0] << std::endl;
std::cout << result_manual[1] << std::endl;
結果
---------manual method solving quadratic equation
(0.5,-nan)
(0.5,nan)
只是一個猜測,但如果'delta'爲負,'sqrt(delta)'將返回NaN,對吧? – PaulR
您需要檢查增量是多少。如果它是負數,那麼'sqrt'不會起作用 – NathanOliver
@NathanOliver:我在我的問題中發佈的鏈接是對負數做一個sqrt並且它是一個可接受的答案。 – infoclogged