На этом шаге рассмотрим вещественные числа в Go.
Язык Go предоставляет два варианта чисел с плавающей точкой разного размера, float32 и float64. Их арифметические свойства регулируются стандартом IEEE 754 и реализованы на всех современные процессорах. Рассмотрим диапазоны значений этих типов (табл. 1).
Тип | Диапазон представляемых значений |
---|---|
float32 | ±3,40282346638528859811704183484516925440 × 1038 Мантисса может быть представлена с точностью до 7 десятичных разрядов |
float64 | ±1,797693134862315708145274237317043567981 × 10308 Мантисса может быть представлена с точностью до 15 десятичных разрядов |
В языке Go поддерживаются все операции с вещественными числами, перечисленные в таблице 1 шага 13. Большинство констант из пакета math, и все его функции перечислены в таблицах 1 и 2.
Константа | Описание |
---|---|
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, если явно не указано иное.
Функция | Описание |
---|---|
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.