计算正弦和余弦 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;
}