π如何在sas内计算?

时间:2009-09-29 12:44:10

标签: algorithm sas constants pi

只是好奇!但我发现SAS持有的π值实际上是不正确的。

例如:

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

给出π值(3.)141592653589792961327005696

然而 - π当然是(3.)1415926535897932384626433832795(http://www.joyofpi.com/pi.html) - 至31 dp。

什么给了?? !!

4 个答案:

答案 0 :(得分:6)

PI在所有编程语言中保持为常量,达到设定精度。它没有计算。您的代码只是暴露了在SAS中PI的准确程度。

答案 1 :(得分:6)

SAS将PI作为常量存储到14位小数。当您执行乘法步骤时,您看到的差异是浮点数学的假象。

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

/ * On Log * /

pi=3.141592653589790000000000000000

答案 2 :(得分:3)

你有16位数的精度。这意味着它可能使用IEEE 754 double-precision floating point representation,它只提供大约16-17个十进制数字的精度。 π不可能以任何有限数量的数字表示,因此任何计算机表示都将被截断为某些数字。有一些方法可以进行任意精度数学运算(Java有一个BigDecimal类),但即使这样你也必须在某处截断π。并且以这种方式完成的数学要慢几个数量级(因为它不是由直接CPU指令处理的)。

答案 3 :(得分:1)

正如Garry Shutler所说,它是一个常数。请注意,数字类型的计算机语言中的小小数值很少都是准确的(实际上,它们的准确度可能低于它们的精度),因为它们被存储为可以快速操作的非常好的近似值。如果您需要极高的精确度(如在财务和科学方面),您需要使用Java BigDecimal这样的特殊类型来处理完全准确(以计算速度为代价)。 (对不起,不知道SAS,所以不知道BigDecimal的模拟。)