三角函数中的浮点和双精度

时间:2015-01-14 15:43:49

标签: java sin cos

IEEE 754标准规定浮点数(32位)使用23位作为尾数,这允许存储每个实数的所有数字,大约为10⁷。对于诸如cos()sin()的三角函数,最低有效位非常重要。因此,可以预期浮点变量的sin()和cos()的结果在10⁷之后是错误的,因为尾数的一部分在编码期间丢失。

for (int i = 0; i <= 15; i++) {
    System.out.println("for 10^" + i);
    System.out.println(Math.sin((float) Math.pow(10, i)));
    System.out.println(Math.sin(Math.pow(10, i)));
}

此代码显示浮点变量的sin()cos()精确到10 10 ,这是一个我不明白的行为...... cos()sin()可以处理确切的值,因为参数本身缺乏精确度吗?

1 个答案:

答案 0 :(得分:1)

IEEE浮点数在尾数中具有24位精度(23个明确存储,加1个“隐藏”位)。您看到的行为的关键是当10 10 以二进制写入时,它是34位长,但最后10位都是“0”。因此,单精度表示对于此特定数字是精确的。