|
沙发

楼主 |
发表于 2011-5-18 16:20:31
|
只看该作者
Re: 请教各位高手!数值3200011003070000002为何显示不对?详细程序如下
sas在处理数值的时候是以浮点型数值去处理的,用的是双精度的浮点型,学过c的话应该知道,用的标准是IEEE754-2008.
算法:value=(sign)*(2**exponent-1023*(1+b**1/2**1+b**2/2**2...)
如3=(1)*(2**(1024-1023)*(1+1**1/2**1))=2*(1.5)=3
你可以用下面的code去生成这一长串的二项式,然后计算一下就知道为什么是那个值了。
data a;
keep n sign exponent mantissa;
length bits $ 64 sign $ 1 mantissa $ 52;
input n @@;
bits = put(n,binary64.);
sign = substr(bits,1,1);
exponent=input(substr(bits,2,11),binary12.)-1023;
mantissa = substr(bits,13,52);
format n best19.;
cards;
3200011003070000002
;
run;
所以存这么长的数值,又要保证完全正确,不如用字符,当然空间会浪费点。 |
|