Arithmetic/Complex: Difference between revisions

m
(→‎Pascal: mention GNU Pascal Compiler support and `conjugate` function)
(18 intermediate revisions by 11 users not shown)
Line 29:
{{trans|Python}}
 
<langsyntaxhighlight lang="11l">V z1 = 1.5 + 3i
V z2 = 1.5 + 1.5i
print(z1 + z2)
Line 40:
print(z1 ^ z2)
print(z1.real)
print(z1.imag)</langsyntaxhighlight>
 
{{out}}
Line 58:
=={{header|Action!}}==
{{libheader|Action! Tool Kit}}
<langsyntaxhighlight Actionlang="action!">INCLUDE "D2:REAL.ACT" ;from the Action! Tool Kit
 
DEFINE R_="+0"
Line 192:
ComplexConj(y,res)
PrintComplexXY(y,res," conj")
RETURN</langsyntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Complex.png Screenshot from Atari 8-bit computer]
Line 206:
 
=={{header|Ada}}==
<langsyntaxhighlight lang="ada">with Ada.Numerics.Generic_Complex_Types;
with Ada.Text_IO.Complex_IO;
 
Line 252:
Put("Conjugate(-A) = ");
C := Conjugate (C); Put(C);
end Complex_Operations;</langsyntaxhighlight>
 
