Java 为什么trig函数的某些值不能给出正确答案?

Java 为什么trig函数的某些值不能给出正确答案?,java,trigonometry,Java,Trigonometry,几天前我开始编写代码,制作了一个简单的三角计算器。它使用度并给出度作为大多数值的答案,除了一些值 比如说。如果我想要罪(90)的答案,它会给我,但是如果我想要罪(180)的答案,它会给我一个错误的答案 这是sin函数的代码 Scanner input = new Scanner(System.in); System.out.println ("sin, cos, or tan?"); String trig = input.next(); if (trig.equals ("sin")) {

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

比如说。如果我想要罪(90)的答案,它会给我,但是如果我想要罪(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函数未定义时才会发生,因此我可以理解这一点)。

1.2246467991473532E-16是一个非常小的数字,离零不远。当使用float或double时,几乎总是不需要与精确的数字进行比较,比如

a == 0
但是使用类似

Math.abs(a - 0) < epsilon
Math.abs(a-0)

其中ε是要求精度的,例如1E-101.2246467991473532E-16是一个非常小的数字,离零不远。当使用float或double时,几乎总是不需要与精确的数字进行比较,比如

a == 0
但是使用类似

Math.abs(a - 0) < epsilon
Math.abs(a-0)

当epsilon要求精度时,例如1E-10和1.2246467991473532E-16“几乎”为0,一些读数:为什么使用两个扫描仪?一个就足够了。
Math.toRadians(180)
的结果不完全等于数学常数π,因此
Math.sin(Math.toRadians(180)
不完全等于0。1.2246467991473532E-16“几乎”为0,一些阅读:为什么要使用两个扫描仪?一个就足够了。
Math.toRadians(180)的结果
不完全等于数学常数π,因此
Math.sin(Math.toRadians(180)
不完全等于0。