特别是,该类没有太多复数的数据结构定义。您可以通过以下方式表示它:
struct complex{
double real;
double imaginary;
};
但是虚数i = sqrt(-1)不能简化为基元类型,因为基数类型必然是实数。因此,它必须通过复杂产品隐式定义。这在允许运算符重载的面向对象语言中很容易做到,但是如何使用像 C 这样的过程语言来完成呢?
你可以这样写:
_Complex double x = _Complex_I;
您可以对复数进行通常的算术运算。标头#include <complex.h>
声明了常用数学函数(trig、根等)的复杂版本。
C11标准(ISO/IEC 9899:2011)的§6.2.5类型部分说:
¶10有三种真正的浮点类型,分别是
float
、double
和long double
。42)float
类型的值集是 类型double
;double
类型的值集是 键入long double
。¶11 有三种复杂类型,分别是
float _Complex
、double _Complex
和long double _Complex
。43)(复杂类型是有条件的 实现不需要支持的功能;参见 6.10.8.3.)真正的漂浮和 复杂类型统称为浮动类型。¶12 对于每个浮点类型都有一个对应的实数类型,它始终是实浮型 类型。对于真正的浮动类型,它是相同的类型。对于复杂类型,它是给定的类型 通过从类型名称中删除关键字
_Complex
。¶13 每个复杂类型都有与数组相同的表示和对齐要求 类型正好包含相应实数类型的两个元素;第一个元素是 等于复数的实部,虚部的第二元素 数。
42)参见"未来的语言方向"(6.11.1)。
43)虚数类型的规格见附件G。6.11.1 浮动类型
¶1 未来的标准化可能包括额外的浮点类型,包括那些 比
long double
更大的范围、精度或两者兼而有之。
还有库规范 §7.3 复数算术<complex.h>
:
7.3.1 引言
¶1 标头
<complex.h>
定义宏并声明支持复杂函数 算术。192)¶2 定义宏
__STDC_NO_COMPLEX__
不需要提供的实现 此标头也不支持其任何设施。¶3 每个概要指定了一个函数族,由一个主函数和一个主函数组成 或更多
double complex
参数和double complex
或double
返回 价值;以及其他具有相同名称但具有f
和l
后缀的函数,它们是 具有float
和long double
参数和返回值的相应函数。4 宏
complex
扩展到
_Complex
;宏_Complex_I
展开为类型
const float _Complex
的常量表达式,其值为 虚数单位。193)¶5 宏
imaginary
和
_Imaginary_I
定义当且仅当实现支持虚构类型;194)如果定义, 它们扩展到
_Imaginary
和具有虚数单位值的const float _Imaginary
型常量表达式。¶6 宏
I
扩展到
_Imaginary_I
或_Complex_I
。如果未定义_Imaginary_I
,I
应扩展到_Complex_I
。¶7 尽管有7.1.3的规定,程序可以取消定义,也许可以 重定义宏
complex
、imaginary
和I
。192)参见"未来的图书馆方向"(7.31.1)。
193)虚数单位是一个数i,使得i2= −1。
(第194段)虚数类型的规范见资料性附件G。
还有一个14页的附件G,开头是:
奇怪的是,附件G
(规范)
兼容 IEC 60559 的复数运算
G.1 引言
¶1 本附件补充了附录F,以指定复数算法以兼容 IEC 60559 实浮点运算。定义
__STDC_IEC_559_COMPLEX__
应符合本附件中的规格。375)375)未定义
__STDC_IEC_559_COMPLEX__
的实现不需要符合这些规范。G.2 类型
¶1 有一个新的关键字_Imaginary,用于指定虚构类型。是的 用作声明说明符中的类型说明符,方式与_Complex相同 (因此,_Imaginary浮点数是有效的类型名称)。
¶2 有三种虚构类型,指定为浮点型_Imaginary,双精度 _Imaginary,和长双_Imaginary。虚构类型(以及 真正的浮点型和复杂型)是浮点型。
¶3 对于虚类型,通过删除关键字给出对应的实数类型 从类型名称_Imaginary。
¶4 每个虚类型都有与 对应的实数类型。虚类型对象的值是实数的值 表示乘以虚数单位。
¶5 虚类型域包括虚类型。
脚注194将附件G指定为"信息性",而附件将自己标识为"规范性"。 脚注43确实提到了"规范性"或"信息性"。
C 标准的第 6.2.5 ¶13 节非常清楚地说明了如何表示复变量。