1

ちょっと興味があるんだけど!しかし、SAS が保持する π の値が実際には正しくないことに気付きました。

例えば:

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

(3.)141592653589792961327005696 の π 値を与える

ただし - π はもちろん (3.)1415926535897932384626433832795 ( http://www.joyofpi.com/pi.html ) - 31 dp です。

何を与える??!!

4

4 に答える 4

6

SASは、PIを小数点以下14桁までの定数として格納します。表示されている違いは、乗算ステップを実行したときの浮動小数点演算のアーティファクトです。

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

/*ログに*/

pi=3.141592653589790000000000000000
于 2009-09-29T12:53:43.783 に答える
6

PI は、すべてのプログラミング言語で設定された精度の定数として保持されます。計算されていません。あなたのコードは、SAS での PI の正確さを公開しているだけです。

于 2009-09-29T12:45:49.160 に答える
3

あなたは16桁の精度を得ました。これは、おそらくIEEE 754倍精度浮動小数点表現を使用していることを意味します。これは、小数点以下16〜17桁の精度しか提供しません。πを有限の桁数で表すことは不可能であるため、コンピューターの表現はある桁数で切り捨てられます。任意精度の計算を行う方法はいくつかありますが(JavaにはBigDecimalクラスがあります)、それでもどこかでπを切り捨てる必要があります。そして、そのように行われる計算は、数桁遅くなります(直接のCPU命令によって処理されないため)。

于 2009-09-29T12:53:00.570 に答える
1

Garry Shutler が言ったように、それは定数として保持されます。コンピューター言語の数値型の小さな小数値は、すぐに操作できる非常に優れた近似値として格納されるため、ほとんど正確ではないことに注意してください (実際、その精度は精度よりも低くなる可能性があります)。優れた精度が必要な場合 (金融や科学の取り組みなど)、BigDecimal完全に正確であることを処理する Java のような特殊な型を使用する必要があります (計算速度は犠牲になります)。(申し訳ありませんが、SAS を知らないので、SAS のアナログはわかりませんBigDecimal。)

于 2009-09-29T12:54:54.640 に答える