I
来自cppreference.com
| 在标头 <complex.h> 定义
|
||
| |
(C99 起) | |
I宏展开成_Complex_I或_Imaginary_I。若实现不支持叙述类慈宁宫,则该宏会始终展开成{lc|_Complex_I}}。
一个程序可以取消定义,并能在随后重定义宏I。
注意
该宏名字不是i,虽然这是数学上的虚数单位名称。因为i已经用于大量C程序中了,例如作为循环变量。
宏I常用于组成复数,通过表达式,如x + y*I。
若I被定义成_Complex_I,则该表达式会在y为-0.0时创建一个虚部为+0.0的值,这对拥有分支的复变函数有显著影响。宏CMPLX提供精确构造复数的途径。
GCC提供了一种不可移植的扩展,它允许通过在实数文字常量后指定后缀i:1.0fi、 1.0i及1.0li是GNU C中的虚数单位。从C++14开始,同样的方式是标准C++的一部分(1.0if、1.0i及1.0il是C++中的虚数单位)。
示例
运行此代码
#include <stdio.h>
#include <complex.h>
int main(void)
{
printf("I = %.1f%+.1fi\n", creal(I), cimag(I));
double complex z1 = I * I; // 虚数单位平方
printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1));
double complex z = 1.0 + 2.0*I; // 在C11前组成复数的通常途径
printf("z = %.1f%+.1fi\n", creal(z), cimag(z));
}
输出:
I = 0.0+1.0i
I * I = -1.0+0.0i
z = 1.0+2.0i
参考
- C11 标准(ISO/IEC 9899:2011):
- 7.3.1/6 I (第 188 页)
- G.6/1 I (第 537 页)
- C99 标准(ISO/IEC 9899:1999):
- 7.3.1/4 I (第 170 页)
- G.6/1 I (第 472 页)
参阅
(C99) |
虚数单位常量 i (宏常量) |
(C99) |
复数单位常量 i (宏常量) |
(C11)(C11)(C11) |
由实部和虚部构建复数 (宏函数) |
operator""i 的 C++ 文档
| |