C의 배정 밀도 정밀도

알렉스 440

printf("is 0.5 <= 0.49999999999999999 ? %s", 0.5 <= 0.49999999999999999 ? "true":"false" );

반환

is 0.5 <= 0.49999999999999999 ? true

* 이건 숙제가 아니라 호기심뿐입니다.

파스칼 쿠 오크

질문에 대답하는 가장 좋은 방법은 코드 줄을 약간 변경하는 것입니다.

printf("is %.16e <= %.16e ? %s", 0.5, 0.49999999999999999, 0.5 <= 0.49999999999999999 ? "true":"false" );

이 줄을 컴파일 0.49999999999999999하면 가장 가까운 표현 가능 값으로 반올림되는 것을 볼 수 있습니다 double. 이는 for와 동일합니다 0.5(실제로 정확한 값 1/2을 나타냄). 이것은 하나가 다른 것보다 낮거나 같은 이유를 설명합니다. 그들은 같은 것에 대해 두 개의 다른 표기법입니다.


참고 : %.16e이 형식에는 고유 한 배정 밀도 부동 소수점 숫자에 대해 동일한 것을 인쇄하지 않는 속성이 있으므로 형식 선택했습니다 . 전문가들은 16 진수 형식을 선호합니다 %a. 16 진수는 더 간결 할뿐만 아니라이를 사용하면 0.5정확히 표현되고 ( 0x0.8p0또는 0x1.0p-1), 0.1과 같은 다른 10 진수는 그렇지 않음 (16 진수에서는 숫자가 반복되고 모든 유효 숫자를 사용함) 즉시 명확 해 집니다 . 간단히 말해서, 부동 소수점 숫자를 입력하고 인쇄하기 위해 16 진수를 사용하면 즉시 전문가가 될 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사