这对你们来说可能很容易,但我找不到明确的答案,我只想确保我没有忽略任何东西。我有一个方程,我知道它允许复杂的解决方案,但我使用"双精度"和/或"浮点数"在 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