2016-03-03 123 views
-2
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); 
     } 

    } 
} 

在上面的代碼中,我試圖計算正弦和餘弦。但是我 得不到正確的結果。這似乎完全合乎邏輯。要做到這一點,我是使用泰勒系列的 。你能告訴我我的 代碼有什麼問題嗎?計算正弦和餘弦

+1

和輸入參數值? – Bathsheba

+0

「我沒有得到正確的結果」是非常不明確的。請嘗試調試代碼。 – f1sh

+0

輸入是角度和系列展開的次數 – chris

回答

1

不幸的是13!及以上會溢出Java中的int類型。

因此,在fact(int num)以上num以上的任何值都會給出意想不到的結果。

一個補救措施是使用一個long它可以讓你達到19!,到那個時候該系列應該已經充分收斂。使用double將產生更多的術語,任何精度損失都在您的系列方法的精確度範圍內。

0

我認爲你的公式有點不合適。 Take a look here.

嘗試罪是這樣的:

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; 
} 

和cos這樣的:

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; 
}