PRELOADER

不念过去 不负现在 不畏将来

当前文章 : 《myExp》

12/4/2018 —— 

题目: 计算exp的一种方法是exp(x)=1+x+x^2/2!+x^3/3!+……

要求: 编写一个myExp方法,计算该公式。

java代码:

package myExp;

import java.util.Scanner;

public class myExp {

    public static void main(String[] args) {
        System.out.println("please enter a number");
        Scanner in = new Scanner(System.in);
        int x = in.nextInt();
        System.out.println("myExp: \t "+myExp(x));
        System.out.println("Math.exp:"+Math.exp(x));
    }

    //计算阶乘
    public static long factorial(int n) {
        long sum = 1;
        while(n>1) {
            sum=sum*n;
            n--;
        }
        return sum;
    }

    //计算x的n次方
    public static long myPow(int x, int n) {
        long sum = 1;
        while (n>0) {
            sum=sum*x;
            n--;    
        }
         return sum;   
    }

    //计算exp
    public static double myExp(int x){
        double result = 1.0;
        double z = 0;
        for(int i=1;i<10;i++) {
            long pow = myPow(x,i);
            long fac = factorial(i);
            z =(double) pow/fac;
            result = result+z;
            //System.out.println(i+"   "+result);
        }
        return result;
    }
}

输出示例:

please enter a number
1
myExp:      2.7182815255731922
Math.exp:2.718281828459045

  • 1、这个程序中有三个函数,分别为计算阶乘,计算pow,计算exp。计算exp需要用到阶乘和pow。需要注意的是,计算阶乘时,数字增长很快。超过数据类型的限制时,计算结果就会不正确,此时数据变为0,所以出现异常。java.lang.ArithmeticException:/by zero.即出现除以0的情况,因此程序抛出异常。
  • 2、同时,由于阶乘以及pow方法的返回值类型都是整数,而如果两者的商小于1时,整个结果就不会有变化,此时需要使用强制类型转换(double).
  • 3、事实上,由于阶乘数值过大,决定了n值不能取太大,而此时计算误差就会比较大。