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

时间:2015-01-25 06:20:34

标签: c complex-numbers

这对你们来说可能很容易,但我找不到明确的答案,我只是想确定我不会忽视任何事情。我有一个方程式,我知道允许复杂的解决方案,但我使用“double”和/或“float”在C中编程。如果我不使用“复杂”类型,C是否会忽略复杂的部分?换句话说,它只是简单地返回真实部分吗?不使用“复杂”会产生任何错误吗?感谢。

2 个答案:

答案 0 :(得分:4)

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

如果您正在执行类似sqrt(-1)的非法操作,那么生成错误。

以下帖子最有可能更好地回答您的问题How to work with complex numbers in C?

答案 1 :(得分:2)

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) = %f\n", 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