@vahan21

Возведение в степень число отрицательный?

Привет всем.
Мне нужна помощь хочу сделать возведение в степень число в отрицательном порядке но хочу всё это сделать с помощью цикла.
function mynumber(a, b) {
		var c = 1;
		if (b < 0) {// 5 ** -2 = 0.04
			// здесь не знаю как продолжить			
		}
		else{
			for (var i = 1; i <= b; i++) {
				c *= a; // 1 * 5 = 5, 5 * 5 = 25, 25 * 5 = 125; 
			}
		}
		return c;
	}
	console.log(mynumber(5, -2));

Заранее спасибо.
  • Вопрос задан
  • 1844 просмотра
Пригласить эксперта
Ответы на вопрос 3
Seasle
@Seasle Куратор тега JavaScript
Что? Math.pow уже не работает?

UPD:
Так чтоль?
const pow = (number, power) => {
    if (number === 1 || power === 0) {
        return 1;
    }

    const count = Math.abs(power);
    let result = number;
    for (let index = 0; index < count - 1; index++) {
        result *= number;
    }

    if (power < 0) {
        return 1 / result;
    } else {
        return result;
    }
};

console.log(Math.pow(2, 2) === pow(2, 2)); // true
console.log(Math.pow(2, -2) === pow(2, -2)); // true
console.log(Math.pow(2, -3) === pow(2, -3)); // true
console.log(Math.pow(3, -4) === pow(3, -4)); // true


Специально для автора, т. к. понять код выше, видимо, слишком сложно:
function mynumber(a, b) {
	var c = 1;
	if (b < 0) {
		for (var i = b; i < 0; i++) {
			c /= a;
		}
	} else {
		for (var i = 1; i <= b; i++) {
			c *= a;
		}
	}
	return c;
}


Ну и тесты.
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
const pow = (n, power) => {
  let times = power >= 0 ? power : -power;
  let result = 1;
  while (times-- >= 1) result = result * n;
  return power >= 0 ? result : 1 / result;
}

pow(2, -3.2)  // 0.125
Ответ написан
Комментировать
@Karpion
Подсказка: 5^-2 == (1/5)^2 Т.е. надо инвертировать число, возводимое в степень, и дальше возводить его в положительную степень.

Возводить в степень циклом - глупо. Есть способ быстрее, покажу на примере x^19:
x1=x
x2=x1*x1
x4=x2*x2
x8=x4*x4
x16=x8*x8
x19=x16*x2*x1 // ибо 19=16+2+1
Как это переписать в виде цикла - думайте сами.

PS: Моё возведение в степень - быстрее, чем цикл, но и накопление ошибок вычислений там хуже. Почему так - тоже думайте сами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
summer Ярославль
от 100 000 до 140 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
19 апр. 2024, в 20:43
20000 руб./за проект
19 апр. 2024, в 20:11
500 руб./за проект