суббота, 22 июня 2019 г.

Спецификация Go: манипулирование комплексными числами

Три функции собирают и разбирают комплексные числа. Встроенная функция 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 тип, не может сдвигаться


Читайте также:


Комментариев нет:

Отправить комментарий