문제

그냥 궁금해! 그러나 나는 SAS가 보유한 π의 값이 실제로 틀린 것을 발견했다.

예를 들어:

data _null_;
x= constant('pi') * 1000000000000000000000000000;
put x= 32.;
run;

(3) 141592653589792961327005696의 π 값을 제공합니다

그러나 - π는 물론 (3.) 141592653589793238462643832795 ( http://www.joyofpi.com/pi.html ) - ~ 31dp.

무엇을주고 있습니까 ?? !!

도움이 되었습니까?

해결책

SAS는 PI를 14 자리에서 14 개로 상수로 저장합니다. 당신이보고있는 차이점은 곱셈 단계를했을 때 부동 소수점 수학의 인공물입니다.

data _null_;
    pi=constant("PI");
    put pi= 32.30;
run;

/ *로그 */

pi=3.141592653589790000000000000000

다른 팁

PI는 모든 프로그래밍 언어에서 정밀한 정밀도로 일정하게 유지됩니다. 계산되지 않았습니다. 코드는 SAS의 정확한 PI가 얼마나 정확한지를 드러냅니다.

당신은 16 자리의 정밀도를 얻었습니다. 그것은 아마도 an을 사용한다는 것을 의미합니다 IEEE 754 이중 프레시션 플로팅 포인트 표현, 이것은 약 16-17 자리수의 정밀도를 제공합니다. π가 유한 한 수의 숫자로 표시되는 것은 불가능하므로 컴퓨터 표현은 일부 수의 숫자로 잘릴 것입니다. 임의의 차가 수학 (Java는 큰 클래스를 가지고 있음)을 수행하는 방법이 있지만 어딘가에 π를 자르면됩니다. 그리고 그렇게 한 수학은 몇 배 더 느리게 진행됩니다 (직접 CPU 지침에 의해 처리되지 않기 때문에).

Garry Shutler가 말했듯이, 그것은 일정하게 유지됩니다. 숫자 유형의 컴퓨터 언어의 작은 분수 값은 정확한 모든 것이 거의 없다는 점에 유의하십시오 (실제로 정확도는 정확도보다 낮을 수 있음). 신속하게 조작 할 수있는 매우 좋은 근사치로 저장되기 때문입니다. 우수한 정밀도가 필요하다면 (재무 및 과학적 노력에서와 같이) Java 's와 같은 특수 유형을 사용해야합니다. BigDecimal 이 처리는 완전히 정확합니다 (계산 속도 비용으로). (죄송합니다. SAS를 모르니까 아날로그를 모릅니다. BigDecimal.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top