计算正弦和余弦 import java.util.*; 导入java.math.*; 公共级辛科{ 公共静态void main(字符串参数[]){ 扫描仪kb=新扫描仪(System.in); System.out.println(“输入余弦的角度:”); double anglecos=kb.nextDouble(); System.out.println(“输入所需的扩展数:”); int n=kb.nextInt(); System.out.println(“输入正弦的角度:”); 双角度sin=kb.nextDouble(); System.out.println(“输入所需的扩展数:”); int n2=kb.nextInt(); System.out.println(“余弦:+workCos(anglecos,n)); 系统输出println(“正弦:+工作输入(角度sin,n2)); } 公共静态双工作坐标(双角度,整数){ 双ans=0; 整数倍; for(int k=0;k

计算正弦和余弦 import java.util.*; 导入java.math.*; 公共级辛科{ 公共静态void main(字符串参数[]){ 扫描仪kb=新扫描仪(System.in); System.out.println(“输入余弦的角度:”); double anglecos=kb.nextDouble(); System.out.println(“输入所需的扩展数:”); int n=kb.nextInt(); System.out.println(“输入正弦的角度:”); 双角度sin=kb.nextDouble(); System.out.println(“输入所需的扩展数:”); int n2=kb.nextInt(); System.out.println(“余弦:+workCos(anglecos,n)); 系统输出println(“正弦:+工作输入(角度sin,n2)); } 公共静态双工作坐标(双角度,整数){ 双ans=0; 整数倍; for(int k=0;k,java,runtime-error,nan,Java,Runtime Error,Nan,不幸的是13!及更高版本将溢出Java中的int类型 因此,在fact(int num)中,大于12的num的任何值都将给出意外的结果 一种补救方法是使用long,这会使你达到19!,到那时,序列应该已经充分收敛。使用double将产生更多的项,任何精度损失都在你的序列方法的精度范围内。我认为你的公式有点偏离 试着这样做: import java.util.*; import java.math.*; public class SinCos{ public static void mai

不幸的是
13!
及更高版本将溢出Java中的
int
类型

因此,在
fact(int num)
中,大于12的
num
的任何值都将给出意外的结果


一种补救方法是使用
long
,这会使你达到
19!
,到那时,序列应该已经充分收敛。使用
double
将产生更多的项,任何精度损失都在你的序列方法的精度范围内。

我认为你的公式有点偏离

试着这样做:

import java.util.*;
import java.math.*;
public class SinCos{
    public static void main(String args[]){
        Scanner kb=new Scanner(System.in);
        System.out.println("Enter the angle for cosine: ");
        double anglecos=kb.nextDouble();
        System.out.println("Enter the number of expansions required:");
        int n=kb.nextInt();
        System.out.println("Enter the angle for sine:");
        double anglesin=kb.nextDouble();
        System.out.println("Enter the number of expansions required:");
        int n2=kb.nextInt();
        System.out.println("Cosine: "+workCos(anglecos,n));
        System.out.println("Sine: " +workSin(anglesin,n2));

    }

    public static double workCos(double angle, int num){
        double ans=0;
        int times;
        for(int k=0;k<=num;k++){
            times=(2*k);

            ans=(ans + ((Math.pow(-1,k)*Math.pow(angle,times))/(fact(times))));

        }
        return ans;
    }

    public static double workSin(double angle, int num){
        double ans=(angle*Math.PI)/180;
        int times;
        for(int k=0;k<=num;k++){
            times=(2*k)+1;

            ans=(ans + ((Math.pow(-1,k)*Math.pow(angle,times))/(fact(times))));
            System.out.println(ans);
        }
        return ans;
    }

    public static int fact(int num){

        if(num==0||num==1){
            return 1;
        }
        else{
            return num* fact(num-1);
        } 

    }
}
public static double workSin(double angle, int num){
    double ans = 0;
    for(int n = 1; n <= num; n++) {
        ans += Math.pow(-1, n - 1) * Math.pow(angle, 2*n - 1) / fact(2*n - 1);
        System.out.println(ans);
    }
    return ans;
}
公共静态双工作入(双角度,整数){
双ans=0;

对于(int n=1;n,输入参数值为?“我没有得到正确的结果”是非常不具体的。请尝试调试代码。输入是角度和序列展开的次数,例如cos(90)没有给我答案0,它给出-7.0985,如果n大于15,我得到答案NaN
public static double workCos(double angle, int num) {
    double ans = 1;
    for(int n = 1; n < num; n++) {
        ans += Math.pow(-1, n) * Math.pow(angle, 2*n) / fact(2*n);
        System.out.println(ans);
    }
    return ans;
}