2010-12-15 2 views
0

Я хочу написать программу в java, которая будет выполнять число, поднятое до мощности, но без использования math.pow. Программа должна быть общей для включения фракций. Метод приращения цикла будет увеличиваться на 1, что вполне подходит для целых чисел; но не фракций. Пожалуйста, предложите общий метод, который был бы полезен для меня.Внедрение общей функции питания без использования Math.pow в Java

+0

Почему вы хотите это сделать? Это домашнее задание? – thejh 2010-12-15 18:20:13

ответ

0

Подумайте, что должна делать функция власти.

Математически: х^5 = х * х * х * х * х, или ((((х * х) * х) * х) * х)

В ваш цикл, вы можете использовать оператор * = для выполнения операции, которая происходит выше.

Как вы обрабатываете фракции? Java не имеет встроенного типа дробей; он хранит десятичные числа, которые будут вычисляться так же, как целые числа (другими словами, x * x работает с обоими типами). Если у вас есть специальный класс для фракций, для вашей петли требуется всего два шага: один для умножения числителя и один для умножения знаменателя.

4

Сначала заметим, что pow (a, x) = exp (x * log (a)).

Вы можете реализовать свою собственную функцию ехр() с помощью Taylor series расширения для е х:

е х = 1 + х + х /2! + x /3! + x /4! + x /5! + ...

Это будет работать для нецелых значений x. Чем больше терминов вы включите, тем больше будет результат .

Обратите внимание, что, используя некоторые алгебраические тождества, вам нужно только прибегнуть к расширению серии для x в диапазоне 0 < x < 1. exp (int + frac) = exp (int) * exp (frac), и нет необходимости использовать расширение серии для exp (int). (Вы просто умножаете его, , так как это целая мощность e = 2,71828 ...).

Аналогичным образом, можно реализовать журнал (х) с помощью одного из этих разложений в ряды:

журнал (1 + х) = х - х /2 + х /3 - х /4 + ...

или

журнал (1-х) = -1 * (х + х /2 + х /3 + х /4 + ...)

Но эти серии только сходятся для x в интервале -1 < x < 1.Таким образом, для значений из в за пределами этого диапазона, вы, возможно, придется воспользоваться тождеством

журнал (PQ) = LOG (р) + журнал (Q)

и сделать некоторые повторяющиеся деления на е (= 2,71828 ...), чтобы привести a в диапазон, где сходится к серии. Например, если a = 4, вам нужно будет взять x = 3 , чтобы использовать первую формулу, но 3 вне диапазона сходимости. Итак, мы начинаем деления из факторов е:

4/е = 1,47151 ...

журнала (4) = лог (е * 1.47151 ...) = 1 + журнал (1.47151 ...)

Теперь мы можем взять x = .47151 ..., который равен в пределах диапазона конвергенции и оценивает log (1 + x) с использованием расширения серии.

0

При чтении на полномочия на Wikipedia:

a^x = exp(x ln(a)) for any real number x 

Является ли это обман?

Смежные вопросы