пятница, 22 мая 2020 г.

Тройки Пифагора, побитовые операции и Golang

Тройки Пифагора являются целочисленными решениями теоремы Пифагора, a2 + b2 = c2.

Хорошо известным примером является (3, 4, 5):

fmt.Println(3^2+4^2 == 5^2) // true

Тройка (6, 8, 10) - еще один пример, но Go, похоже, не согласен.

fmt.Println(6^2+8^2 == 10^2) // false

Ответ

Обводное ^ обозначает побитовый XOR в Go. Вычисление, написанное в базе 2, выглядит следующим образом:

0011 ^ 0010 == 0001   (3^2 == 1)
0100 ^ 0010 == 0110   (4^2 == 6)
0101 ^ 0010 == 0111   (5^2 == 7)

Конечно, 1 + 6 == 7; Go и Пифагор с этим согласен.

Чтобы повысить целое число до степени 2, используйте умножение.

fmt.Println(6*6 + 8*8 == 10*10) // true

В Go нет встроенной поддержки вычислений целочисленных степеней, но есть функция math.Pow для чисел с плавающей запятой.


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


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

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