Задать вопрос
@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));

Заранее спасибо.
  • Вопрос задан
  • 1924 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
Seasle
@Seasle Куратор тега JavaScript
Что? Math.pow уже не работает?

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

    const count = Math.round(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
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@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: Моё возведение в степень - быстрее, чем цикл, но и накопление ошибок вычислений там хуже. Почему так - тоже думайте сами.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