Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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数学类的数学运算_Java_Math - Fatal编程技术网

不使用Java数学类的数学运算

不使用Java数学类的数学运算,java,math,Java,Math,我一直在用Java制作我自己的类库,我遇到了一个小麻烦。图书馆以数学为中心。我开始的目的是不使用Java数学类。不幸的是,我缺乏技能,再加上无法在网上找到解决这个问题的资源,这导致我又回到了Java数学课上有没有一种不用Math.log计算对数的方法?你应该使用Math.log 试试这个,用简单的数学来计算 public static int toLog2N(int num){ return num>1 ? 1 + toLog2N(num/2) : 0; } 这只是一个例子,您应该使用M

我一直在用Java制作我自己的类库,我遇到了一个小麻烦。图书馆以数学为中心。我开始的目的是不使用Java数学类。不幸的是,我缺乏技能,再加上无法在网上找到解决这个问题的资源,这导致我又回到了Java数学课上有没有一种不用Math.log计算对数的方法?

你应该使用Math.log 试试这个,用简单的数学来计算

public static int toLog2N(int num){
return num>1 ? 1 + toLog2N(num/2) : 0;
}

这只是一个例子,您应该使用Math类,因为它提供了不同的方法,如log(double a)、log10(double a)、log1p(double a)。它将使您的代码更可读、更容易理解


希望有帮助

我们可以尝试使用下列幂级数:

例如:

@Test
public void printMathCalculation() {
    double libValue = Math.log(100); 
    double myValue = getLn(100);

    System.out.println("Actual: \t" + libValue);
    System.out.println("Approximate: \t" + myValue);
}

//Take double to an integer power
private double pow(double num, int power) {
    double result = 1;

    for(int i = 0; i < power; i++) {
        result *= num;
    }
    return result;
}

//Get natural log
private double getLn(double num) {
    int accuracy = 1000;
    double sum = 0;
    for(int n = 0; n < accuracy; n++) {
        double num1 = (1.0/(2*n+1));
        double num2 = (num-1)/(num+1);

        sum += num1*pow(num2,2*n+1);
    }

    return 2 * sum;
}

有或没有?为什么不想使用
Math
?嗯,您可以随时复制Math.log的源代码,并将其复制到totalynotmath.log类/方法中。问题当然是这样做的意义何在。你为什么要这样做?软件开发第一课:不要再发明轮子。@JohnathanDavidow阅读/调试
数学
源代码是一个很好的学习方法,如果这是目的的话。它确实有帮助。非常感谢。奥普说他不想用数学。在您的代码中,有一个变量
n
不知从何而来。您的代码返回
int
,这意味着例如
toLog2N(4)=toLog2N(5)=toLog2N(6)=toLog2N(7)
,这是false
Math.log(x)
是log base e,而不是log base 2是的,他应该只使用
Math.log
,但他显然是那种永不满足的好奇类型,除非他学会了“怎么做”并且自己动手……@KevinAnderson Yep。这就是我。
Math
/
StrictMath
是唯一不使用JNI/JNA/JNR/JNHW来利用浮点协处理器指令进行数学运算的方法。否则,你必须做手工泰勒级数或其他近似,这是缓慢的。这就是为什么您的袖珍计算器在sqrt/log/sin/时比原始操作慢得多。
Actual:         4.605170185988092 
Approximate:    4.605170185988078