Два типа комплексного числа в Go
Широкий тип комплексного числа стоит по умолчанию, узкий задают явно. Оба хранят пару дробных частей, но внутри используют разную точность для вещественной и мнимой стороны. К широкому типу чаще приводят результаты выражений, если вы сами не сузили переменную.
Узкий тип экономит память там, где достаточно меньшей точности, но смешивать его с широким без приведения нельзя: компилятор потребует явное согласование, как для разных дробных типов.
Соберем значение через complex без
литерала и посмотрим тип результата:
z := complex(3, 4)
fmt.Printf("%T\n", z)
Команда сборки из двух дробных частей в
широком виде возвращает complex128, даже
если аргументы короче. Чтобы получить
complex64, результат нужно сузить
приведением типа к узкому имени.
Сузим результат после сборки:
w := complex64(complex(1, 2))
fmt.Printf("%T\n", w)
Даны части 5 и 1. Соберите
из них комплексное значение в main,
запишите его в complex128 и выведите
тип переменной.
Даны части 0 и 8. Получите
узкий тип через приведение после сборки
и выведите тип переменной.
Дан следующий код:
var a complex64 = complex(2, 3)
b := complex(2, 3)
Скажите, соберется ли программа без дополнительных правок.