复数(和虚数 i)如何表示在本机 C 而不是C++中



特别是,该类没有太多复数的数据结构定义。您可以通过以下方式表示它:

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有三种真正的浮点类型,分别是floatdoublelong double42)float类型的值集是 类型double;double类型的值集是 键入long double

¶11 有三种复杂类型,分别是float _Complexdouble _Complexlong double _Complex43)(复杂类型是有条件的 实现不需要支持的功能;参见 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 complexdouble返回 价值;以及其他具有相同名称但具有fl后缀的函数,它们是 具有floatlong 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_II应扩展到_Complex_I

¶7 尽管有7.1.3的规定,程序可以取消定义,也许可以 重定义宏compleximaginaryI

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 节非常清楚地说明了如何表示复变量。

相关内容

  • 没有找到相关文章

最新更新