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°的角度的正确值...使用双精度不会产生正确的答案。
答案 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*π/2
。 tan(X)
接近-∞
,x
向n*π/2
减少也是如此。