簡體   English   中英

相對於C ++,本機C中如何表示復數(和虛數i)?

[英]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有三種實際的浮點類型 ,分別指定為floatdoublelong double 42) float類型的值集是double類型的值集的子集; double類型的值集合是long double類型的值集合的子集。

¶11有三種復雜類型 ,分別指定為float _Complexdouble _Complexlong 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 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的規定,一個程序可以取消定義或許然后重新定義宏compleximaginary ,和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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM