Java中如何让Math.sin(180°)返回0?
问题分析与解决
核心误区
Java中Math.sin()方法的参数要求是弧度,而非直觉中的角度,这是三次调用结果差异的根本原因。
逐个解释你的调用结果
调用1:
System.out.println(Math.sin(Math.toRadians(180.0)))Math.toRadians(180.0)将180°转换为π弧度,数学上sin(π)=0。但由于浮点数精度限制,实际计算得到一个极其接近0的极小值1.2246467991473532E-16,这属于正常现象,可视为0。调用2:
System.out.println(Math.sin(Math.toDegrees(180.0)))Math.toDegrees(180.0)是将弧度转换为角度,这里传入180弧度会被转换为约10313.24°,你相当于在计算sin(10313.24°),结果自然和180°的正弦值无关。调用3:
System.out.println(Math.sin(180.0))
直接传入180,Math.sin()会把它当作180弧度处理(约10313.24°),计算出的-0.8011526357338304是这个弧度值的正弦结果,和你预期的180°正弦值完全不是一回事。
正确做法
如果要计算角度的正弦值,必须先用Math.toRadians()将角度转换为弧度,再传入Math.sin()。比如计算180°的正弦,就用第一种调用方式,结果接近0是浮点数精度的正常表现。
内容的提问来源于stack exchange,提问作者TenolToSy
相关产品推荐
相关产品推荐

