[英]How are complex numbers(and the imaginary number i) represented in Native C as opposed to C++?
尤其是,該類在復數的數據結構定義中沒有太多方法。 您可以通過以下方式表示它:
struct complex{
double real;
double imaginary;
};
但是虛數i = sqrt(-1)不能簡化為原始類型,因為原始數字類型必須是實數。 因此,必須通過復雜產品隱式定義它。 這在允許操作符重載的面向對象語言中很容易做到,但是如何使用像C這樣的過程語言來完成呢?
你可以寫:
_Complex double x = _Complex_I;
您可以對復數執行常規的算術運算。 標頭#include <complex.h>
聲明了常用數學函數的復雜版本(trig,roots等)。
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 ,使得i 2 = -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 float是有效的類型名)。
¶2共有三種虛構類型,分別為float _Imaginary,double _Imaginary和long double _Imaginary。 虛數類型(以及實數浮動類型和復數類型)是浮動類型。
¶3對於虛數類型,通過從類型名稱中刪除關鍵字_Imaginary來給出相應的實數類型。
¶4每個虛類型都具有與相應實類型相同的表示和對齊要求。 虛構類型的對象的值是實數表示的值乘以虛構單位。
¶5虛類型域包括虛類型。
奇怪的是腳注194將附件G指定為“信息性”,但附件將其自身標識為“規范性”。 腳注43確實提到了“規范性”或“信息性”。
C標准的6.2.5第13節非常清楚如何表示復雜變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.