с ++ отрицательный квадратный корень - PullRequest
1 голос
/ 29 января 2012

Моя цель - напечатать ***, если квадратный корень отрицательный.Но я не могу придумать, как изменить текст по умолчанию nan на ***

for(int i=x1;i<=x2;i++){
   double y = sqrt(pow(i,2)+3*i-500);
    if(y = ?){
        outFile << "***";
    }

Итак, что я должен написать в операторе if, чтобы сделать это возможным?Или, может быть, есть другой способ проверить, является ли y значением nan, затем выведите *

Ответы [ 4 ]

8 голосов
/ 29 января 2012

Как насчет проверки на отрицательный вход для функции квадратного корня?

for (int i = x1; i <= x2; ++i)
{
    double x = pow(i, 2) + 3*i - 500;
    if (x < 0)
    {
        outFile << "***";
    }
    else
    {
        outFile << sqrt(x);
    }
}
3 голосов
/ 29 января 2012

Тестирование на NaN в C ++ - сложно .Просто используйте оператор if, чтобы избежать оценки sqrt, если его аргумент отрицательный.

2 голосов
/ 29 января 2012

Число нанов не равно ничему, даже самому себе.
Вы можете просто проверить, если if( y != y ).

0 голосов
/ 06 февраля 2012

Моя цель - напечатать *, если квадратный корень отрицательный. Но я не могу придумать, как изменить текст по умолчанию для Nan на *

Квадратный корень никогда не бывает отрицательным. Но это может быть сложно. Смотри https://en.wikipedia.org/wiki/Complex_number

Идея состоит в том, чтобы расширить набор чисел в так называемую комплексную плоскость , которая содержит специальное число i , для которого определено i² = -1 . Это позволяет нам обобщать квадратные корни:

sqrt (a b) = sqrt (a) sqrt (b)

Таким образом, мы можем разбить sqrt (-a) на sqrt (-1) sqrt (a) = i sqrt (a)

Это позволяет нам изменить вашу программу на

for(int i=x1;i<=x2;i++){
    double X = pow(i,2)+3*i-500;
    double y = sqrt(abs(x));
    if(X < 0){
        outFile << y << "i";
    } else {
        outFile << y;
    }
}
...