Java中的tan()返回一个奇怪的值

时间:2012-10-03 17:32:19

标签: java math

我的代码以弧度向costansin传递一个角度。除了90的tan之外,所有内容似乎都能正常工作,由于某些奇怪的原因,它会给出值16331239353195370。示例代码:

import java.text.DecimalFormat;

public class mathtable {

  public static void main(String[] args) {

    System.out.println("Angle   Sin Cos Tan");
    System.out.println("-----   --- --- ---");

    for (double angle = 0.0; angle < 180; angle +=5) {
      double angle_rad = Math.toRadians(angle);
      double sin = Math.sin(angle_rad);
      String sin_4 = new DecimalFormat("#.####").format(sin);
      double cos = Math.cos(angle_rad);
      String cos_4 = new DecimalFormat("#.####").format(cos);
      double tan = Math.tan(angle_rad);
      String tan_4 = new DecimalFormat("#.####").format(tan);
      System.out.println(angle + "  " + sin_4 + "   " + cos_4 + "   " + tan_4);
    }
  }
}

为什么返回的值不严格等于IEEE无穷大?

1 个答案:

答案 0 :(得分:15)

嗯,弧度中的tan(pi/2)基本上是无限的,不是吗?因此,您希望得到一个非常大的数字,不是吗? (它不是无穷大,因为pi / 2不能完全表示为double。你在 close 的渐近曲线上找到一个值它将成为无限的地方。)

请参阅these graphs of sin/cos/tan了解我的意思,记住pi / 2弧度为90度。