如果使用 REAL,C 如何处理复杂的方程



这对你们来说可能很容易,但我找不到明确的答案,我只想确保我没有忽略任何东西。我有一个方程,我知道它允许复杂的解决方案,但我使用"双精度"和/或"浮点数"在 C 中对其进行了编程。如果我不使用"复杂"类型,C 会简单地忽略复杂部分吗?换句话说,它只是返回真实的部分吗?不使用"复杂"会产生任何错误吗?谢谢。

C 中有一个"复杂"和一个"虚数"数据类型。但是,由于它被引入只有几年的时间,因此某些旧系统可能不支持它。因此,最好明确处理这种解决方案。

如果您正在执行像 sqrt(-1) 这样的非法操作,那么它将生成错误。

下面的帖子很可能会更好地回答您的疑问 如何在 C 中使用复数?

sqrt()的文档(如果您阅读了它)告诉您它返回域错误。

您可以通过测试用例自己找到这一点:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <errno.h>
int main(int argc, char *argv[])
{
    double foo = -1.234;
    double foo_sqrt = sqrt(foo);
    if (errno == EDOM) {
        fprintf(stderr, "Error: EDOM - Mathematics argument out of domain of function (POSIX.1, C99)n");
        return EXIT_FAILURE;
    }
    /* we never get here */
    fprintf(stdout, "sqrt(%f) = %fn", foo, sqrt(foo));
    return EXIT_SUCCESS;
}

然后编译并运行:

$ gcc -lm -std=c99 -Wall sqrt_test.c -o sqrt_test
$ ./sqrt_test
Error: EDOM - Mathematics argument out of domain of function (POSIX.1, C99)
$ echo $?
1

最新更新