java - 360 度的正弦值非零

标签 java floating-point

我有这个java代码来计算sin(360):

if(re.equals(" sin "))
{
    try{
        String next=data.get(i+1);
        v1 = Double.parseDouble(next);
        double degreess = v1;
        double radianss = Math.toRadians(degreess);

        BigDecimal bDecimal1 = new BigDecimal(
            Math.sin(radianss), MathContext.DECIMAL32);

        re=""+bDecimal1;
        //re=""+Math.sin(Math.toRadians(Double.valueOf(next)));
        i++;
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

我预计sin(360)应该正好是 0。

但我的结果不为零:-0.0000000000000002449294 。为什么这不为零?

最佳答案

处理浮点值时,应该使用 abs(sin360 - 0) < delta (其中 delta 非常小,如 0.0000001)而不是 sin360 == 0 。这是浮点内部表示问题。 What Every Computer Scientist Should Know About Floating-Point Arithmetic

关于java - 360 度的正弦值非零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15272377/

相关文章:

java - Android 构建错误 com.google.firebase :firebase-core:16. 0.8

java - 对 3 列的二维数组进行排序

java - JDBCTemplate + MySQL 主键转外键

ruby - 为什么 Ruby 的 14.5.round() 比 "%.0f"% 14.5(给出 14)做得更好(给出 15)

c++ - 不,真的,浮点提升什么时候发生?

java - Restful : How to hide Test Data from Report?

Java += 编译器/jre 错误?

rust - 是否可以用 Rust 编写 Quake 的快速 InvSqrt() 函数?

c# - 从二进制形式转换 float NaN 值,反之亦然会导致不匹配

PHP - 将字符串转换为 float