=={{header|ALGOL 68}}==
Line 259:
{{works with|ALGOL 68G|Any - tested with release [http://sourceforge.net/projects/algol68/files/algol68g/algol68g-1.18.0/algol68g-1.18.0-9h.tiny.el5.centos.fc11.i386.rpm/download 1.18.0-9h.tiny]}}
{{wont work with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release [http://sourceforge.net/projects/algol68/files/algol68toc/algol68toc-1.8.8d/algol68toc-1.8-8d.fc9.i386.rpm/download 1.8-8d] - due to extensive use of FORMATted transput}}
<langsyntaxhighlight lang="algol68">main:(
FORMAT compl fmt = $g(-7,5)"⊥"g(-7,5)$;
Line 285:
);
compl operations
)</langsyntaxhighlight>
 
{{out}}<pre>
Line 298:
=={{header|ALGOL W}}==
Complex is a built-in type in Algol W.
<langsyntaxhighlight lang="algolw">begin
% show some complex arithmetic %
% returns c + d, using the builtin complex + operator %
Line 322:
write( "1/c : ", cInv( c ) );
write( "conj c : ", cConj( c ) )
end.</langsyntaxhighlight>
{{out}}
<pre>
Line 335:
 
=={{header|APL}}==
<syntaxhighlight lang="text">
x←1j1 ⍝assignment
y←5.25j1.5
Line 346:
-x ⍝negation
¯1J¯1
</syntaxhighlight>
</lang>
 
=={{header|App Inventor}}==
Line 355:
=={{header|Arturo}}==
 
<langsyntaxhighlight lang="rebol">a: to :complex [1 1]
b: to :complex @[pi 1.2]
 
Line 365:
print ["1 / a:" 1 / a]
print ["neg a:" neg a]
print ["conj a:" conj a]</langsyntaxhighlight>
 
{{out}}
Line 379:
=={{header|AutoHotkey}}==
contributed by Laszlo on the ahk [http://www.autohotkey.com/forum/post-276431.html#276431 forum]
<langsyntaxhighlight AutoHotkeylang="autohotkey">Cset(C,1,1)
MsgBox % Cstr(C) ; 1 + i*1
Cneg(C,C)
Line 425:
NumPut( Cre(A)/d,C,0,"double")
NumPut(-Cim(A)/d,C,8,"double")
}</langsyntaxhighlight>
 
=={{header|AWK}}==
contributed by af
<langsyntaxhighlight lang="awk"># simulate a struct using associative arrays
function complex(arr, re, im) {
arr["re"] = re
Line 484:
mult(i, i, i)
printComplex(i)
}</langsyntaxhighlight>
 
=={{header|BASIC}}==
{{works with|QuickBasic|4.5}}
<langsyntaxhighlight lang="qbasic">TYPE complex
real AS DOUBLE
imag AS DOUBLE
Line 564:
c.imag = a.imag - b.imag
END SUB
</syntaxhighlight>
</lang>
{{out}}
<pre>Siendo x = 1+ 3i
Line 579:
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
<langsyntaxhighlight lang="bbcbasic"> DIM Complex{r, i}
DIM a{} = Complex{} : a.r = 1.0 : a.i = 1.0
Line 618:
DEF FNcomplexshow(src{})
IF src.i >= 0 THEN = STR$(src.r) + " + " +STR$(src.i) + "i"
= STR$(src.r) + " - " + STR$(-src.i) + "i"</langsyntaxhighlight>
{{out}}
<pre>Result of addition is 4.14159265 + 2.2i
Line 627:
=={{header|Bracmat}}==
Bracmat recognizes the symbol <code>i</code> as the square root of <code>-1</code>. The results of the functions below are not necessarily of the form <code>a+b*i</code>, but as the last example shows, Bracmat nevertheless can work out that two different representations of the same mathematical object, when subtracted from each other, give zero. You may wonder why in the functions <code>multiply</code> and <code>negate</code> there are terms <code>1</code> and <code>-1</code>. These terms are a trick to force Bracmat to expand the products. As it is more costly to factorize a sum than to expand a product into a sum, Bracmat retains isolated products. However, when in combination with a non-zero term, the product is expanded.
<langsyntaxhighlight lang="bracmat"> (add=a b.!arg:(?a,?b)&!a+!b)
& ( multiply
= a b.!arg:(?a,?b)&1+!a*!b+-1
Line 654:
& out
$ ("sin$x minus conjugate sin$x =" sin$x+negate$(conjugate$(sin$x)))
& done;</langsyntaxhighlight>
{{out}}
<pre>(a+i*b)+(a+i*b) = 2*a+2*i*b
Line 669:
{{works with|C99}}
The more recent [[C99]] standard has built-in complex number primitive types, which can be declared with float, double, or long double precision. To use these types and their associated library functions, you must include the <complex.h> header. (Note: this is a ''different'' header than the <complex> templates that are defined by [[C++]].) [http://www.opengroup.org/onlinepubs/009695399/basedefs/complex.h.html] [http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.vacpp7a.doc/language/ref/clrc03complex_types.htm]
<langsyntaxhighlight lang="c">#include <complex.h>
#include <stdio.h>
 
Line 700:
c = conj(a);
printf("\nconj a="); cprint(c); printf("\n");
}</langsyntaxhighlight>
 
{{works with|C89}}
User-defined type:
<langsyntaxhighlight lang="c">typedef struct{
double real;
double imag;
Line 764:
printf("\n-a="); put(neg(a));
printf("\nconj a="); put(conj(a)); printf("\n");
}</langsyntaxhighlight>
 
=={{header|C sharp|C#}}==
{{works with|C sharp|C#|4.0}}
<langsyntaxhighlight lang="csharp">namespace RosettaCode.Arithmetic.Complex
{
using System;
Line 784:
}
}
}</langsyntaxhighlight>
{{works with|C sharp|C#|1.2}}
<langsyntaxhighlight lang="csharp">using System;
 
public struct ComplexNumber
Line 990:
Console.WriteLine(ComplexMath.Power(j, 0) == 1.0);
}
}</langsyntaxhighlight>
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">#include <iostream>
#include <complex>
using std::complex;
Line 1,011:
// conjugate
std::cout << std::conj(a) << std::endl;
}</langsyntaxhighlight>
 
=={{header|Clojure}}==
Line 1,017:
Therefore, we use defrecord and the multimethods in
clojure.algo.generic.arithmetic to make a Complex number type.
<langsyntaxhighlight lang="clojure">(ns rosettacode.arithmetic.cmplx
(:require [clojure.algo.generic.arithmetic :as ga])
(:import [java.lang Number]))
Line 1,054:
(let [m (+ (* r r) (* i i))]
(->Complex (/ r m) (- (/ i m)))))
</syntaxhighlight>
</lang>
 
=={{header|COBOL}}==
Line 1,061:
===.NET Complex class===
{{trans|C#}}
<langsyntaxhighlight cobollang="cobolfree"> $SET SOURCEFORMAT "FREE"
$SET ILUSING "System"
$SET ILUSING "System.Numerics"
Line 1,074:
end-perform
end method.
end class.</langsyntaxhighlight>
 
===Implementation===
<langsyntaxhighlight cobollang="cobolfree"> $SET SOURCEFORMAT "FREE"
class-id Prog.
method-id. Main static.
Line 1,174:
end operator.
 
end class.</langsyntaxhighlight>
 
=={{header|CoffeeScript}}==
<langsyntaxhighlight lang="coffeescript">
# create an immutable Complex type
class Complex
Line 1,238:
quotient = product.times inverse
console.log "(#{product}) / (#{b}) = #{quotient}"
</syntaxhighlight>
</lang>
 
{{out}}
Line 1,255:
Complex numbers are a built-in numeric type in Common Lisp. The literal syntax for a complex number is <tt>#C(<var>real</var> <var>imaginary</var>)</tt>. The components of a complex number may be integers, ratios, or floating-point. Arithmetic operations automatically return complex (or real) numbers when appropriate:
 
<langsyntaxhighlight lang="lisp">> (sqrt -1)
#C(0.0 1.0)
 
> (expt #c(0 1) 2)
-1</langsyntaxhighlight>
 
Here are some arithmetic operations on complex numbers:
 
<langsyntaxhighlight lang="lisp">> (+ #c(0 1) #c(1 0))
#C(1 1)
 
Line 1,279:
 
> (conjugate #c(1 1))
#C(1 -1)</langsyntaxhighlight>
 
Complex numbers can be constructed from real and imaginary parts using the <tt>complex</tt> function, and taken apart using the <tt>realpart</tt> and <tt>imagpart</tt> functions.
 
<langsyntaxhighlight lang="lisp">> (complex 64 (/ 3 4))
#C(64 3/4)
 
Line 1,290:
 
> (imagpart (complex 0 pi))
3.141592653589793d0</langsyntaxhighlight>
 
=={{header|Component Pascal}}==
BlackBox Component Builder
<langsyntaxhighlight lang="oberon2">
MODULE Complex;
IMPORT StdLog;
Line 1,381:
 
END Complex.
</syntaxhighlight>
</lang>
Execute: ^Q Complex.Do<br/>
{{out}}
Line 1,397:
=={{header|D}}==
Built-in complex numbers are now deprecated in D, to simplify the language.
<langsyntaxhighlight lang="d">import std.stdio, std.complex;
 
void main() {
Line 1,407:
writeln(1.0 / x); // inversion
writeln(-x); // negation
}</langsyntaxhighlight>
{{out}}
<pre>4.14159+2.2i
Line 1,415:
 
=={{header|Dart}}==
<langsyntaxhighlight lang="dart">
 
class complex {
Line 1,467:
 
}
</syntaxhighlight>
</lang>
=={{header|Delphi}}==
{{libheader| System.SysUtils}}
{{libheader| System.VarCmplx}}
<syntaxhighlight lang="delphi">
<lang Delphi>
program Arithmetic_Complex;
 
Line 1,498:
 
Readln;
end.</langsyntaxhighlight>
{{out}}
<pre>(5 + 3i) + (0,5 + 6i) = 5,5 + 9i
Line 1,507:
=={{header|EchoLisp}}==
Complex numbers are part of the language. No special library is needed.
<langsyntaxhighlight lang="lisp">
(define a 42+666i) → a
(define b 1+i) → b
Line 1,518:
(magnitude b) → 1.4142135623730951 ; = sqrt(2)
(exp (* I PI)) → -1+0i ; Euler = e^(I*PI) = -1
</syntaxhighlight>
</lang>
 
=={{header|Elixir}}==
<langsyntaxhighlight lang="elixir">defmodule Complex do
import Kernel, except: [abs: 1, div: 2]
Line 1,605:
end
 
Complex.task</langsyntaxhighlight>
 
{{out}}
Line 1,622:
 
=={{header|Erlang}}==
<langsyntaxhighlight Erlanglang="erlang">%% Task: Complex Arithmetic
%% Author: Abhay Jain
 
Line 1,679:
true ->
io:format("Ans = ~p+~pi~n", [A#complex.real, A#complex.img])
end. </langsyntaxhighlight>
{{out}}
<langsyntaxhighlight Erlanglang="erlang">Ans = 6+5i
Ans = -1+17i
Ans = -1-3i
Ans = 0.1-0.3i
Ans = 1-3i</langsyntaxhighlight>
 
=={{header|ERRE}}==
<syntaxhighlight lang="text">
PROGRAM COMPLEX_ARITH
 
Line 1,737:
PRINT(Z.REAL#;" + ";Z.IMAG#;"i")
END PROGRAM
</syntaxhighlight>
</lang>
Note: Adapted from QuickBasic source code
{{out}}
Line 1,747:
=={{header|Euler Math Toolbox}}==
 
<syntaxhighlight lang="euler math toolbox">
<lang Euler Math Toolbox>
>a=1+4i; b=5-3i;
>a+b
Line 1,761:
>conj(a)
1-4i
</syntaxhighlight>
</lang>
 
=={{header|Euphoria}}==
<langsyntaxhighlight lang="euphoria">constant REAL = 1, IMAG = 2
type complex(sequence s)
return length(s) = 2 and atom(s[REAL]) and atom(s[IMAG])
Line 1,821:
printf(1,"a*b = %s\n",{scomplex(mult(a,b))})
printf(1,"1/a = %s\n",{scomplex(inv(a))})
printf(1,"-a = %s\n",{scomplex(neg(a))})</langsyntaxhighlight>
 
{{out}}
Line 1,835:
 
C1:
<langsyntaxhighlight lang="excel">
=IMSUM(A1;B1)
</syntaxhighlight>
</lang>
 
D1:
<langsyntaxhighlight lang="excel">
=IMPRODUCT(A1;B1)
</syntaxhighlight>
</lang>
 
E1:
<langsyntaxhighlight lang="excel">
=IMSUB(0;D1)
</syntaxhighlight>
</lang>
 
F1:
<langsyntaxhighlight lang="excel">
=IMDIV(1;E28)
</syntaxhighlight>
</lang>
 
G1:
<langsyntaxhighlight lang="excel">
=IMCONJUGATE(C28)
</syntaxhighlight>
</lang>
 
E1 will have the negation of D1's value
 
<syntaxhighlight lang="text">
1+2i 3+5i 4+7i -7+11i 7-11i 0,0411764705882353+0,0647058823529412i 4-7i
</syntaxhighlight>
</lang>
 
=={{header|F Sharp|F#}}==
Entered into an interactive session to show the results:
<langsyntaxhighlight lang="fsharp">
> open Microsoft.FSharp.Math;;
 
Line 1,913:
i = -1.0;
r = -1.0;}
</syntaxhighlight>
</lang>
 
=={{header|Factor}}==
<langsyntaxhighlight lang="factor">USING: combinators kernel math math.functions prettyprint ;
 
C{ 1 2 } C{ 0.9 -2.78 } {
Line 1,933:
[ log . ] ! natural logarithm
[ sqrt . ] ! square root
} cleave</langsyntaxhighlight>
 
=={{header|Forth}}==
{{libheader|Forth Scientific Library}}
Historically, there was no standard syntax or mechanism for complex numbers and several implementations suitable for different uses were provided. However later a wordset ''was'' standardised as "Algorithm #60".
<langsyntaxhighlight lang="forth">S" fsl-util.fs" REQUIRED
S" complex.fs" REQUIRED
 
Line 1,950:
1e 0e zconstant 1+0i
1+0i x z@ z/ z.
x z@ znegate z.</langsyntaxhighlight>
 
=={{header|Fortran}}==
In ANSI FORTRAN 66 or later, COMPLEX is a built-in data type with full access to intrinsic arithmetic operations. Putting each native operation in a function is horribly inefficient, so I will simply demonstrate the operations. This example shows usage for Fortran 90 or later:
<langsyntaxhighlight lang="fortran">program cdemo
complex :: a = (5,3), b = (0.5, 6.0) ! complex initializer
complex :: absum, abprod, aneg, ainv
Line 1,962:
aneg = -a
ainv = 1.0 / a
end program cdemo</langsyntaxhighlight>
 
And, although you did not ask, here are demonstrations of some other common complex number operations
<langsyntaxhighlight lang="fortran">program cdemo2
complex :: a = (5,3), b = (0.5, 6) ! complex initializer
real, parameter :: pi = 3.141592653589793 ! The constant "pi"
Line 1,992:
! useful for FFT calculations, among other things
unit_circle = exp(2*i*pi/n * (/ (j, j=0, n-1) /) )
end program cdemo2</langsyntaxhighlight>
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang="freebasic">' FB 1.05.0 Win64
 
Type Complex
Line 2,059:
Print
Print "Press any key to quit"
Sleep</langsyntaxhighlight>
 
{{out}}
Line 2,076:
=={{header|Free Pascal}}==
FreePascal has a complex units. Example of usage:
<langsyntaxhighlight Pascallang="pascal">Program ComplexDemo;
 
uses
Line 2,104:
writeln ('conj(5 + i3): ', acong.re:3:1, ' + i', acong.im:3:1);
end.
</syntaxhighlight>
</lang>
 
=={{header|Frink}}==
Frink's operations handle complex numbers naturally. The real and imaginary parts of complex numbers can be arbitrary-sized integers, arbitrary-sized rational numbers, or arbitrary-precision floating-point numbers.
<langsyntaxhighlight lang="frink">
add[x,y] := x + y
multiply[x,y] := x * y
Line 2,122:
println["1/$a = " + invert[a]]
println["conjugate[$a] = " + conjugate[a]]
</syntaxhighlight>
</lang>
 
{{out}}
Line 2,135:
=={{header|Futhark}}==
{{incorrect|Futhark|Futhark's syntax has changed, so "fun" should be "let"}}
<syntaxhighlight lang="futhark">
<lang Futhark>
type complex = (f64,f64)
 
Line 2,163:
else if o == 3 then complexNeg a
else complexConj a
</syntaxhighlight>
</lang>
 
=={{header|GAP}}==
<langsyntaxhighlight lang="gap"># GAP knows gaussian integers, gaussian rationals (i.e. Q[i]), and cyclotomic fields. Here are some examples.
# E(n) is an nth primitive root of 1
i := Sqrt(-1);
Line 2,184:
# true
Sqrt(-3) in Cyclotomics;
# true</langsyntaxhighlight>
 
=={{header|Go}}==
Go has complex numbers built in, with the complex conjugate in the standard library.
<langsyntaxhighlight lang="go">package main
 
import (
Line 2,205:
fmt.Println("1 / a: ", 1/a)
fmt.Println("a̅: ", cmplx.Conj(a))
}</langsyntaxhighlight>
{{out}}
<pre>
Line 2,219:
=={{header|Groovy}}==
Groovy does not provide any built-in facility for complex arithmetic. However, it does support arithmetic operator overloading. Thus it is not too hard to build a fairly robust, complete, and intuitive complex number class, such as the following:
<langsyntaxhighlight lang="groovy">class Complex {
final Number real, imag
 
static final Complex i = [0,1] as Complex
 
Complex(Number r, Number i = 0) { (real, imag) = [r, i] }
 
Complex(Map that) { (real, imag) = [that.real ?: 0, that.imag ?: 0] }
 
Complex plus (Complex c) { [real + c.real, imag + c.imag] as Complex }
Complex plus (Number n) { [real + n, imag] as Complex }
 
Complex minus (Complex c) { [real - c.real, imag - c.imag] as Complex }
Complex minus (Number n) { [real - n, imag] as Complex }
 
Complex multiply (Complex c) { [real*c.real - imag*c.imag , imag*c.real + real*c.imag] as Complex }
Complex multiply (Number n) { [real*n , imag*n] as Complex }
 
Complex div (Complex c) { this * c.recip() }
Complex div (Number n) { this * (1/n) }
 
Complex negative () { [-real, -imag] as Complex }
 
/** the complex conjugate of this complex number. Overloads the bitwise complement (~) operator. */
Complex bitwiseNegate () { [real, -imag] as Complex }
 
/** the magnitude of this complex number. */
// could also use Math.sqrt( (this * (~this)).real )
Line 2,250:
/** the magnitude of this complex number. */
Number abs() { this.abs }
 
/** the reciprocal of this complex number. */
Complex getRecip() { (~this) / (ρ**2) }
/** the reciprocal of this complex number. */
Complex recip() { this.recip }
 
/** derived polar angle θ (theta) for polar form. Normalized to 0 ≤ θ < 2π. */
Number getTheta() {
Line 2,263:
/** derived polar angle θ (theta) for polar form. Normalized to 0 ≤ θ < 2π. */
Number getΘ() { this.theta } // this is greek uppercase theta
 
/** derived polar magnitude ρ (rho) for polar form. */
Number getRho() { this.abs }
/** derived polar magnitude ρ (rho) for polar form. */
Number getΡ() { this.abs } // this is greek uppercase rho, not roman P
 
/** Runs Euler's polar-to-Cartesian complex conversion,
* converting [ρ, θ] inputs into a [real, imag]-based complex number */
Line 2,274:
[ρ * Math.cos(θ), ρ * Math.sin(θ)] as Complex
}
 
/** Creates new complex with same magnitude ρ, but different angle θ */
Complex withTheta(Number θ) { fromPolar(this.rho, θ) }
/** Creates new complex with same magnitude ρ, but different angle θ */
Complex withΘ(Number θ) { fromPolar(this.rho, θ) }
 
/** Creates new complex with same angle θ, but different magnitude ρ */
Complex withRho(Number ρ) { fromPolar(ρ, this.θ) }
/** Creates new complex with same angle θ, but different magnitude ρ */
Complex withΡ(Number ρ) { fromPolar(ρ, this.θ) } // this is greek uppercase rho, not roman P
 
static Complex exp(Complex c) { fromPolar(Math.exp(c.real), c.imag) }
 
static Complex log(Complex c) { [Math.log(c.rho), c.theta] as Complex }
 
Complex power(Complex c) {
thisdef == 0 && czero != [0] as \Complex
(this == zero && c != ? [0] as Complexzero) \
? zero \
: c == 1 \
? this \
: exp( log(this) * c )
}
 
Complex power(Number n) { this ** ([n, 0] as Complex) }
 
boolean equals(that) {
that != null && (that instanceof Complex \
Line 2,304 ⟶ 2,305:
: that instanceof Number && [this.real, this.imag] == [that, 0])
}
 
int hashCode() { [real, imag].hashCode() }
 
String toString() {
def realPart = "${real}"
Line 2,318 ⟶ 2,319:
: realPart + (imag > 0 ? " + " : " - ") + imagPart
}
}</langsyntaxhighlight>
 
The following ''ComplexCategory'' class allows for modification of regular ''Number'' behavior when interacting with ''Complex''.
<langsyntaxhighlight lang="groovy">import org.codehaus.groovy.runtime.DefaultGroovyMethods
 
class ComplexCategory {
static Complex getI (Number a) { [0, a] as Complex }
 
static Complex plus (Number a, Complex b) { b + a }
static Complex minus (Number a, Complex b) { -b + a }
Line 2,331 ⟶ 2,332:
static Complex div (Number a, Complex b) { ([a] as Complex) / b }
static Complex power (Number a, Complex b) { ([a] as Complex) ** b }
static <N extends Number,T> T asType (NumberN a, Class<T> type) {
type == Complex \
? [a as Number] as Complex
: DefaultGroovyMethods.asType(a, type)
}
}</langsyntaxhighlight>
Notice also that this solution takes liberal advantage of Groovy's full Unicode support, including support for non-English alphabets used in identifiers.
 
Test Program (mixes the ComplexCategory methods into the Number class):
<langsyntaxhighlight lang="groovy">import static Complex.*
 
Number.metaClass.mixin ComplexCategory
Integer.metaClass.mixin ComplexCategory
 
def ε = 0.000000001 // tolerance (epsilon): acceptable "wrongness" to account for rounding error
 
println 'Demo 1: functionality as requested'
def a = [5,3] as Complex
Line 2,356 ⟶ 2,358:
def b = [0.5,6] as Complex
println 'b == ' + b
 
println "a + b == (${a}) + (${b}) == " + (a + b)
println "a * b == (${a}) * (${b}) == " + (a * b)
Line 2,365 ⟶ 2,367:
println "a * 1/a == " + (a * a.recip)
println()
 
println 'Demo 2: other functionality not requested, but important for completeness'
def c = 10
Line 2,392 ⟶ 2,394:
println 'a.θ == ' + a.θ
println '~a (conjugate) == ' + ~a
 
def ρ = 10
def π = Math.PI
def n = 3
def θ = π / n
 
def fromPolar1 = fromPolar(ρ, θ) // direct polar-to-cartesian conversion
def fromPolar2 = exp(θ.i) * ρ // Euler's equation
Line 2,403 ⟶ 2,405:
println " == 10*0.5 + i*10*√(3/4) == " + fromPolar1
println "ρ*exp(i*θ) == ${ρ}*exp(i*π/${n}) == " + fromPolar2
assert (fromPolar1 - fromPolar2).abs < ε</langsyntaxhighlight>
 
{{out}}
Line 2,424 ⟶ 2,426:
a ** 2 == a * a == 16.000000000000004 + 30.000000000000007i
0.9 ** b == 0.7653514303676113 - 0.5605686291920475i
a ** b == (5 + 3i) ** (0.5 + 6i) == -0.013750112198456855013750112198456853 - 0.09332524760169053i09332524760169052i
a.real == 5
a.imag == 3
Line 2,436 ⟶ 2,438:
== 10*0.5 + i*10*√(3/4) == 5.000000000000001 + 8.660254037844386i
ρ*exp(i*θ) == 10*exp(i*π/3) == 5.000000000000001 + 8.660254037844386i</pre>
 
=={{header|Hare}}==
<syntaxhighlight lang="hare">use fmt;
use math::complex::{c128,addc128,mulc128,divc128,negc128,conjc128};
 
export fn main() void = {
let x: c128 = (1.0, 1.0);
let y: c128 = (3.14159265, 1.2);
 
// addition
let (re, im) = addc128(x, y);
fmt::printfln("{} + {}i", re, im)!;
// multiplication
let (re, im) = mulc128(x, y);
fmt::printfln("{} + {}i", re, im)!;
// inversion
let (re, im) = divc128((1.0, 0.0), x);
fmt::printfln("{} + {}i", re, im)!;
// negation
let (re, im) = negc128(x);
fmt::printfln("{} + {}i", re, im)!;
// conjugate
let (re, im) = conjc128(x);
fmt::printfln("{} + {}i", re, im)!;
};</syntaxhighlight>
 
=={{header|Haskell}}==
Line 2,442 ⟶ 2,469:
have ''Complex Integer'' for the Gaussian Integers, ''Complex Float'', ''Complex Double'', etc. The operations are just the usual overloaded numeric operations.
 
<langsyntaxhighlight lang="haskell">import Data.Complex
 
main = do
Line 2,455 ⟶ 2,482:
putStrLn $ "Negate: " ++ show (-a)
putStrLn $ "Inverse: " ++ show (recip a)
putStrLn $ "Conjugate:" ++ show (conjugate a)</langsyntaxhighlight>
 
{{out}}
Line 2,468 ⟶ 2,495:
 
=={{header|Icon}} and {{header|Unicon}}==
{{improve|Unicon|This could be better implemented as an object i n Unicon. Note, however, that Unicon doesn't allow for operator overloading at the current time.}}
Icon doesn't provide native support for complex numbers. Support is included in the IPL.
Note: see the [[Arithmetic/Complex#Unicon|Unicon]] section below for a Unicon-specific solution.
<lang Icon>procedure main()
<syntaxhighlight lang="icon">procedure main()
 
SetupComplex()
Line 2,491 ⟶ 2,518:
write("abs(a) := ", cpxabs(a))
write("neg(1) := ", cpxstr(cpxneg(1)))
end</langsyntaxhighlight>
Icon doesn't allow for operator overloading but procedures can be overloaded as was done here to allow 'complex' to behave more robustly.
 
{{libheader|Icon Programming Library}}
[http://www.cs.arizona.edu/icon/library/src/procs/complex.icn provides complex number support] supplemented by the code below.
<syntaxhighlight lang="icon">
<lang Icon>
link complex # for complex number support
 
Line 2,523 ⟶ 2,550:
denom := z.rpart ^ 2 + z.ipart ^ 2
return complex(z.rpart / denom, z.ipart / denom)
end</langsyntaxhighlight>
To take full advantage of the overloaded 'complex' procedure,
the other cpxxxx procedures would need to be rewritten or overloaded.
Line 2,549 ⟶ 2,576:
<tt>complex</tt> (and <tt>dcomplex</tt> for double-precision) is a built-in data type in IDL:
 
<langsyntaxhighlight lang="idl">x=complex(1,1)
y=complex(!pi,1.2)
print,x+y
Line 2,558 ⟶ 2,585:
( -1.00000, -1.00000)
print,1/x
( 0.500000, -0.500000)</langsyntaxhighlight>
 
=={{header|J}}==
Complex numbers are a native numeric data type in J. Although the examples shown here are performed on scalars, all numeric operations naturally apply to arrays of complex numbers.
<langsyntaxhighlight lang="j"> x=: 1j1
y=: 3.14159j1.2
x+y NB. addition
Line 2,574 ⟶ 2,601:
+x NB. (complex) conjugation
1j_1
</syntaxhighlight>
</lang>
 
=={{header|Java}}==
<langsyntaxhighlight lang="java">public class Complex {
public final double real;
public final double imag;
Line 2,628 ⟶ 2,655:
System.out.println(a.conj());
}
}</langsyntaxhighlight>
 
=={{header|JavaScript}}==
<langsyntaxhighlight lang="javascript">function Complex(r, i) {
this.r = r;
this.i = i;
Line 2,685 ⟶ 2,712:
Complex.prototype.getMod = function() {
return Math.sqrt( Math.pow(this.r,2) , Math.pow(this.i,2) )
}</langsyntaxhighlight>
 
=={{header|jq}}==
For speed and for conformance with the complex plane interpretation, x+iy is represented as [x,y]; for flexibility, all the functions defined here will accept both real and complex numbers; and for uniformity, they are implemented as functions that ignore their input.
 
Recent versions of jq support modules, so these functions could all be placed in a module to avoid name conflicts, and thus no special prefix is used here.<langsyntaxhighlight lang="jq">def real(z): if (z|type) == "number" then z else z[0] end;
 
def imag(z): if (z|type) == "number" then 0 else z[1] end;
Line 2,753 ⟶ 2,780:
;
 
test( [1,1]; [0,1] )</langsyntaxhighlight>
{{Out}}
<langsyntaxhighlight lang="jq">$ jq -n -f complex.jq
"x = [1,1]"
"y = [0,1]"
Line 2,764 ⟶ 2,791:
"conj(x): [1,-1]"
"(x/y)*y: [1,1]"
"e^iπ: [-1,1.2246467991473532e-16]"</langsyntaxhighlight>
 
=={{header|Julia}}==
Julia has built-in support for complex arithmetic with arbitrary real types.
<langsyntaxhighlight lblang="julia">julia> z1 = 1.5 + 3im
julia> z2 = 1.5 + 1.5im
julia> z1 + z2
Line 2,789 ⟶ 2,816:
1.5
julia> imag(z1)
3.0</langsyntaxhighlight>
 
=={{header|Kotlin}}==
<langsyntaxhighlight lang="scala">class Complex(private val real: Double, private val imag: Double) {
operator fun plus(other: Complex) = Complex(real + other.real, imag + other.imag)
 
Line 2,830 ⟶ 2,857:
println("1 / x = ${x.inv()}")
println("x* = ${x.conj()}")
}</langsyntaxhighlight>
 
{{out}}
Line 2,846 ⟶ 2,873:
 
=={{header|Lambdatalk}}==
<langsyntaxhighlight lang="scheme">
{require lib_complex}
 
Line 2,870 ⟶ 2,897:
{C.mul {z1} {z2}} -> (0 3)
{C.div {z1} {z2}} -> (0.6666666666666667 0)
</syntaxhighlight>
</lang>
 
=={{header|Lang}}==
<syntaxhighlight lang="lang">
fp.cprint = ($z) -> fn.printf(%.3f%+.3fi%n, fn.creal($z), fn.cimag($z))
 
$a = fn.complex(1.5, 3)
$b = fn.complex(1.5, 1.5)
 
fn.print(a =\s)
fp.cprint($a)
 
fn.print(b =\s)
fp.cprint($b)
 
# Addition
fn.print(a + b =\s)
fp.cprint(fn.cadd($a, $b))
 
# Multiplication
fn.print(a * b =\s)
fp.cprint(fn.cmul($a, $b))
 
# Inversion
fn.print(1/a =\s)
fp.cprint(fn.cdiv(fn.complex(1, 0), $a))
 
# Negation
fn.print(-a =\s)
fp.cprint(fn.cinv($a))
 
# Conjugate
fn.print(conj(a) =\s)
fp.cprint(fn.conj($a))
</syntaxhighlight>
{{out}}
<pre>
a = 1.500+3.000i
b = 1.500+1.500i
a + b = 3.000+4.500i
a * b = -2.250+6.750i
1/a = 0.133-0.267i
-a = -1.500-3.000i
conj(a) = 1.500-3.000i
</pre>
 
=={{header|LFE}}==
Line 2,877 ⟶ 2,948:
 
A convenient data structure for a complex number is the record:
<langsyntaxhighlight lang="lisp">
(defrecord complex
real
img)
</syntaxhighlight>
</lang>
 
Here are the required functions:
 
<langsyntaxhighlight lang="lisp">
(defun add
(((match-complex real r1 img i1)
Line 2,903 ⟶ 2,974:
(defun inv (cmplx)
(div (conj cmplx) (modulus cmplx)))
</syntaxhighlight>
</lang>
 
Bonus:
 
<langsyntaxhighlight lang="lisp">
(defun conj
(((match-complex real r img i))
(new r (* -1 i))))
</syntaxhighlight>
</lang>
 
The functions above are built using the following supporting functions:
 
<langsyntaxhighlight lang="lisp">
(defun new (r i)
(make-complex real r img i))
Line 2,928 ⟶ 2,999:
(/ (complex-img c3) denom)))))
 
</syntaxhighlight>
</lang>
 
Finally, we have some functions for use in the conversion and display of our complex number data structure:
 
<langsyntaxhighlight lang="lisp">
(defun ->str
(((match-complex real r img i)) (when (>= i 0))
Line 2,944 ⟶ 3,015:
(defun print (cmplx)
(io:format (++ (->str cmplx) "~n")))
</syntaxhighlight>
</lang>
 
Usage is as follows:
Line 2,971 ⟶ 3,042:
 
=={{header|Liberty BASIC}}==
<langsyntaxhighlight lang="lb">mainwin 50 10
 
print " Adding"
Line 3,021 ⟶ 3,092:
D =ar^2 +ai^2
cinv$ =complex$( ar /D , 0 -ai /D )
end function</langsyntaxhighlight>
 
=={{header|Lua}}==
<langsyntaxhighlight lang="lua">
 
--defines addition, subtraction, negation, multiplication, division, conjugation, norms, and a conversion to strgs.
Line 3,057 ⟶ 3,128:
print("|" .. i .. "| = " .. math.sqrt(i.norm))
print(i .. "* = " .. i.conj)
</syntaxhighlight>
</lang>
 
=={{header|Maple}}==
Line 3,063 ⟶ 3,134:
Maple has <code>I</code> (the square root of -1) built-in. Thus:
 
<langsyntaxhighlight lang="maple">x := 1+I;
y := Pi+I*1.2;</langsyntaxhighlight>
 
By itself, it will perform mathematical operations symbolically, i.e. it will not try to perform computational evaluation unless specifically asked to do so. Thus:
 
<langsyntaxhighlight lang="maple">x*y;
==> (1 + I) (Pi + 1.2 I)
simplify(x*y);
==> 1.941592654 + 4.341592654 I</langsyntaxhighlight>
 
Other than that, the task merely asks for
 
<langsyntaxhighlight lang="maple">x+y;
x*y;
-x;
1/x;</langsyntaxhighlight>
 
=={{header|Mathematica}} / {{header|Wolfram Language}}==
Mathematica has fully implemented support for complex numbers throughout the software. Addition, subtraction, division, multiplications and powering need no further syntax than for real numbers:
<langsyntaxhighlight Mathematicalang="mathematica">x=1+2I
y=3+4I
 
Line 3,092 ⟶ 3,163:
y^4 => -527 - 336 I
x^y => (1 + 2 I)^(3 + 4 I)
N[x^y] => 0.12901 + 0.0339241 I</langsyntaxhighlight>
Powering to a complex power can in general not be written shorter, so Mathematica leaves it unevaluated if the numbers are exact. An approximation can be acquired using the function N.
However Mathematica goes much further, basically all functions can handle complex numbers to arbitrary precision, including (but not limited to!):
<langsyntaxhighlight Mathematicalang="mathematica">Exp Log
Sin Cos Tan Csc Sec Cot
ArcSin ArcCos ArcTan ArcCsc ArcSec ArcCot
Line 3,103 ⟶ 3,174:
Haversine InverseHaversine
Factorial Gamma PolyGamma LogGamma
Erf BarnesG Hyperfactorial Zeta ProductLog RamanujanTauL</langsyntaxhighlight>
and many many more. The documentation states:
 
Line 3,111 ⟶ 3,182:
Complex numbers are a primitive data type in MATLAB. All the typical complex operations can be performed. There are two keywords that specify a number as complex: "i" and "j".
 
<langsyntaxhighlight MATLABlang="matlab">>> a = 1+i
 
a =
Line 3,169 ⟶ 3,240:
ans =
 
1.414213562373095</langsyntaxhighlight>
 
=={{header|Maxima}}==
<langsyntaxhighlight lang="maxima">z1: 5 + 2 * %i;
2*%i+5
 
Line 3,215 ⟶ 3,286:
 
imagpart(z1);
2</langsyntaxhighlight>
 
=={{header|МК-61/52}}==
Line 3,226 ⟶ 3,297:
Division: С/П; multiplication: БП 36 С/П; addition: БП 54 С/П; subtraction: БП 63 С/П.
 
<syntaxhighlight lang="text">ПA С/П ПB С/П ПC С/П ПD С/П ИПC x^2
ИПD x^2 + П3 ИПA ИПC * ИПB ИПD *
+ ИП3 / П1 ИПB ИПC * ИПA ИПD *
Line 3,233 ⟶ 3,304:
+ П2 ИП1 С/П ИПB ИПD + П2 ИПA ИПC
+ ИП1 С/П ИПB ИПD - П2 ИПA ИПC -
П1 С/П</langsyntaxhighlight>
 
=={{header|Modula-2}}==
<langsyntaxhighlight lang="modula2">MODULE complex;
 
IMPORT InOut;
Line 3,301 ⟶ 3,372:
NegComplex (z[0], z[2]); ShowComplex (" - z1", z[2]);
InOut.WriteLn
END complex.</langsyntaxhighlight>
{{out}}
<pre>Enter two complex numbers : 5 3 0.5 6
Line 3,316 ⟶ 3,387:
{{trans|Java}}
This is a translation of the Java version, but it uses operator redefinition where possible.
<langsyntaxhighlight lang="nanoquery">import math
 
class Complex
Line 3,371 ⟶ 3,442:
println a.inv()
println a * b
println a.conj()</langsyntaxhighlight>
 
=={{header|Nemerle}}==
<langsyntaxhighlight Nemerlelang="nemerle">using System;
using System.Console;
using System.Numerics;
Line 3,399 ⟶ 3,470:
WriteLine(Conjugate(complex2).PrettyPrint());
}
}</langsyntaxhighlight>
{{out}}
<pre>4.14159 + 2.2i
Line 3,408 ⟶ 3,479:
 
=={{header|Nim}}==
<langsyntaxhighlight lang="nim">
import complex
var a: Complex = (1.0,1.0)
Line 3,420 ⟶ 3,491:
echo("-a : " & $(-a))
 
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 3,433 ⟶ 3,504:
=={{header|Oberon-2}}==
Oxford Oberon Compiler
<langsyntaxhighlight lang="oberon2">
MODULE Complex;
IMPORT Files,Out;
Line 3,519 ⟶ 3,590:
END Complex.
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 3,534 ⟶ 3,605:
=={{header|OCaml}}==
The [http://caml.inria.fr/pub/docs/manual-ocaml/libref/Complex.html Complex] module from the standard library provides the functionality of complex numbers:
<langsyntaxhighlight lang="ocaml">open Complex
 
let print_complex z =
Line 3,546 ⟶ 3,617:
print_complex (inv a);
print_complex (neg a);
print_complex (conj a)</langsyntaxhighlight>
 
Using [http://forge.ocamlcore.org/projects/pa-do/ Delimited Overloading], the syntax can be made closer to the usual one:
<langsyntaxhighlight lang="ocaml">let () =
Complex.(
let print txt z = Printf.printf "%s = %s\n" txt (to_string z) in
Line 3,562 ⟶ 3,633:
print "a^b" (a**b);
Printf.printf "norm a = %g\n" (float(abs a));
)</langsyntaxhighlight>
 
=={{header|Octave}}==
GNU Octave handles naturally complex numbers:
<langsyntaxhighlight lang="octave">z1 = 1.5 + 3i;
z2 = 1.5 + 1.5i;
disp(z1 + z2); % 3.0 + 4.5i
Line 3,579 ⟶ 3,650:
disp( imag(z1) ); % 3
disp( real(z2) ); % 1.5
%...</langsyntaxhighlight>
 
=={{header|Oforth}}==
 
<langsyntaxhighlight Oforthlang="oforth">Object Class new: Complex(re, im)
Complex method: re @re ;
Line 3,621 ⟶ 3,692:
 
Integer method: >complex self 0 Complex new ;
Float method: >complex self 0 Complex new ;</langsyntaxhighlight>
 
Usage :
 
<langsyntaxhighlight Oforthlang="oforth">3.2 >complex I * 2 >complex + .cr
2 3 Complex new 1.2 >complex + .cr
2 3 Complex new 1.2 >complex * .cr
2 >complex 2 3 Complex new / .cr</langsyntaxhighlight>
 
{{out}}
Line 3,641 ⟶ 3,712:
Ol supports complex numbers by default. Numbers must be entered manually in form A+Bi without spaces between elements, where A and B - numbers (can be rational), i - imaginary unit; or in functional form using function `complex`.
 
<langsyntaxhighlight lang="scheme">
(define A 0+1i) ; manually entered numbers
(define B 1+0i)
Line 3,665 ⟶ 3,736:
(print "imaginary part of " C " is " (cdr C))
; <== imaginary part of 2/7-3i is -3
</syntaxhighlight>
</lang>
 
=={{header|ooRexx}}==
<langsyntaxhighlight ooRexxlang="oorexx">c1 = .complex~new(1, 2)
c2 = .complex~new(3, 4)
r = 7
Line 3,804 ⟶ 3,875:
::method hashCode
expose r i
return r~hashcode~bitxor(i~hashcode)</langsyntaxhighlight>
{{out}}
<pre>c1 = 1 + 2i
Line 3,825 ⟶ 3,896:
=={{header|OxygenBasic}}==
Implementation of a complex numbers class with arithmetical operations, and powers using DeMoivre's theorem (polar conversion).
<langsyntaxhighlight lang="oxygenbasic">
'COMPLEX OPERATIONS
'=================
Line 3,958 ⟶ 4,029:
z1 = z1*z4
print "Z1 = "+z1.show 'RESULT 2.0, 1.0
</syntaxhighlight>
</lang>
 
=={{header|PARI/GP}}==
To use, type, e.g., inv(3 + 7*I).
<langsyntaxhighlight lang="parigp">add(a,b)=a+b;
mult(a,b)=a*b;
neg(a)=-a;
inv(a)=1/a;</langsyntaxhighlight>
 
=={{header|Pascal}}==
{{works with|Extended Pascal}}
The simple data type <tt>complex</tt> is part of Extended Pascal, ISO standard 10206.
<langsyntaxhighlight lang="pascal">program complexDemo(output);
 
const
Line 4,036 ⟶ 4,107:
writeLn(' inverse(', asString(z), ') = ', asString(inverse(z)));
writeLn(' conjugation(', asString(y), ') = ', asString(conjugation(y)));
end.</langsyntaxhighlight>
{{out}}
<pre>(-3.00, 2.00) + ( 1.00, 4.00) = (-2.00, 6.00)
Line 4,050 ⟶ 4,121:
=={{header|Perl}}==
The <code>Math::Complex</code> module implements complex arithmetic.
<langsyntaxhighlight lang="perl">use Math::Complex;
my $a = 1 + 1*i;
my $b = 3.14159 + 1.25*i;
Line 4,059 ⟶ 4,130:
-$a, # negation
1 / $a, # multiplicative inverse
~$a; # complex conjugate</langsyntaxhighlight>
 
=={{header|Phix}}==
<!--<syntaxhighlight lang="phix">(phixonline)-->
<lang Phix>-- demo\rosetta\ArithComplex.exw
<span style="color: #000080;font-style:italic;">-- demo\rosetta\ArithComplex.exw</span>
include complex.e
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
complex a = complex_new(1,1),
<span style="color: #008080;">include</span> <span style="color: #004080;">complex</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
b = complex_new(3.14159,1.25),
<span style="color: #004080;">complex</span> <span style="color: #000000;">a</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">complex_new</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">),</span> <span style="color: #000080;font-style:italic;">-- (or just {1,1})</span>
c = complex_new(1,0),
<span style="color: #000000;">b</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">complex_new</span><span style="color: #0000FF;">(</span><span style="color: #000000;">3.14159</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1.25</span><span style="color: #0000FF;">),</span>
d = complex_new(0,1)
<span style="color: #000000;">c</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">complex_new</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">0</span><span style="color: #0000FF;">),</span>
printf(1,"a = %s\n",{complex_sprint(a)})
<span style="color: #000000;">d</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">complex_new</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
printf(1,"b = %s\n",{complex_sprint(b)})
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"a = %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">complex_sprint</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">)})</span>
printf(1,"c = %s\n",{complex_sprint(c)})
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"b = %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">complex_sprint</span><span style="color: #0000FF;">(</span><span style="color: #000000;">b</span><span style="color: #0000FF;">)})</span>
printf(1,"d = %s\n",{complex_sprint(d)})
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"c = %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">complex_sprint</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">)})</span>
printf(1,"a+b = %s\n",{complex_sprint(complex_add(a,b))})
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"d = %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">complex_sprint</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d</span><span style="color: #0000FF;">)})</span>
printf(1,"a*b = %s\n",{complex_sprint(complex_mul(a,b))})
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"a+b = %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">complex_sprint</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">complex_add</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">,</span><span style="color: #000000;">b</span><span style="color: #0000FF;">))})</span>
printf(1,"1/a = %s\n",{complex_sprint(complex_inv(a))})
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"a*b = %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">complex_sprint</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">complex_mul</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">,</span><span style="color: #000000;">b</span><span style="color: #0000FF;">))})</span>
printf(1,"c/a = %s\n",{complex_sprint(complex_div(c,a))})
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"1/a = %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">complex_sprint</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">complex_inv</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">))})</span>
printf(1,"c-a = %s\n",{complex_sprint(complex_sub(c,a))})
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"c/a = %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">complex_sprint</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">complex_div</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #000000;">a</span><span style="color: #0000FF;">))})</span>
printf(1,"d-a = %s\n",{complex_sprint(complex_sub(d,a))})
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"c-a = %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">complex_sprint</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">complex_sub</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #000000;">a</span><span style="color: #0000FF;">))})</span>
printf(1,"-a = %s\n",{complex_sprint(complex_neg(a))})
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"d-a = %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">complex_sprint</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">complex_sub</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d</span><span style="color: #0000FF;">,</span><span style="color: #000000;">a</span><span style="color: #0000FF;">))})</span>
printf(1,"conj a = %s\n",{complex_sprint(complex_conjugate(a))})</lang>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"-a = %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">complex_sprint</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">complex_neg</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">))})</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"conj a = %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">complex_sprint</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">complex_conjugate</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">))})</span>
<!--</syntaxhighlight>-->
{{out}}
<pre>
Line 4,097 ⟶ 4,171:
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">(load "@lib/math.l")
 
