• 締切済み

指数関数の求め方

以下の二つのプログラムは指数関数を求めるものですが、前者ではxに-19以下の値を入れた際にまったく異なる解をだします。 これの原因を教えてください。 ----------------------------------------------------------- double myexp(double x){ double e=0.0,w=1.0; int n=1; while( n<1000){ e = e + w; w = w * (x/n++); } return e; } ----------------------------------------------------------- double myexp(double x){ double e=0.0,w=1.0; int n=1,f=0; if(x < 0){ f = 1; x = -x; } while(n<1000){ e = e + w; w = w * (x/n++); } if(f == 1){ e = 1 / e; } return e; } -----------------------------------------------------------

みんなの回答

回答No.3

どうやら俺の目は節穴のようだ。再現していた…orz

  • 500cii
  • ベストアンサー率50% (14/28)
回答No.2

exp(-19)はだいたいe-9のオーダーになります。 wはループ中で最大でe+7の値になります。 ところでdouble型の有効桁数は10進で約16桁です。 従ってwがe+7のオーダーの時、減算においてe-9(=7-16)の位の部分は誤差によって正確な値にはなりません。 と言うわけで上の方の式が誤った結果を出します。 eとwをlong double型で宣言すればexp(-19)も、有効桁数が増えるので妥当な値になると思います。

関連するQ&A