48 lines
1.1 KiB
AutoHotkey
48 lines
1.1 KiB
AutoHotkey
Cset(C,1,1)
|
|
MsgBox % Cstr(C) ; 1 + i*1
|
|
Cneg(C,C)
|
|
MsgBox % Cstr(C) ; -1 - i*1
|
|
Cadd(C,C,C)
|
|
MsgBox % Cstr(C) ; -2 - i*2
|
|
Cinv(D,C)
|
|
MsgBox % Cstr(D) ; -0.25 + 0.25*i
|
|
Cmul(C,C,D)
|
|
MsgBox % Cstr(C) ; 1 + i*0
|
|
|
|
Cset(ByRef C, re, im) {
|
|
VarSetCapacity(C,16)
|
|
NumPut(re,C,0,"double")
|
|
NumPut(im,C,8,"double")
|
|
}
|
|
Cre(ByRef C) {
|
|
Return NumGet(C,0,"double")
|
|
}
|
|
Cim(ByRef C) {
|
|
Return NumGet(C,8,"double")
|
|
}
|
|
Cstr(ByRef C) {
|
|
Return Cre(C) ((i:=Cim(C))<0 ? " - i*" . -i : " + i*" . i)
|
|
}
|
|
Cadd(ByRef C, ByRef A, ByRef B) {
|
|
VarSetCapacity(C,16)
|
|
NumPut(Cre(A)+Cre(B),C,0,"double")
|
|
NumPut(Cim(A)+Cim(B),C,8,"double")
|
|
}
|
|
Cmul(ByRef C, ByRef A, ByRef B) {
|
|
VarSetCapacity(C,16)
|
|
t := Cre(A)*Cim(B)+Cim(A)*Cre(B)
|
|
NumPut(Cre(A)*Cre(B)-Cim(A)*Cim(B),C,0,"double")
|
|
NumPut(t,C,8,"double") ; A or B can be C!
|
|
}
|
|
Cneg(ByRef C, ByRef A) {
|
|
VarSetCapacity(C,16)
|
|
NumPut(-Cre(A),C,0,"double")
|
|
NumPut(-Cim(A),C,8,"double")
|
|
}
|
|
Cinv(ByRef C, ByRef A) {
|
|
VarSetCapacity(C,16)
|
|
d := Cre(A)**2 + Cim(A)**2
|
|
NumPut( Cre(A)/d,C,0,"double")
|
|
NumPut(-Cim(A)/d,C,8,"double")
|
|
}
|