(de addComplex (A B)
Line 4,138 ⟶ 4,212:
(prinl "A*B = " (fmtComplex (mulComplex A B)))
(prinl "1/A = " (fmtComplex (invComplex A)))
(prinl "-A = " (fmtComplex (negComplex A))) )</langsyntaxhighlight>
{{out}}
<pre>A = 1.00000+1.00000i
Line 4,148 ⟶ 4,222:
 
=={{header|PL/I}}==
<langsyntaxhighlight lang="pli">/* PL/I complex numbers may be integer or floating-point. */
/* In this example, the variables are floating-pint. */
/* For integer variables, change 'float' to 'fixed binary' */
Line 4,168 ⟶ 4,242:
 
/* As well, trigonometric functions may be used with complex */
/* numbers, such as SIN, COS, TAN, ATAN, and so on. */</langsyntaxhighlight>
 
=={{header|Pop11}}==
Line 4,181 ⟶ 4,255:
'1 -: 3' is '1 - 3i' in mathematical notation.
 
<langsyntaxhighlight lang="pop11">lvars a = 1.0 +: 1.0, b = 2.0 +: 5.0 ;
a+b =>
a*b =>
Line 4,199 ⟶ 4,273:
a-a =>
a/b =>
a/a =></langsyntaxhighlight>
 
