Три функции собирают и разбирают комплексные числа. Встроенная функция complex создает сложное значение из вещественной и мнимой частей с плавающей точкой, в то время real и imag извлекают действительные и мнимые части комплексного значения.
complex(realPart, imaginaryPart floatT) complexT
real(complexT) floatT
imag(complexT) floatT
Тип аргументов и возвращаемое значение соответствуют. Для complex два аргумента должны иметь один и тот же тип с плавающей точкой, а возвращаемый тип - это сложный тип с соответствующими компонентами с плавающей точкой: complex64 для аргументов float32 и complex128 для аргументов float64. Если один из аргументов оценивается как нетипизированная константа, он сначала неявно преобразуется в тип другого аргумента. Если оба аргумента оцениваются как нетипизированные константы, они должны быть некомплексными числами или их мнимые части должны быть равны нулю, а возвращаемое значение функции является нетипизированной комплексной константой.
Для real и imag аргумент должен быть сложного типа, а тип возвращаемого значения - соответствующий тип с плавающей запятой: float32 для аргумента complex64 и float64 для аргумента complex128. Если аргумент оценивается как нетипизированная константа, это должно быть число, а возвращаемое значение функции - нетипизированная константа с плавающей точкой.
real и imag функции вместе образуют обратный вариант complex функции, поэтому для значения z комплексного типа Z, z == Z(complex(real(z), imag(z))).
Если операнды этих функций являются константами, возвращаемое значение является константой.
var a = complex(2, -2) // complex128
const b = complex(1.0, -1.4) // нетипизированная complex постоянная 1 - 1.4i
x := float32(math.Cos(math.Pi/2)) // float32
var c64 = complex(5, -x) // complex64
var s uint = complex(1, 0) // нетипизированная complex постоянная 1 + 0i может быть преобразована в uint
_ = complex(1, 2<<s) // недопустимо: 2 предполагает тип с плавающей точкой, не может сдвигаться
var rl = real(c64) // float32
var im = imag(a) // float64
const c = imag(b) // нетипизированная константа -1.4
_ = imag(3 << s) // недопустимо: 3 предполагает complex тип, не может сдвигаться
Читайте также:
- Спецификация Go: преобразования между числовыми типами
- Спецификация Go: арифметические операторы
- Спецификация Go: логические, числовые, строковые типы
Комментариев нет:
Отправить комментарий