Вызов 6/9 возведение в степень не работает

Калькулятор это считает всегда одинаково, не зависимо от скобок.



Не сделаете ли вы мне хорошую скидку на дальнейшие курсы за все найденные (уже и в дальнейшем) мною баги?

В 7/9 та-же проблема с возведением.

Использовал Math.pow

var length = 0.55;
var weight = 5;
var fatMass = 0.8;
var bodyMassIndex = Math.round(weight / Math.pow(length, 2));
var fatPercent = Math.round(fatMass / weight * 100);

Не сделаете ли вы мне хорошую скидку на дальнейшие курсы за все найденные (уже и в дальнейшем) мною баги?

Нет, не сделают. Дело в том, что это “не баг, а фича!”.

1. У операторов в JS есть приоритет (таблица приоритетов) и исходя из этого приоритета работает код.

например, в строке
var i = weight / (length * length)


сначала выполнится то, что в круглых скобках () (приоритет оператора 20)
и только потом weight будет разделен на результат перемножения в круглых скобках, т.к. у деления приоритет ниже и равен 14, далее присваивание = (приоритет 3)
Как итог: 16.52892561983471


2. Второй момент побитовый оператор ^ XOR (Побитовое исключающее ИЛИ )
если коротко, то работает он так, в двоичной системе счисления сравнивает биты у каждого значения, возвращая 1 при 0 и 1 или 1 и 0, либо 0 при 1 и 1

в строке
var i = weigth / length ^ 2


по аналогии с первым случаем, у деления приоритет выше чем у XOR (14 против 7), поэтому сначала все делится и только потом срабатывает ^
Итог этого оператора: 11


3. Ну и в третьем примере
var i = weight / (length ^ 2)


сначала в круглых скобках происходит преобразование с оператором XOR (побитовое ИЛИ), а потом этот результат является делителем
Итог: 2.5

1 лайк

Есть вариант куда проще - использовать две звёздочки как возведение в степень.