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