=={{header|PostScript}}==
Complex numbers can be represented as 2 element vectors ( arrays ). Thus, a+bi can be written as [a b] in PostScript.
<syntaxhighlight lang="text">
%Adding two complex numbers
/addcomp{
Line 4,252 ⟶ 4,326:
}def
 
</syntaxhighlight>
</lang>
 
=={{header|PowerShell}}==
===Implementation===
<syntaxhighlight lang="powershell">
<lang PowerShell>
class Complex {
[Double]$x
Line 4,296 ⟶ 4,370:
"1/`$m: $([complex]::show($m.inverse()))"
"conjugate `$m: $([complex]::show($m.conjugate()))"
</syntaxhighlight>
</lang>
<b>Output:</b>
<pre>
Line 4,308 ⟶ 4,382:
</pre>
===Library===
<syntaxhighlight lang="powershell">
<lang PowerShell>
function show([System.Numerics.Complex]$c) {
if(0 -le $c.Imaginary) {
Line 4,325 ⟶ 4,399:
"1/`$m: $(show ([System.Numerics.Complex]::Reciprocal($m)))"
"conjugate `$m: $(show ([System.Numerics.Complex]::Conjugate($m)))"
</syntaxhighlight>
</lang>
<b>Output:</b>
<pre>
Line 4,338 ⟶ 4,412:
 
=={{header|PureBasic}}==
<langsyntaxhighlight PureBasiclang="purebasic">Structure Complex
real.d
imag.d
Line 4,402 ⟶ 4,476:
*c=Neg_Complex(a): ShowAndFree("-a", *c)
Print(#CRLF$+"Press ENTER to exit"):Input()
EndIf</langsyntaxhighlight>
 
=={{header|Python}}==
 
<langsyntaxhighlight lang="python">>>> z1 = 1.5 + 3j
>>> z2 = 1.5 + 1.5j
>>> z1 + z2
Line 4,428 ⟶ 4,502:
>>> z1.imag
3.0
>>> </langsyntaxhighlight>
 
=={{header|R}}==
{{trans|Octave}}
 
<langsyntaxhighlight lang="rsplus">z1 <- 1.5 + 3i
z2 <- 1.5 + 1.5i
print(z1 + z2) # 3+4.5i
Line 4,445 ⟶ 4,519:
print(exp(z1)) # -4.436839+0.632456i
print(Re(z1)) # 1.5
print(Im(z1)) # 3</langsyntaxhighlight>
 
=={{header|Racket}}==
 
<langsyntaxhighlight lang="racket">
#lang racket
 
Line 4,462 ⟶ 4,536:
(/ 1 a) ; reciprocal
(conjugate a) ; conjugation
</syntaxhighlight>
</lang>
 
=={{header|Raku}}==
Line 4,468 ⟶ 4,542:
{{works with|Rakudo|2015.12}}
 
<syntaxhighlight lang="raku" perl6line>my $a = 1 + i;
my $b = pi + 1.25i;
 
.say for $a + $b, $a * $b, -$a, 1 / $a, $a.conj;
.say for $a.abs, $a.sqrt, $a.re, $a.im;</langsyntaxhighlight>
{{out}} (precision varies with different implementations):
<pre>
Line 4,488 ⟶ 4,562:
=={{header|REXX}}==
The REXX language has no complex type numbers, but most complex arithmetic functions can easily be written.
<langsyntaxhighlight lang="rexx">/*REXX program demonstrates how to support some math functions for complex numbers. */
x = '(5,3i)' /*define X ─── can use I i J or j */
y = "( .5, 6j)" /*define Y " " " " " " " */
Line 4,510 ⟶ 4,584:
C_: return word(translate(arg(1), , '{[(JjIi)]}') 0, 1) /*get # or 0*/
C#: a=C_(a); b=C_(b); c=C_(c); d=C_(d); ac=a*c; ad=a*d; bc=b*c; bd=b*d;s=c*c+d*d; return
C$: parse arg r,c; _='['r; if c\=0 then _=_","c'j'; return _"]" /*uses j */</langsyntaxhighlight>
'''output'''
<pre>
Line 4,524 ⟶ 4,598:
=={{header|RLaB}}==
 
<syntaxhighlight lang="rlab">
<lang RLaB>
>> x = sqrt(-1)
0 + 1i
Line 4,533 ⟶ 4,607:
>> isreal(z)
1
</syntaxhighlight>
</lang>
 
=={{header|RPL}}==
{{in}}
<pre>
(1.5,3) 'Z1' STO
(1.5,1.5) 'Z2' STO
Z1 Z2 +
Z1 Z2 -
Z1 Z2 *
Z1 Z2 /
Z1 NEG
Z1 CONJ
Z1 ABS
Z1 RE
Z1 IM
</pre>
{{out}}
<pre>
(3,4.5)
(0,1.5)
(-2.25,6.75)
(1.5,.5)
(-1.5,-3)
(1.5,-3)
63.4349488229
1.5
3
</pre>
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">
# Four ways to write complex numbers:
a = Complex(1, 1) # 1. call Kernel#Complex
Line 4,550 ⟶ 4,651:
puts 1.quo a # multiplicative inverse
puts a.conjugate # complex conjugate
puts a.conj # alias for complex conjugate</langsyntaxhighlight>
 
''Notes:''
* All of these operations are safe with other numeric types. For example, <code>42.conjugate</code> returns 42.
 
<langsyntaxhighlight lang="ruby"># Other ways to find the multiplicative inverse:
puts 1.quo a # always works
puts 1.0 / a # works, but forces floating-point math
puts 1 / a # might truncate to integer</langsyntaxhighlight>
 
=={{header|Rust}}==
<langsyntaxhighlight lang="rust">extern crate num;
use num::complex::Complex;
 
Line 4,576 ⟶ 4,677:
println!(" -a = {}", -a);
println!("conj(a) = {}", a.conj());
}</langsyntaxhighlight>
 
=={{header|Scala}}==
Line 4,582 ⟶ 4,683:
Scala doesn't come with a Complex library, but one can be made:
 
<langsyntaxhighlight lang="scala">package org.rosettacode
 
package object ArithmeticComplex {
Line 4,616 ⟶ 4,717:
def fromPolar(rho:Double, theta:Double) = Complex(rho*math.cos(theta), rho*math.sin(theta))
}
}</langsyntaxhighlight>
 
Usage example:
 
<langsyntaxhighlight lang="scala">scala> import org.rosettacode.ArithmeticComplex._
import org.rosettacode.ArithmeticComplex._
 
Line 4,646 ⟶ 4,747:
scala> -res6
res7: org.rosettacode.ArithmeticComplex.Complex = -0.2 + 0.4i
</syntaxhighlight>
</lang>
 
=={{header|Scheme}}==
Line 4,652 ⟶ 4,753:
* rectangular coordinates: <code>''real''+''imag''i</code> (or <code>''real''-''imag''i</code>), where ''real'' is the real part and ''imag'' is the imaginary part. For a pure-imaginary number, the real part may be omitted but the sign of the imaginary part is mandatory (even if it is "+"): <code>+''imag''i</code> (or <code>-''imag''i</code>). If the imaginary part is 1 or -1, the imaginary part can be omitted, leaving only the <code>+i</code> or <code>-i</code> at the end.
* polar coordinates: <code>''r''@''theta''</code>, where ''r'' is the absolute value (magnitude) and ''theta'' is the angle
<langsyntaxhighlight lang="scheme">(define a 1+i)
(define b 3.14159+1.25i)
 
Line 4,658 ⟶ 4,759:
(define c (* a b))
(define c (/ 1 a))
(define c (- a))</langsyntaxhighlight>
 
=={{header|Seed7}}==
 
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
include "float.s7i";
include "complex.s7i";
Line 4,681 ⟶ 4,782:
# negation
writeln("-a=" <& -a digits 5);
end func;</langsyntaxhighlight>
 
=={{header|Sidef}}==
<langsyntaxhighlight lang="ruby">var a = 1:1 # Complex(1, 1)
var b = 3.14159:1.25 # Complex(3.14159, 1.25)
Line 4,696 ⟶ 4,797:
b.re, # real
b.im, # imaginary
].each { |c| say c }</langsyntaxhighlight>
{{out}}
<pre>4.14159+2.25i
Line 4,710 ⟶ 4,811:
=={{header|Slate}}==
 
<langsyntaxhighlight lang="slate">[| a b |
a: 1 + 1 i.
b: Pi + 1.2 i.
Line 4,720 ⟶ 4,821:
print: a abs.
print: a negated.
].</langsyntaxhighlight>
 
=={{header|Smalltalk}}==
{{works with|GNU Smalltalk}}
<langsyntaxhighlight lang="smalltalk">PackageLoader fileInPackage: 'Complex'.
|a b|
a := 1 + 1 i.
Line 4,736 ⟶ 4,837:
a real displayNl.
a imaginary displayNl.
a negated displayNl.</langsyntaxhighlight>
{{works with|Smalltalk/X}}
Complex is already in the basic class library. Multiples of imaginary are created by sending an "i" message to a number, which can be added to another number. Thus 5i => (0+5i), 1+(1/3)I => (1+1/3i) and (1.0+2i) => (1.0+2i). Notice that the real and imaginary components can be arbitrary integers, fractions or floating point numbers. And the results will be exact (i.e. have fractions or integer) if possible.
<langsyntaxhighlight lang="smalltalk">
|a b|
a := 1 + 1i.
Line 4,762 ⟶ 4,863:
Transcript show:'a2*b2 => '; showCR:(a2 * b2).
Transcript show:'a2/b2 => '; showCR:(a2 / b2).
Transcript show:'a2 reciprocal => '; showCR:a2 reciprocal.</langsyntaxhighlight>
{{out}}
<pre>a => (1+1i)
Line 4,787 ⟶ 4,888:
<b>Original author unknown {:o(</b>
 
<langsyntaxhighlight lang="qbasic">' complex numbers are native for "smart BASIC"
A=1+2i
B=3-5i
Line 4,803 ⟶ 4,904:
 
' gives output
-1+2i -1-2i</langsyntaxhighlight>
 
=={{header|SNOBOL4}}==
Line 4,811 ⟶ 4,912:
{{works with|CSnobol}}
 
<langsyntaxhighlight SNOBOL4lang="snobol4">* # Define complex datatype
data('complex(r,i)')
 
Line 4,850 ⟶ 4,951:
output = printx( negx(a) ) ', ' printx( negx(b) )
output = printx( invx(a) ) ', ' printx( invx(b) )
end</langsyntaxhighlight>
 
{{out}}
Line 4,859 ⟶ 4,960:
 
=={{header|Standard ML}}==
<syntaxhighlight lang="standard ml">
<lang Standard ML>
(* Signature for complex numbers *)
signature COMPLEX = sig
Line 4,903 ⟶ 5,004:
Complex.print_number(Complex.times i1 i2); (* -5 + 10i *)
Complex.print_number(Complex.invert i1); (* 1/5 - 2i/5 *)
</syntaxhighlight>
</lang>
 
=={{header|Stata}}==
 
<langsyntaxhighlight lang="stata">mata
C(2,3)
2 + 3i
Line 4,948 ⟶ 5,049:
1.28247468 + .982793723i
 
end</langsyntaxhighlight>
 
=={{header|Swift}}==
Line 4,955 ⟶ 5,056:
Use a struct to create a complex number type in Swift. Math Operations can be added using operator overloading
 
<langsyntaxhighlight lang="swift">
public struct Complex {
Line 5,002 ⟶ 5,103:
}
 
</syntaxhighlight>
</lang>
 
Make the Complex Number struct printable and easier to debug by adding making it conform to CustomStringConvertible
 
<langsyntaxhighlight lang="swift">
 
extension Complex : CustomStringConvertible {
Line 5,033 ⟶ 5,134:
}
 
</syntaxhighlight>
</lang>
 
Explicitly support subtraction and division
 
<langsyntaxhighlight lang="swift">
public func - (left:Complex, right:Complex) -> Complex {
return left + -right
Line 5,048 ⟶ 5,149:
return Complex(real: num.real/den.real, imaginary: num.imaginary/den.real)
}
</syntaxhighlight>
</lang>
 
=={{header|Tcl}}==
{{tcllib|math::complexnumbers}}
<langsyntaxhighlight lang="tcl">package require math::complexnumbers
namespace import math::complexnumbers::*
 
Line 5,060 ⟶ 5,161:
puts [tostring [* $a $b]] ;# ==> 1.94159+4.34159i
puts [tostring [pow $a [complex -1 0]]] ;# ==> 0.5-0.4999999999999999i
puts [tostring [- $a]] ;# ==> -1.0-i</langsyntaxhighlight>
 
=={{header|TI-83 BASIC}}==
Line 5,095 ⟶ 5,196:
 
Note that the parentheses around ∠ notation are required. It has a related use in vectors: (1∠π/4) is a complex number, [1,∠π/4] is a vector in two dimensions in polar notation, and [(1∠π/4)] is a complex number in a vector.
 
=={{header|Unicon}}==
Takes advantage of Unicon's operator overloading extension and Unicon's Complex class. Negation is not supported by the Complex class.
 
<syntaxhighlight lang="unicon">import math
 
procedure main()
write("c1: ",(c1 := Complex(1.5,3)).toString())
write("c2: ",(c2 := Complex(1.5,1.5)).toString())
write("+: ",(c1+c2).toString())
write("-: ",(c1-c2).toString())
write("*: ",(c1*c2).toString())
write("/: ",(c1/c2).toString())
write("additive inverse: ",c1.addInverse().toString())
write("multiplicative inverse: ",c1.multInverse().toString())
write("conjugate of (4,-3i): ",Complex(4,-3).conjugate().toString())
end</syntaxhighlight>
 
{{out}}
<pre>c1: (1.5,3i)
c2: (1.5,1.5i)
+: (3.0,4.5i)
-: (0.0,1.5i)
*: (-2.25,6.75i)
/: (1.5,0.5i)
additive inverse: (-1.5,-3i)
multiplicative inverse: (0.1333333333333333,-0.2666666666666667i)
conjugate of (4,-3i): (4,3i)</pre>
 
=={{header|UNIX Shell}}==
{{works with|ksh93}}
<langsyntaxhighlight lang="bash">typeset -T Complex_t=(
float real=0
float imag=0
Line 5,172 ⟶ 5,301:
Complex_t d=(real=2 imag=1)
d.inverse
d.to_s # 0.4 + -0.2 i</langsyntaxhighlight>
 
=={{header|Ursala}}==
Line 5,182 ⟶ 5,311:
c..add or ..csin). Real operands are promoted to complex.
 
<langsyntaxhighlight Ursalalang="ursala">u = 3.785e+00-1.969e+00i
v = 9.545e-01-3.305e+00j
 
Line 5,193 ⟶ 5,322:
complex..mul (u,v),
complex..sub (0.,u),
complex..div (1.,v)></langsyntaxhighlight>
{{out}}
<pre><
Line 5,203 ⟶ 5,332:
 
=={{header|VBA}}==
<syntaxhighlight lang="vba">
<lang VBA>
Public Type Complex
re As Double
Line 5,292 ⟶ 5,421:
Debug.Print "Sqrt(a) = " & CPrint(c)
End Sub
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 5,306 ⟶ 5,435:
Abs(a) = 3.35410196624968
Sqrt(a) = 1.55789954205168+0.962834868045836i
</pre>
 
=={{header|V (Vlang)}}==
<syntaxhighlight lang="v (vlang)">import math.complex
fn main() {
a := complex.complex(1, 1)
b := complex.complex(3.14159, 1.25)
println("a: $a")
println("b: $b")
println("a + b: ${a+b}")
println("a * b: ${a*b}")
println("-a: ${a.addinv()}")
println("1 / a: ${complex.complex(1,0)/a}")
println("a̅: ${a.conjugate()}")
}</syntaxhighlight>
{{out}}
<pre>a: 1.000000+1.000000i
b: 3.141590+1.250000i
a + b: 4.141590+2.250000i
a * b: 1.891590+4.391590i
-a: -1.000000-1.000000i
1 / a: 0.500000-0.500000i
a̅: 1.000000-1.000000i
</pre>
 
=={{header|Wortel}}==
{{trans|CoffeeScript}}
<langsyntaxhighlight lang="wortel">@class Complex {
&[r i] @: {
^r || r 0
Line 5,339 ⟶ 5,491:
"1 / ({b}) = {b.inv.}"
"({!a.mul b}) / ({b}) = {`!.mul b.inv. !a.mul b}"
]</langsyntaxhighlight>
{{out}}
<pre>(5 + 3i) + (4 - 3i) = 9
Line 5,350 ⟶ 5,502:
=={{header|Wren}}==
{{libheader|Wren-complex}}
<langsyntaxhighlight ecmascriptlang="wren">import "./complex" for Complex
 
var x = Complex.new(1, 3)
Line 5,362 ⟶ 5,514:
System.print("-x = %(-x)")
System.print("1 / x = %(x.inverse)")
System.print("x* = %(x.conj)")</langsyntaxhighlight>
 
{{out}}
Line 5,378 ⟶ 5,530:
 
=={{header|XPL0}}==
<langsyntaxhighlight XPL0lang="xpl0">include c:\cxpl\codes;
 
func real CAdd(A, B, C); \Return complex sum of two complex numbers
Line 5,434 ⟶ 5,586:
COut(0, CInv(U,W)); CrLf(0);
COut(0, Conj(U,W)); CrLf(0);
]</langsyntaxhighlight>
 
{{out}}
Line 5,446 ⟶ 5,598:
 
=={{header|Yabasic}}==
<langsyntaxhighlight Yabasiclang="yabasic">rem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
rem CADDI/CADDR addition of complex numbers Z1 + Z2 with Z1 = a1 + b1 *i Z2 = a2 + b2*i
rem CADDI returns imaginary part and CADDR the real part
Line 5,493 ⟶ 5,645:
print "Example: Z1 + Z2 with Z1 = 3 +2i , Z2 = 1-3i: Z1 + Z2 = 4 -1i"
print caddr(3,2,1,-2), "/", caddi(3,2,1,-3) // 4/-1
end if</langsyntaxhighlight>
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">var [const] GSL=Import("zklGSL"); // libGSL (GNU Scientific Library)
(GSL.Z(3,4) + GSL.Z(1,2)).println(); // (4.00+6.00i)
(GSL.Z(3,4) - GSL.Z(1,2)).println(); // (2.00+2.00i)
Line 5,503 ⟶ 5,655:
(GSL.Z(1,0) / GSL.Z(1,1)).println(); // (0.50-0.50i) // inversion
(-GSL.Z(3,4)).println(); // (-3.00-4.00i)
GSL.Z(3,4).conjugate().println(); // (3.00-4.00i)</langsyntaxhighlight>
{{out}}
<pre>
Line 5,516 ⟶ 5,668:
 
=={{header|zonnon}}==
<langsyntaxhighlight lang="zonnon">
module Numbers;
type
Line 5,611 ⟶ 5,763:
Writeln(~b);
end Main.
</syntaxhighlight>
</lang>
{{Out}}
<pre>
Line 5,624 ⟶ 5,776:
=={{header|ZX Spectrum Basic}}==
{{trans|BBC BASIC}}
<langsyntaxhighlight lang="zxbasic">5 LET complex=2: LET r=1: LET i=2
10 DIM a(complex): LET a(r)=1.0: LET a(i)=1.0
20 DIM b(complex): LET b(r)=PI: LET b(i)=1.2
Line 5,647 ⟶ 5,799:
1000 IF o(i)>=0 THEN PRINT o(r);" + ";o(i);"i": RETURN
1010 PRINT o(r);" - ";-o(i);"i": RETURN
</syntaxhighlight>
</lang>
{{out}}
<pre>Result of addition is: