【问题标题】:Why are certain values for trig functions not giving the correct answer?为什么三角函数的某些值没有给出正确的答案?
【发布时间】:2016-03-25 06:44:47
【问题描述】:

几天前我开始编写代码并制作了一个简单的三角计算器。它使用度数并给出度数作为大多数值的答案,除了一些值。

例如。如果我想要 sin(90) 的答案,它会给我,但如果我想要 sin(180) 的答案,它会给我一个错误的答案。

这是 sin 函数的代码

Scanner input = new Scanner(System.in);
System.out.println ("sin, cos, or tan?");
String trig = input.next();

if (trig.equals ("sin")) {
System.out.println ("input sin value in degrees");
Scanner angle = new Scanner(System.in);

double a,b;

a = (angle.nextDouble());
b = Math.sin(Math.toRadians(a));
System.out.println("Answer: "+ (b) );

它给了我类似 1.2246467991473532E-16 的以下角度的答案:180、360、540、720 等。

cos 和 tan 函数也会发生这种情况(不过,它只会在 tan 函数未定义时发生,所以我可以理解)。

【问题讨论】:

  • wolframalpha.com/input/?i=sin(180) 和 1.2246467991473532E-16 是“几乎” 0,一些阅读:floating-point-gui.de
  • 您为什么使用两个扫描仪?一个就够了。
  • Math.toRadians(180) 的结果并不完全等于数学常数 π,因此 Math.sin(Math.toRadians(180) 不完全是 0。

标签: java trigonometry


【解决方案1】:

1.2246467991473532E-16 是一个相当小的数字,离零不远。在使用 float 或 double 时,您几乎总是不需要与像

这样的确切数字进行比较
a == 0

但使用类似的东西

Math.abs(a - 0) < epsilon

其中 epsilon 是需要精度的地方,例如1E-10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    相关资源
    最近更新 更多