Рассчитать дробный показатель в для цикла без степенной функции - PullRequest
2 голосов
/ 31 августа 2010

Моя математика в этой области немного шаткая. Кто-нибудь знает, как я могу вычислить мощность, такую ​​как 10 ^ 2.2, не используя математические функции, кроме * / - + и цикл for? У меня нет доступа к математической библиотеке (и я не могу импортировать / включить ее), но мне нужно рассчитать эти вещи. Хм ... может быть, я должен просто посмотреть, как это делает математическая библиотека.

Ответы [ 4 ]

5 голосов
/ 31 августа 2010

Вы можете вычислить журналы и экспоненты, используя только базовую арифметику с расширением ряда Тейлора (или Маклорина).Итак, вы должны быть в состоянии воспользоваться определенными личностями:

exp(ln(a)) = a
ln(a^b) = b*ln(a)
ln(1+x) = x - (x^2)/2 + (x^3)/3 - ... + ...
exp(x) = 1 + x + (x^2)/2 + ...

Посмотрите, что вы можете сделать из всего этого ...

1 голос
/ 31 августа 2010

Выразите показатель степени в виде дроби и разделите обе части (если числа становятся слишком большими, вы можете использовать продолжение расширения дроби, чтобы получить хорошее приближение):

2.2 = 22/10 = 11/5

10 ^ 2.2 = 10 ^ (11/5) = (10 ^ 11) ^ (1/5)

Целочисленные части не должны быть проблемой (см. http://en.wikipedia.org/wiki/Exponentiation_by_squaring).Затем вы можете рассчитать корень по одному из алгоритмов, описанных здесь: http://en.wikipedia.org/wiki/Nth_root_algorithm

1 голос
/ 31 августа 2010

Учитывая, что:

a ^ (m / n) == nth_root(a) ^ m

Преобразуйте ваш показатель в дробь , затем вычислите n-й корень и затем увеличьте результат до m-й степени.

(Вам нужно написать собственную pow функцию.)

1 голос
/ 31 августа 2010

Вы можете использовать этот метод - http://mathworld.wolfram.com/ContinuedFraction.html, чтобы получить очень близкое приближение.

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