Отрицательный квадратный корень - PullRequest
4 голосов
/ 12 августа 2011

Как вы берете квадратный корень из отрицательного числа в C ++?
Я знаю, что это должно вернуть действительную и сложную часть, я получу NaN?
Как мне взять действительную часть? *

Ответы [ 4 ]

6 голосов
/ 12 августа 2011
#include <complex>

int main()
{
    std::complex<double> two_i = std::sqrt(std::complex<double>(-4));
}

или просто

std::complex<double> sqrt_minus_x(0, std::sqrt(std::abs(x)));
5 голосов
/ 12 августа 2011

sqrt(-x), где x - положительное число, просто 0 + sqrt(x)*i.Действительная часть равна просто 0.

В общем случае действительная часть равна x > 0 ? sqrt(x) : 0, а мнимая часть равна x < 0 ? sqrt(x) : 0.

3 голосов
/ 12 августа 2011

Если то, что вы называете отрицательным числом, является действительным, то действительная часть его квадратного корня должна быть просто 0?

0 голосов
/ 12 августа 2011

Может быть, что-то вроде этого

double negativeNumber = -321;
std::complex<double> number( negativeNumber, 0 );
std::complex<double> result = sqrt( number );
double realpart = result.real();
...