2009-05-07 3 views
2

다음 SAS 코드 : 나는 첫 번째 15 ~ 16 개 자리가 신뢰할 수 있음을 이해하지만, 왜이 기본 다른 주는가SAS에서 과학 표기법의 숫자 리터럴이 명시 적으로 쓰여지는 숫자와 다른 숫자를주는 이유는 무엇입니까?

10000000000000000905969664 9999999999999998758486016 
diff 

: 내 Windows 시스템 인쇄 밖으로

data _null_; 
    format t u best32.; 
    t = 10000000000000000000000000; 
    u = 1e25; 
    put t u; 
    if t ne u then put 'diff'; 
run; 

숫자? SAS 컴퓨팅 1e25는 어떻습니까?

편집 : 10의 다른 제곱에 대한 출력을 1e25까지 제공하도록 요청 받았습니다. 다음 프로그램 :


%macro doit; 
data _null_; 
    format t u best32.; 
%let t=1; 
%do i=1 %to 25; 
    %let t=&t.0; 
    t = &t; 
    u = 1e&i; 
    put t u; 
%end; 
run; 
%mend; 
%doit; 

는 다음과 같은 출력을 제공합니다 : 실제로 1 * 10 * 10 ... * 10을 계산 할 수 있으며 오류가 당신이 비트의 상당수에 넘어 얻을 즉시에 들어온다처럼


10 10 
100 100 
1000 1000 
10000 10000 
100000 100000 
1000000 1000000 
10000000 10000000 
100000000 100000000 
1000000000 1000000000 
10000000000 10000000000 
100000000000 100000000000 
1000000000000 1000000000000 
10000000000000 10000000000000 
100000000000000 100000000000000 
1000000000000000 1000000000000000 
10000000000000000 10000000000000000 
100000000000000000 100000000000000000 
1000000000000000000 1000000000000000000 
10000000000000000000 10000000000000000000 
100000000000000000000 100000000000000000000 
1000000000000000000000 1000000000000000000000 
10000000000000000000000 10000000000000000000000 
99999999999999991611392 99999999999999991611392 
999999999999999983222784 999999999999999983222784 
10000000000000000905969664 9999999999999998758486016 

답변

2

같습니다 기본이되는 float 형

그러나 IEE754 유형 float/double에 대해서는 1x10 전 범위을 정확하게 나타낼 수 있으므로 정확성을 잃지 않고 발생한다고 생각하지 않습니다.

가능성이 문제는 허용되는 것보다 정밀도가 낮은 부동 소수점을 저장하는 것과 관련이 있습니다 (1e25 계산이 엉망이 될 수 있음). 설명은 http://www.uc.edu/sashtml/lrcon/z0695157.htm#z0695187을 참조하십시오.

업데이트 1 :

좋아, 당신의 의견에 따라, 당신은 길이를 제한하지 않는. 다음 코드는 무엇을 제공합니까?

t = 10; 
u = 1e1; 
put t u; 
t = 100; 
u = 1e2; 
put t u; 
t = 1000; 
u = 1e3; 
put t u; 
: : : 
t = 10000000000000000000000000; 
u = 1e25; 
put t u; 

출력 결과를 바탕으로 우리는 아마 그 내용을 추론 할 수 있습니다.

+0

나는 내 숫자의 길이를 제한하지 않습니다. 길이는 8 비트 (64 비트)입니다. –

+0

저는 10의 다른 제곱의 값을 제공하기 위해 질문을 편집했습니다. –

관련 문제