2015-01-14 10 views
1

IEEE 754 표준에서는 float (32 비트)가 가형에 23 비트를 사용하며 모든 실제의 모든 자릿수를 약 107까지 저장할 수 있다고합니다. cos() 또는 sin()과 같은 삼각 함수의 경우 최하위 비트가 중요합니다. 따라서 인코딩 중에 가수의 일부가 손실되기 때문에 float 변수의 sin() 및 cos() 결과가 잘못된 것으로 예상 할 수 있습니다.삼각 함수의 부동 소수점 및 배정도

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() 과정 정확한 값으로 매개 변수 자체에는 정밀도가 부족합니까?

답변

0

IEEE float은 24 비트의 정밀도 (23 개의 명시 적으로 저장된 비트와 1 개의 "숨김"비트)를가집니다. 표시되는 동작의 핵심은 10 이 바이너리로 작성된 경우 길이가 34 비트이지만 마지막 10 비트가 모두 "0"이라는 것입니다. 따라서 단 정밀도 표현은이 특정 수에 대해 정확합니다.