среда, 20 мая 2020 г.

Константа переполняет int

Почему этот код не компилируется?

const n = 9876543210 * 9876543210
fmt.Println(n)

../main.go:2:13: constant 97546105778997104100 overflows int

Ответ

Нетипизированная константа n должна быть преобразована в тип, прежде чем ее можно будет присвоить параметру interface{} в вызове fmt.Println.

fmt.Println(a ...interface{})

Когда тип не может быть выведен из контекста, нетипизированная константа преобразуется в bool, int, float64, complex128, string или rune в зависимости от формата константы.

В этом случае константа является целым числом, но n больше максимального значения типа int.

Тем не менее, n может быть представлен как float64.

const n = 9876543210 * 9876543210
fmt.Println(float64(n))

9.75461057789971e+19

Для точного представления больших чисел пакет math/big реализует арифметику произвольной точности (длинная арифметика). Он поддерживает целые числа со знаком, рациональные числа и числа с плавающей точкой.


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


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

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