2010-08-02 48 views
0
import java.util.Scanner; 

public class a { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     Scanner in = new Scanner(System.in); 
     System.out.println("enter #"); 
     long a = in.nextLong(); 

     long b = (long) Math.toRadians(a); 
     long c = (long) Math.tan(b); 

     System.out.println(c); 

    } 
} 

上面是我試圖讓Math.tan吐出一個角度的正確數值。我知道math.tan方法只接受以弧度表示的角度作爲參數。我無法獲得90,270角度的正確值...使用雙精度不會產生正確的答案。使用Math.tan的正確參數的幫助

+0

你可以PLZ格式化你的代碼嗎? – hvgotcodes 2010-08-02 01:00:40

回答

3

當然你不能得到90度的一個很好的價值,因爲tan沒有定義爲那個角度。這是清晰的定義

tan(x) = sin(x)/cos(x). 

如果x = 90°,那麼cos(x)= 0,所以你得到一個零除。同樣的事情適用於270°,實際上是所有90°的奇數倍。 (現在,計算機是數字野獸,並且pi/2弧度不能完全表示(在任何基地中),除了cos是以數字方式計算的,所以不是NaN或INF,您可能會得到一個很大的數字,因爲分母是非常接近零,但不一定等於零,因爲數值近似)。

此外,long是整數類型。當涉及以度(0,1,2,...,358,359)表示的角度時,整數精度可能足夠滿足您的需求。但是以弧度爲單位,圍繞一圈的整圈對應於0弧度至2π的角度,其中2π〜6.28。因此b不能是整數,也不能是c

+0

嗯,我把他的代碼插入intellij,改變了一切,雙倍,並輸入90不返回NaN。我也嘗試了Math.PI/2。 – hvgotcodes 2010-08-02 01:11:04

+0

@hvgotcodes:也許它返回INF或2.69E350? – 2010-08-02 01:12:34

+0

@andreas,它返回1.633123935319537E16 – hvgotcodes 2010-08-02 01:15:11

0

這只是正常:

public class TanDemo 
{ 
    public static void main(String[] args) 
    { 
     for (int degrees = -89; degrees < 90; ++degrees) 
     { 
      double radians = Math.toRadians(degrees); 
      System.out.println("deg: " + degrees + " rad: " + radians + " tan: " + Math.tan(radians)); 
     } 
    } 
} 
0

double使用作爲起點的方法,如Math.toRadians(雙)=>雙和Math.tan(雙)=>雙輸入和輸出:

import java.util.Scanner; 

public class a { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     Scanner in = new Scanner(System.in); 
     System.out.println("enter #"); 
     double a = in.nextDouble(); 

     double b = Math.toRadians(a); 
     double c = Math.tan(b); 

     System.out.println(c); 

    } 
} 

在域注 - 撒克遜德魯斯指出的 - 的n*90°n*π/2 rads)切線是不確定的。正確的答案在n*π/2n是一個奇數整數是不可能的。更具體地,tan(x)接近,因爲x增加到n*π/2tan(X)接近-∞也是如此,因爲x減少爲n*π/2

+0

°是U + 00BA,MASCULINE ORDINAL指示器。我的猜測是你正在尋找°,U + 00B0,DEGREE SIGN – 2010-08-02 01:49:08

+0

-1。如果n是奇數,那麼n * 90度的切線只是不確定的。 – 2010-08-02 01:54:50

+0

@Andreas Rejbrand:好眼睛。我已經更正了n和男性序數指標的範圍。 Quid Pro Quo,通過零校正除數;) – 2010-08-02 02:05:56