# Differences

This shows you the differences between two versions of the page.

 cl:functions:complex [2019/07/14 17:00] cl:functions:complex [2019/10/19 05:00] (current) Line 1: Line 1: + ====== Function COMPLEX ====== + + ====Syntax==== + * **complex //realpart ''&​optional''​ imagpart// → //complex// + + ====Arguments and Values==== + * //​realpart//​ - a //​[[CL:​Glossary:​real]]//​. + * //​imagpart//​ - a //​[[CL:​Glossary:​real]]//​. + * //complex// - a //​[[CL:​Glossary:​rational]]//​ or a //​[[CL:​Glossary:​complex]]//​. + + ====Description==== + + **complex** returns a //​[[CL:​Glossary:​number]]//​ whose real part is //​realpart//​ and whose imaginary part is //​imagpart//​. + + If //​realpart//​ is a //​[[CL:​Glossary:​rational]]//​ and //​imagpart//​ is the //​[[CL:​Glossary:​rational]]//​ number zero, the result of **complex** is //​realpart//,​ a //​[[CL:​Glossary:​rational]]//​. Otherwise, the result is a //​[[CL:​Glossary:​complex]]//​. + + If either //​realpart//​ or //​imagpart//​ is a //​[[CL:​Glossary:​float]]//,​ the non-//​[[CL:​Glossary:​float]]//​ is converted to a //​[[CL:​Glossary:​float]]//​ before the //​[[CL:​Glossary:​complex]]//​ is created. If //​imagpart//​ is not supplied, the imaginary part is a zero of the same //​[[CL:​Glossary:​type]]//​ as //​realpart//;​ i.e. ''​([[CL:​Functions:​coerce]] 0 ([[CL:​Functions:​type-of]] //​realpart//​))''​ is effectively used. + + Type upgrading implies a movement upwards in the type hierarchy lattice. + + In the case of //​[[CL:​Glossary:​complex|complexes]]//,​ the //​type-specifier// ​ must be a subtype of ''​(upgraded-complex-part-type //​type-specifier//​)''​. If //​type-specifier1//​ is a subtype of //​type-specifier2//,​ then ''​(upgraded-complex-element-type '//​type-specifier1//​)''​ must also be a subtype of ''​(upgraded-complex-element-type '//​type-specifier2//​)''​. Two disjoint types can be upgraded into the same thing. ''#​| TODO: fix this sentence, it doesn'​t make sense here. |#'' ​ + + ====Examples==== + <​blockquote> ​ + (complex 0) 0 + (complex 0.0) <​r>#​C(0.0 0.0) + (complex 1 1/2) <​r>#​C(1 1/​2)​ + (complex 1 .99) <​r>#​C(1.0 0.99) + (complex 3/2 0.0) <​r>#​C(1.5 0.0) + ​ + + ====Side Effects==== + None. + + ====Affected By==== + None. + + ====Exceptional Situations==== + None. + + ====See Also==== + * **[[CL:​Functions:​realpart|Function REALPART]]** + * **[[CL:​Functions:​imagpart|Function IMAGPART]]** + * {\secref\SharpsignC} + + ====Notes==== + None. + + \issue{ARRAY-TYPE-ELEMENT-TYPE-SEMANTICS:​UNIFY-UPGRADING}