Арифметика дает неожиданное значение в рубине - PullRequest
4 голосов
/ 06 мая 2011

Почему это:

((256-438)^2)+((227-298)^2)

Дай мне -253, когда должно быть 38165 вместо?

Ответы [ 6 ]

15 голосов
/ 06 мая 2011

^ - битовый исключающий оператор ИЛИ (XOR)

** - оператор экспоненты, используйте:

((256-438)**2)+((227-298)**2)
6 голосов
/ 06 мая 2011

Потому что ^ является оператором для XOR, а не экспонент. Попробуйте ** вместо.

2 голосов
/ 06 мая 2011

^ - оператор XOR, а не экспонента.

2 голосов
/ 06 мая 2011

^ - это побитовый оператор XOR, в соответствии с http://phrogz.net/programmingruby/language.html. Не оператор "power of".

2 голосов
/ 06 мая 2011
Try ((256-438)**2)+((227-298)**2)
0 голосов
/ 09 июня 2016

Использование ** не ^

Код должен быть - ((256-438)**2)+((227-298)**2)

** - оператор Возведения в степень или «сила».

Оператор возведения в степень

Повышает number до степени second number, которая может быть отрицательной или дробный.

2 ** 3 #=> 8

2 ** -1 #=> (1/2)

2 ** 0.5 #=> 1.4142135623731

^ - побитовый оператор XOR.

Оператор XOR

Оператор XOR реализует исключающее ИЛИ, что означает, что он будет установите бит в 1 на выходе, если только один из соответствующих битов на входах установлены 1:

(a = 18).to_s(2) #=> "10010"

(b = 20).to_s(2) #=> "10100"

(a ^ b).to_s(2) #=> "110" (начальные нули опущены)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...