Java 在log函数中使用递归幂函数,而不使用Math.functions
正如标题中所说,我有一个问题,那就是我需要建立自己的电源和日志方法,并在输入时使用它们。 我的幂函数似乎很好,直到我尝试在loga(b)函数中使用它。 一个问题是,我不理解log方法中的for循环,因为我在类中复制了该循环,以便以后理解它。另一个问题是,我不知道内置的Math.pow()是如何工作的,如果我有代码或伪代码,我可以猜测我自己的幂函数有什么不同。 提前谢谢你,请对我宽容一点,我对这一切还是很陌生的Java 在log函数中使用递归幂函数,而不使用Math.functions,java,math,recursion,Java,Math,Recursion,正如标题中所说,我有一个问题,那就是我需要建立自己的电源和日志方法,并在输入时使用它们。 我的幂函数似乎很好,直到我尝试在loga(b)函数中使用它。 一个问题是,我不理解log方法中的for循环,因为我在类中复制了该循环,以便以后理解它。另一个问题是,我不知道内置的Math.pow()是如何工作的,如果我有代码或伪代码,我可以猜测我自己的幂函数有什么不同。 提前谢谢你,请对我宽容一点,我对这一切还是很陌生的 import java.util.Scanner; public class Num
import java.util.Scanner;
public class Numbers {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double i1;
double i2;
System.out.print("type your a:");
i1 = input.nextDouble();
System.out.print("type your b:");
i2 = input.nextDouble();
input.close();
sumRange(i1, i2);
power(i1, i2);
log(i1, i2);
System.out.println("Sum from a to b: " + sumRange(i1, i2) + "\nFibonacci for A: " + fibonacci(i1)
+ "\nFibonacci for B: " + fibonacci(i2) + "\nA^B:" + power(i1, i2) + "\na%b: " + mod(i1, i2)
+ "\nloga (b)" + log(i1, i2));
}
// if I'm honest I don't understand how the log code works exactly,
// what I do know is that this code calculates the correct log
// with Math.pow() function
// My own power function doesn't seem to work and I don't know how the
// MAth.pow()
// function is different from mine
static double log(double i1, double i2) {
double value = 0;
for (double i = 1; i > .001; i /= 10) {
while (!(power(i1, value) > i2)) {
value += i;
}
value -= i;
}
return value;
}
static double power(double i1, double i2) {
if (i2 == 0) {
return 1;
}
if (i2 == 1) {
return i1;
}
// The line below seems to cause problems since used in log(double,
// double) method
return i1 * power(i1, i2 - 1);
}
// I excluded my 3 other methods as they work fine and don't depend on
// each other to work
幂方法仅适用于整数
i2
,否则递归将永远不会终止
对于非整数i2
,在减少到0
和1
之间后,至少可以进行一些线性插值。对于较大的基值i1
来说,这是一个糟糕的近似值,但总比没有好
if( 0<=i2 and i2 <=1) return 1+i2*(i1-1);
谷歌搜索“libm/exp.c”对于
c
标准库中指数的专业实现,有不同的变体,对于“libm/pow.c”也有类似的变体。在比较和算术运算中混合double
s和整数文本是个坏主意。
if( i2 < 0 ) return 1/power(i1,-i2);