Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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_Series - Fatal编程技术网

Java:当除以阶乘时,如何存储阶乘?它太大了,不能翻倍

Java:当除以阶乘时,如何存储阶乘?它太大了,不能翻倍,java,series,Java,Series,我是java新手,我的程序可能远没有达到它所能达到的效率,但这里是: public class Compute { public static void main(String[] args) { for(double i = 10000; i <= 100000; i += 10000) { System.out.println("The value for the series when i = " + i + " is " + e(i)); }

我是java新手,我的程序可能远没有达到它所能达到的效率,但这里是:

public class Compute {
public static void main(String[] args) {
    for(double i = 10000; i <= 100000; i += 10000)
    {
        System.out.println("The value for the series when i = " + i + " is " + e(i));
    }
}
public static double e(double input) {
    double e = 0;
    for(double i = 0; i <= input; i++)
    {
        e += 1 / factorial(input);
    }
    return e;
}
public static double factorial(double input) {
    double factorial = 1;
    for(int i = 1; i <= input; i++)
    {
        factorial *= i;
    }
    return factorial;
}
}
公共类计算{
公共静态void main(字符串[]args){

对于(double i=10000;i 您可能应该使用阶乘。

您可能应该使用阶乘。

< p>虽然可以用<代码> BigDecimal < /代码>计算任意精度结果,但不需要计算E.级数展开的<代码> 100000!< /代码>。考虑该系列中的第二十项。(
20/20!
)的震级约为10-19,因此其对总总量的贡献微不足道


换句话说,在第二十位之后的任何项的贡献将只在第十九位小数之后改变数字。

< P>尽管可以用<代码> BigDecimal < /代码>计算任意精度结果,但是对于E的级数展开,不必计算为<代码> 100000!<代码>。(
20/20!
)的震级约为10-19,因此其对总总量的贡献微不足道

换言之,第20位之后的任何术语的贡献都只会在第19位小数点后的数字发生变化。

更改此值

e += 1 / factorial(input);

为了加速代码,有很多事情要做。想想(i+1)!vs i!,不要每次都重新计算整个阶乘

当答案变化小于吉姆所说的要求精度时,也停止计算。

改变这个

e += 1 / factorial(input);

为了加速代码,有很多事情要做。想想(i+1)!vs i!,不要每次都重新计算整个阶乘


也不要像吉姆所说的那样,计算答案变化小于所需精度的时间。

。如果不知道你真正想要完成什么,任何人都很难以有意义的方式回答你的问题。这是为了家庭作业,这本书几乎逐字逐句地讲述了我在代码下所说的关于计算给定的e的内容系列e。我希望这是有意义的,我不确定如何让它更容易理解。/正如Jim Garrison所指出的,如果你想精确地计算e,使系列中的100000个术语产生差异,你需要将其存储在双精度以外的其他值中。如果你真的需要40万个小数位的答案,你应该ULD考虑阶乘的一个大整数,对于阶乘的倒数和一个部分求和,都可以得到一个大的小数。当你有两个数字所代表的数字时,你可以停止。虽然不知道你实际上在试图完成什么,但是任何人都很难用有意义的方式回答你的问题。这本书几乎逐字逐句地讲述了我在代码下所说的关于计算e的内容,因为我给出了系列e。我希望这是有意义的,我不确定如何让它更容易理解。/正如Jim Garrison所指出的,如果你想精确地计算e,使系列中的100000个术语产生差异,你需要将其存储在如果你真的需要一个400000个小数点的答案,你应该考虑阶乘的一个大整数,对于阶乘的倒数和一个部分求和,都可以得到一个大的小数。当你有两个数字可以代表的数字时,你可以停止。不知道为什么要下投票。我相信你应该能够CA。L轻松计算10000或更大数字的阶乘。有时这有助于理解OP的目标。在计算e的系列近似值时,不需要计算那么大的阶乘。不确定为什么会出现向下投票。我相信你应该能够轻松计算10000或更大数字的阶乘。有时这有助于理解OP的目标。在计算e的级数近似值时,没有必要计算那么大的阶乘。+1。我认为作业的想法可能是,学生自己会发现,如果将结果存储在一个双精度中,将e的级数展开为100000项是浪费时间的。y是什么你所做的是破坏惊喜!+1。我认为作业的想法可能是,学生会自己发现,如果结果存储在一个双精度中,那么将e扩展到100000个术语是浪费时间的。你所做的是破坏惊喜!他问“e=1+(1/1!)+(2/2!)+…+(1/I!)”他问“e=1+(1/1!)+(2/2!)+…+(1/i!)”