C代码的输出

发布于 2024-12-29 09:35:10 字数 231 浏览 3 评论 0原文

为什么输出给出 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;
}

Why output is giving 3 , expecting -3. How to handle such preprocessing in 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;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

饭团 2025-01-05 09:35:11

因为你的#define“sq”检查它是否是负数,并在计算平方根之前将其转换为正数

,它执行 sqrt(-x) ,即 sqrt(-(-9)) (取负数的负数是积极)

所以它在做 sqrt(9)

because your # define "sq" checks if its a negative number and turns it into a positive number before calculating a square root

its doing sqrt(-x) which is sqrt(-(-9)) ( taking the negative of a negative is the positive)

so its doing sqrt(9)

画离情绘悲伤 2025-01-05 09:35:11

您有这样的定义:

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

由于您传递的是 -9,所以 x<0 为 true,因此它正在执行 sqrt(9),即 3。

然后打印 3 。

You have this define:

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

Since you're passing -9, x<0 is true, so it's doing sqrt(9), which is 3.

You then print the 3.

兔姬 2025-01-05 09:35:11

我认为代码完全按照它所告诉的那样执行。

sq(x) 首先测试 x x 0 - 在您的情况下,这是正确的,因此 sq(x) 调用 sqrt(-(-9)) - 这是 3.

尝试的解决方案是 (x < 0) 吗? -sqrt(-x) :sqrt(x),它将返回负x的负根(我对你的意图的最佳解释)。

The code is doing exactly what it's being told, I think.

sq(x) tests first for x < 0 - in your case, this is true, so sq(x) calls sqrt(-(-9)) - which is 3.

An attempted solution is (x < 0) ? -sqrt(-x) : sqrt(x), which will return negative roots for negative x (my best interpretation of your intent).

翻了热茶 2025-01-05 09:35:11

等等,等等,等等。

我们是否试图打破数学的基本规则?

-9 的平方根是 3 i。

那是因为 (-3)^2 是 9。负数有“虚数”平方根。 sqrt(-1) 是i。不是-1。 (-1)^2 是 1。

Wait, wait, wait.

Are we trying to break the basic rules of Math here?

The square root of -9 is 3 i.

That's because (-3)^2 is 9. Negative numbers have 'imaginary' square roots. sqrt(-1) is i. Not -1. (-1)^2 is 1.

烧了回忆取暖 2025-01-05 09:35:11

如果您期望 -3,那么您的意思可能是

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

但为什么您会期望负数的负平方根超出了我的范围。

If you expect -3, then you probably meant

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

but why would you expect negative square root of negative number is beyond me.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文