【问题标题】:tan() in Java returning a strange valueJava中的tan()返回一个奇怪的值
【发布时间】:2016-07-11 19:08:20
【问题描述】:

我的代码将弧度角传递给costansin。除了90 的棕褐色外,一切似乎都运行良好,它出于某种奇怪的原因给出了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 无穷大?

【问题讨论】:

    标签: java math


    【解决方案1】:

    嗯,tan(pi/2) 的弧度基本上是无限的,不是吗?所以你会期望得到一个非常大的数字,不是吗? (它不是无穷大,因为 pi/2 不能精确地表示为 double。您会在渐近曲线上找到一个非常接近的值,它会变成无穷大。)

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

    【讨论】:

    • 不是 pi/4 而是 pi/2 = 90 度。
    • 实际上 tan(pi/2) 是未定义的,应该返回一个错误。问题是,pi 不是一个精确的值,所以 tan(pi/2) 非常大。
    • @MartijnPieters:现在添加了图表。希望他们能留下来......(另一种选择是链接到谷歌搜索,当然会在搜索结果中显示图表。)
    • 当会议决定所有非常大的值都应表示为数字 16331239353195370 时,我一定错过了会议 :)
    • @jwg:别忘了输入值不会是完全 pi/2 弧度...
    猜你喜欢
    • 2011-12-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多