вывод кода c - PullRequest
       37

вывод кода c

0 голосов
/ 27 января 2012

Почему выход дает 3, ожидая -3. Как обработать такую ​​предварительную обработку в c?

#include<stdio.h>
#include<math.h>
#define sq(x) ((x<0)?sqrt(-x):sqrt(x))

int main()
{
    int x;
    x=sq(-9);
    printf("%d\n",x);
    return 0;
}

Ответы [ 5 ]

4 голосов
/ 27 января 2012

потому что ваш # define "sq" проверяет, является ли оно отрицательным числом, и превращает его в положительное число, прежде чем вычислять квадратный корень.

выполняет sqrt (-x), то есть sqrt (- (- 9)) (отрицательный отрицательный - это положительный)

, поэтому он делает sqrt (9)

1 голос
/ 27 января 2012

Подожди, подожди, подожди.

Мы пытаемся нарушить основные правила математики здесь?

Квадратный корень из -9 равен 3 i .

Это потому, что (-3) ^ 2 равно 9. Отрицательные числа имеют «мнимые» квадратные корни. sqrt (-1): i . Не -1 (-1) ^ 2 равно 1.

1 голос
/ 27 января 2012

Код делает именно то, что ему говорят, я думаю.

sq(x) сначала проверяет на x < 0 - в вашем случае это правда, поэтому sq(x) вызывает sqrt(-(-9)) - что составляет 3.

Попытка найти решение (x < 0) ? -sqrt(-x) : sqrt(x), которая возвратит отрицательные корни для отрицательного x (моя лучшая интерпретация вашего намерения).

1 голос
/ 27 января 2012

У вас есть это определение:

define sq(x)  ((x<0)?sqrt(-x):sqrt(x))

Поскольку вы передаете -9, x<0 соответствует истине, поэтому он делает sqrt(9), что составляет 3.

Затем вы печатаете 3.

0 голосов
/ 27 января 2012

Если вы ожидаете -3, то вы, вероятно, имели в виду

#define sq(x)  ((x<0)?-sqrt(-x):sqrt(x))

но почему вы ожидаете, что отрицательный квадратный корень из отрицательного числа за мной.

...