Шаг 15.
Язык программирования Go.
Вещественные типы данных в Go

    На этом шаге рассмотрим вещественные числа в Go.

    Язык Go предоставляет два варианта чисел с плавающей точкой разного размера, float32 и float64. Их арифметические свойства регулируются стандартом IEEE 754 и реализованы на всех современные процессорах. Рассмотрим диапазоны значений этих типов (табл. 1).

Таблица 1. Вещественные типы в языке Go
Тип Диапазон представляемых значений
float32 ±3,40282346638528859811704183484516925440 × 1038
Мантисса может быть представлена с точностью до 7 десятичных разрядов
float64 ±1,797693134862315708145274237317043567981 × 10308
Мантисса может быть представлена с точностью до 15 десятичных разрядов

    В языке Go поддерживаются все операции с вещественными числами, перечисленные в таблице 1 шага 13. Большинство констант из пакета math, и все его функции перечислены в таблицах 1 и 2.

Таблица 1. Константы из пакета math
Константа Описание
math.E Константа e; примерно 2,718281828459045
math.Ln2 loge2, примерно 0,693147180559945
math.Ln10 log102, примерно 2,302585092994045
math.Log2E 1/loge2, примерно 1,442695021629333
math.Log10E 1/loge10, примерно 0,434294492006301
math.Pi Константа π, примерно 3,141592653589793
math.Phi Константа φ, примерно 1,618033988749984
math.Sqrt2 √2, примерно 1,414213562373095
math.SqrtE √e, примерно 1,648721270700128
math.SqrtPi √π, примерно 1,772453850905516
math.SqrtPhi √φ, примерно 1,272019649514068

    Все функции из пакета math принимают и возвращают значения типа float64, если явно не указано иное.

Таблица 2. Некоторые функции из пакета math
Функция Описание
math.Abs(x) |x|, абсолютное значение x
math.Cbrt(x) , кубический корень из x
math.Ceil(x) , наименьшее целое, большее или равное x; math.Ceil(5.4) = = 6.0
math.Cos(x) Косинус угла x, выраженного в радианах
math.Exp(x) ex
math.Exp2(x) 2x
math.Floor(x) , наибольшее целое, меньшее или равное x; math.Floor(5.4) = = 5.0
math.Log(x) logex
math.Log10(x) log10x
math.Log2(x) log2x
math.Max(x, y) Наибольшее из чисел x и y
math.Min(x, y) Наименьшее из чисел x и y
math.Mod(x, y) Остаток от деления x на y
math.Pow(x, y) xy
math.Pow10(n) 10n в виде значения типа float64, где значение n имеет тип int
math.Signbit(x) Возвращает значение типа bool; true, если x является отрицательным числом (включая -0.0)
math.Sin(x) Синус угла x, выраженного в радианах
math.SinCos(x) Синус и косинус угла x, выраженного в радианах
math.Sqrt(x) √x
math.Tan(x) Тангенс угла x, выраженного в радианах
math.Trunc(x) x с усеченной дробной частью

    Вещественные числа записываются в форме с десятичной точкой или в экспоненциальной форме, например 0.0, 3., 8.2, –7.4, –6e4, .1, 5.9E–3.

    С вещественными числами могут использоваться все операторы сравнения, перечисленные в таблице 1 шага 12.

    Задание 1. Рассмотрим пример работы с вещественными числами:

Раскрыть/скрыть решение и комментарии.

    В большинстве случаев, где необходимы вещественные числа, лучше использовать значения типа float64, особенно если учесть, что все функции в пакете math оперируют значениями типа float64.

    В языке Go имеется также тип float32. Поскольку в Go вещественные числа имеют строго определенный размер, их всегда можно без опаски читать из внешних источников, таких как файлы и сетевые соединения, или записывать в них.

    Вещественные числа можно преобразовывать в целые значения, используя стандартный синтаксис (например, int(вещественное_число)), в этом случае дробная часть просто отбрасывается. Разумеется, если вещественное число превосходит по величине максимально возможное значение целочисленного типа, в который выполняется преобразование, в результате будет получено непредсказуемое значение. Решить эту проблему можно с помощью собственной функции преобразования.

    Задание 2. Реализовать функцию преобразования вещественного числа в целое.

Раскрыть/скрыть решение и комментарии.

    На следующем шаге рассмотрим введение в инструкции в Go.


Предыдущий шаг Содержание Следующий шаг