質問: fabs(exp(x)-taylor(x,n)); } printf("第%d項まで展開する必要がある\n",n); return 0; } ``` fctrl.c ``` double fctrl(int n){ if(n==0){ return 1; }else{ return n*fctrl(n-1); } } ``` taylor.c ``` #include double taylor(double x, int n){ if(n==0){ return 1; }else{ return pow(x,n)/fctrl(n)+taylor(x,n-1); } } ``` ### 試したこと ex2-2がどこまで処理されているのか確かめたところscanfのあたりから処理されていないところまでわかりました。 ### 補足情報(言語/FW/ツール等のバージョンなど) コンパイルはgcc -o ex13 mylib.h ex2-2.c fctrl.c taylor.c -lm の形で行いました。
回答: こんにちは。 xに小さな値を入れれば計算終了します。 35までは終了し、36は終了しませんでした。 taylor展開計算の中で何かオーバーフローが発生しているようです。 指数関数の増え方は爆発的ですから、意外に簡単にオーバーフローします。 ちなみに下記の文をループの中に入れることで解りました。 > > printf("[%d] err=%f exp(x)=%f taylor(x,n)=%f\n", n, err, exp(x), taylor(x,n)); > > > 【追記】 `fctrl(n)`のところで警告がでてましたのでtaylor.cに#include"mylib.h"を補なってます。 この#include無しの場合、コンパイラは`int fctrl(int n)`と解釈している筈なので、そこで落ちたのかも知れません。