C
数值 | Numerics

I

I

在头文件中定义
#define I / *未指定* /(自C99以来)

I宏扩展为_Complex_I或_Imaginary_I。 如果实现不支持虚构类型,则宏总是展开为_Complex_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 ++的一部分,如C + +14(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; // imaginary unit squared printf("I * I = %.1f%+.1fi\n", creal(z1), cimag(z1) double complex z = 1.0 + 2.0*I; // usual way to form a complex number pre-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):

扩展内容

_Imaginary_I(C99)虚数单位常数i(宏常数)
_Complex_I(C99)复数单位常数i(宏常数)
CMPLXCMPLXFCMPLXL(C11)(C11)(C11)从实部和虚部构建一个复数(函数宏)

| 运算符“”i 的C ++文档 |