Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在log函数中使用递归幂函数,而不使用Math.functions_Java_Math_Recursion - Fatal编程技术网

Java 在log函数中使用递归幂函数,而不使用Math.functions

Java 在log函数中使用递归幂函数,而不使用Math.functions,java,math,recursion,Java,Math,Recursion,正如标题中所说,我有一个问题,那就是我需要建立自己的电源和日志方法,并在输入时使用它们。 我的幂函数似乎很好,直到我尝试在loga(b)函数中使用它。 一个问题是,我不理解log方法中的for循环,因为我在类中复制了该循环,以便以后理解它。另一个问题是,我不知道内置的Math.pow()是如何工作的,如果我有代码或伪代码,我可以猜测我自己的幂函数有什么不同。 提前谢谢你,请对我宽容一点,我对这一切还是很陌生的 import java.util.Scanner; public class Num

正如标题中所说,我有一个问题,那就是我需要建立自己的电源和日志方法,并在输入时使用它们。 我的幂函数似乎很好,直到我尝试在loga(b)函数中使用它。 一个问题是,我不理解log方法中的for循环,因为我在类中复制了该循环,以便以后理解它。另一个问题是,我不知道内置的Math.pow()是如何工作的,如果我有代码或伪代码,我可以猜测我自己的幂函数有什么不同。 提前谢谢你,请对我宽容一点,我对这一切还是很陌生的

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);