只是好奇而已!但我发现SAS持有的π的值实际上是不正确的。
例如:
data _null_;
x= constant('pi') * 1000000000000000000000000000;
put x= 32.;
run;
给出π值(3)141592653589792961327005696
然而-π当然是(3)1415926535897932384626433832795( http://www.joyofpi.com/pi.html )-到31DP。
怎么回事?!!
发布于 2009-09-29 04:53:44
SAS将PI作为常量存储到小数点后14位。您所看到的差异是在执行乘法步骤时浮点数学的产物。
data _null_;
pi=constant("PI");
put pi= 32.30;
run;
/*On日志*/
pi=3.141592653589790000000000000000
发布于 2009-09-29 04:45:49
PI在所有编程语言中都以设定的精度作为常量。它不是经过计算的。您的代码只是暴露了PI在SAS中的准确性。
发布于 2009-09-29 04:53:01
你得到了16位数的精度。这意味着它可能使用IEEE 754 double-precision floating point representation,它只给出大约16-17个十进制数字的精度。π不可能用任何有限的位数来表示,因此任何计算机表示都将在某个位数处截断。有一些方法可以进行任意精度的数学运算(Java有一个BigDecimal类),但即使这样,您也必须在某个地方截断π。以这种方式完成的数学运算要慢几个数量级(因为它不是由直接CPU指令处理的)。
https://stackoverflow.com/questions/1492307
复制相似问题