帮助Math.tan提供正确的参数

时间:2010-08-02 00:56:55

标签: java

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°的角度的正确值...使用双精度不会产生正确的答案。

4 个答案:

答案 0 :(得分:3)

您需要为b和c使用双打。

但是,请注意,未定义90度和270度的棕褐色,例如,请参见此处的图表:

http://www.intmath.com/Trigonometric-graphs/4_Graphs-tangent-cotangent-secant-cosecant.php

答案 1 :(得分: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也不能。

答案 2 :(得分: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));
        }
    }
}

答案 3 :(得分:0)

使用double作为Math.toRadians(double)=&gt; double和Math.tan(double)=&gt; double等方法的输入和输出的起点:

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

    }
}

在域名注释中 - 正如Saxon Druce所指出的那样 - n*90°n*π/2 rads)的正切是未定义的。正好n*π/2 n的正确答案是奇数整数是不可能的。更具体地,tan(x)方法x增加n*π/2tan(X)接近-∞xn*π/2减少也是如此。